2019 年我選 Hexo,2026 年為什麼改用 Astro 6

重新檢查 2019 年選擇 Hexo 的理由,說明七年後需求如何從主題與外掛,轉向內容 schema、歷史網址、元件邊界與可重現驗證。

2019 年,我寫了一篇〈為什麼選用 Hexo 來寫部落格〉。當時比較 Jekyll、Hugo 與 Hexo,最後因為熟悉 Node.js、外掛與主題選擇多,加上 NexT Theme 的黑白配色很符合大魔術熊貓工程師,於是選了 Hexo。

七年後,我把同一個部落格搬到 Astro 6。這不代表 2019 年的選擇錯了,而是原本用來做決策的條件已經改變。

2019 年真正要解決的問題

當時我想從 Evernote 走出來,建立一個不用長期維護伺服器的技術部落格。選型時最在意的是:

  • 能不能快速開始寫文章。
  • Windows 與 macOS 的開發環境是否容易處理。
  • 有沒有成熟的主題與外掛。
  • 自己熟不熟悉底層生態系。
  • 靜態網站能不能低成本部署。

Hexo 很符合這些條件。Node.js 是熟悉的工具,NexT Theme 很快就能得到完整的文章、分類、標籤與側欄,GitHub Pages 也不需要另外維護主機。

如果把時間拉回 2019 年,我仍然會先從這些條件做決定。技術選型不能拿 2026 年的需求,回頭批評七年前的自己。

七年後,問題從「怎麼開始」變成「怎麼保留」

部落格停更期間,我不是沒有寫文章,而是把主要創作放到 iThome 鐵人賽。重新啟動時,舊站已經累積 35 篇公開文章、139 個 HTML 路徑、Disqus identity、搜尋引擎 canonical,以及大小寫不同的歷史 alias。

這時最重要的已經不是再找一個漂亮 Theme,而是以下四件事。

文章資料要能被檢查

舊 front matter 可以自由增減欄位,彈性很高,但欄位拼錯或缺少時,問題可能一直到頁面輸出才被看到。

新版用 Astro Content Collections 與 Zod schema 固定 publishedAtupdatedAtlegacyPathcanonicalPathdraftdisqusIdentifier。build 不只是產生 HTML,也會先檢查文章資料是否符合契約。

URL 不應跟著分類變動

舊文章沿用 /:category/:title.html,因此每篇都明確保存 legacyPath。新文章則使用 /posts/<stable-slug>.html,分類只負責導覽,不再決定實體網址。

這個差異看起來只是多一個欄位,實際上改變了維護方式。未來把文章從 AI 移到別的分類,不會順便改掉搜尋結果、外部連結與留言 identity。

設計要能逐步替換

套用完整 Theme 的好處是開始得快,代價是視覺、模板與功能通常一起綁進來。當年這個交換很合理;現在則希望年度導覽、文章卡片、搜尋與版面 tokens 能各自修改,不必先理解整套 Theme 的覆寫規則。

Astro 元件讓這些邊界比較容易拆開,但這不是「元件化一定比較好」。如果目標是迅速建立一個標準技術部落格,成熟 Theme 仍可能比自己維護元件省事。

驗證要能重複執行

新站沒有把「首頁看起來正常」當成完成。遷移腳本會檢查 139 個舊 HTML 路徑、文章結構、內部連結、圖片 metadata、accessibility、秘密字串、SEO 與 Disqus。

框架能提供 build,卻不會自動知道舊站有哪些不能消失的行為。這些 checker 才是長期維護時真正能反覆使用的資產。

我現在怎麼選

如果今天重新面對一個全新的內容網站,我會先用下面四個問題縮小選擇,而不是先比較 GitHub stars 或宣稱誰建置最快。

問題偏向 Theme 型產生器偏向 Astro
想多快得到完整部落格功能?希望套用既有 Theme 後立即開始寫願意自己定義元件與內容結構
內容欄位是否需要嚴格 schema?front matter 保持簡單即可build 前必須驗證資料契約
網址與 SEO 是否有複雜歷史?全新網站或路徑規則單純需要逐頁控制 route、alias 與 metadata
功能會不會持續客製?主要跟著 Theme 能力走搜尋、卡片、版面與資料層要分開演進

Hexo 並沒有因為我改用 Astro 就失去價值。以下情況,我仍會認真考慮 Hexo:

  • 想快速建立典型技術部落格。
  • 已經找到適合且願意長期使用的 Theme。
  • 現有外掛可以處理需求,不需要大量客製。
  • 團隊熟悉 Hexo 的設定、模板與部署流程。

反過來,如果內容本身有明確 schema、既有 URL 很複雜,或網站已經不只是文章列表,Astro 的 Content Collections、檔案路由與元件模型會比較貼近問題。

不要把換框架當成重寫歷史

這次沒有刪掉 2019 年的原文,也沒有把它改成「早知道就用 Astro」。舊文章保留當時的判斷,新文章則交代條件如何變化。

技術選型的價值不在於七年後仍然猜中同一個答案,而是讓人看得懂當時依據什麼做決定。條件變了,可以換工具;條件沒有說清楚,再新的框架也只是在追下一個名字。

Discussion

文章留言

留言服務會連線到 Disqus;只有在你選擇載入後才會建立外部連線。