由於 Logdown 年久失修,改換到 Hugo

由於 Logdown 疑似久未維護:

  1. 使用 Symantec/GeoTrust/RapidSSL 憑證(最近好像修好了)
  2. 官方部落格 2014 後即無更新

所以改用其他靜態網站產生器 (static-site generator, SSG)。

SSG 選擇

常見的 SSG 有 Jekyll (Ruby), Octopress (Ruby), Hexo (Js), Hugo (Go) 等,但由於我筆電的 CPU 是 2009Q2 的 Intel SU3500,所以編譯速度很重要。就之前的經驗而言,Ruby 很慢(不過最近 v2.6 加上了 JIT),聽說 Hexo 比前兩者快,但 Hugo 更快,所以選用 Hugo。

搬遷

Logdown 基本上是使用 Jekyll/Octopress,所以需要一個 Jekyll/Octopress to Hugo 的文章轉換工具。官方教學中列出了以下幾項:

  1. octohug (Octopress, Go):無法保留文章詮釋資料的順序,這是 Golang 及其套件的問題,無法客製反序列化及序列化。
  2. hugo import jekyll(內建):壞了
  3. JekyllToHugo (Python)
  4. ConvertToHugo (Python):看起來功能比上面的多

所以選用 ConvertToHugo 將完章轉成 Hugo 的格式。

然而,ConvertToHugo 功能有所缺失,部份是因為 Logdown 的匯出檔缺少了一些必要資訊:

  1. 匯出檔未區分「已發佈」、「草稿」與「私人」文章1
  2. 匯出檔中文章時間是 UTC 時間且無時區標記;
  3. 語意不同:Logdown 匯出檔中的 categories 其實是 tag1

所以我 fork 了一份,利用 Javascript 在瀏覽器中撈出匯出檔中缺失的詮釋資料,除修正上面的問題外,再加上 Hugo 中才有的功能:

  1. 設定 slug, aliases 等欄位,讓後續遷移網域只要改網址中網域的部份。
  2. 匯出新舊網址的對應表,方便使用 Disqus URL Mapper 遷移留言。
  3. 用 Hugo 的 highlight shortcode 顯示 Octopress fenced-code-block 的 info string 欄位。

這樣就完成了 Logdown 到 Hugo 的遷移。

然而實際上還有一些其他問題需要手動修正:

  1. 「一個頁面有多個 h1 的話對 SEO 有負面影響」2
  2. 不同文章有的是用 h1~h3,有的是用 h2~h4;
  3. 中英文之間有些地方須要有空格3
  4. Google Analytics, Disqus 等需要重設。