從 WordPress 搬到 Astro:先把內容與網址完整保留下來
這一階段的目標不是先把網站做漂亮,而是先確保兩件事:
- 舊內容完整留下來。
- 舊網址不要因為搬家而失效。
對已經存在很多年的技術部落格來說,這兩件事比重新設計版面重要得多。
為什麼改成靜態網站
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
版面可以之後再改,但網址和內容最好一開始就穩定下來。