從 WordPress 搬到 Astro:先把內容與網址完整保留下來

分類:Web · Astro


這一階段的目標不是先把網站做漂亮,而是先確保兩件事:

  1. 舊內容完整留下來。
  2. 舊網址不要因為搬家而失效。

對已經存在很多年的技術部落格來說,這兩件事比重新設計版面重要得多。

為什麼改成靜態網站

WordPress 的優點是後台功能完整,但如果網站主要用途只是保存技術文章,動態 PHP、資料庫、外掛與主機維護就會形成額外負擔。

改成 Astro 後,發布結果就是靜態 HTML:

Markdown

Astro build

HTML / CSS / JS

這樣的架構沒有資料庫,也不需要長期維護 PHP runtime。

匯出 WordPress 內容

WordPress 可以透過內建匯出功能產生 WXR XML。

匯出內容通常包含文章、分類、Tag、作者、發布日期、slug、原始網址、HTML 內容與附件資訊。

匯入腳本的工作就是把這些資料轉成 Astro Content Collection 可讀的 Markdown。

Markdown frontmatter

舊文章轉換後,可以保留這類 metadata:

---
title: "文章標題"
pubDate: 2020-01-01
description: "文章摘要"
permalink: "/2020/01/01/example/"
categories:
  - "Linux"
categorySlugs:
  - "linux"
tags:
  - "SSH"
tagSlugs:
  - "ssh"
draft: false
---

其中最重要的是 permalink,因為文章檔案放在哪裡,不應該決定公開網址。

中文網址的注意事項

舊 permalink 可能含 percent encoding,但 Astro routing 看到的可能是已 decode 的字串,所以產生 static paths 時要安全處理:

let slug = rawSlug;

try {
  slug = decodeURIComponent(rawSlug);
} catch {
  slug = rawSlug;
}

文章、Category、Tag 都可能遇到同樣問題。

Content Collection

Astro 可以讓文章放在:

src/content/blog/

並使用遞迴 glob:

loader: glob({
  base: "./src/content/blog",
  pattern: "**/*.md",
})

所以文章可以依年份整理:

src/content/blog/
├── 2008/
├── 2015/
├── 2020/
└── 2026/

Astro 仍然會全部讀取。

搬家後一定要做 URL 驗證

完成 build 不代表遷移成功。最重要的驗收是把所有舊 permalink 逐一 request,確認新站能正常回應。

理想結果:

Checked: N
OK:      N
Failed:  0

這比人工隨機點幾篇可靠很多。

這一階段完成後的狀態

WordPress export

Markdown

Astro Content Collection

保留原 permalink

Static HTML

版面可以之後再改,但網址和內容最好一開始就穩定下來。


Tags:WordPress · Astro · Migration