4 分钟阅读

用 AI 帮忙迁 WordPress 到 Astro,但不要把方向盘交出去

AI 很适合帮忙处理 WordPress 迁 Astro 的重复活:解析 XML、清理 HTML、生成 frontmatter、检查破图。但 URL、取舍和 SEO 规则还是要人来定。

现在迁站和几年前不太一样了。以前从 WordPress 搬到静态站,很多活都要自己硬写脚本:XML 解析、HTML 清理、图片下载、路径替换、frontmatter 生成。现在有 AI,确实能快很多。

但快不等于可以闭眼。

我更愿意把 AI 当成一个干杂活的助手。它可以写脚本,可以帮我发现漏项,可以把一堆乱糟糟的 HTML 先整理一版。但 URL 怎么保留、哪些内容不能动、哪些页面要 301,这些不能丢给它猜。

先给 AI 一小批样本

不要一上来把整个 WXR 扔给 AI,让它“帮我迁移”。这句话太大了,出来的东西也很容易飘。

我会先给它 3 篇文章样本:

  • 一篇普通文章。
  • 一篇带图片和代码块的文章。
  • 一篇带短代码、评论或相册的复杂文章。

然后让它根据样本写转换脚本,而不是直接改全部内容。

可以这样写提示词:

你是迁移脚本助手。请根据这 3 篇 WordPress WXR item 样本,写一个 Node.js 脚本:

1. 只处理 post_type=post 且 status=publish 的文章。
2. 输出到 src/content/posts/YYYY/MM/DD/slug/index.md。
3. frontmatter 包含 title、date、updated、excerpt、path、permalink、slug、tags、tagSlugs、categories、categorySlugs。
4. 保留正文 HTML,不要把表格和代码块强行转 Markdown。
5. 移除 WordPress block 注释。
6. 生成 old_url,new_url 的 redirects.csv。
7. 不要联网下载图片,只收集图片 URL 到 images.csv。

这个提示词的重点不是“聪明”,而是边界清楚。AI 最怕任务太宽。

AI 适合写检查脚本

我觉得迁移里最适合交给 AI 的,不是正文重写,而是检查。

比如让它写几个脚本:

# 检查远程图片
rg 'https?://.*\\.(jpg|jpeg|png|gif|webp)' src/content/posts

# 检查旧域名
rg 'old-domain.com' src/content/posts

# 检查没有 excerpt 的文章
rg '^excerpt: *$' src/content/posts

也可以让它生成更完整的 Node/Python 检查器:

  • 每个 path 是否唯一。
  • 每个 permalink 是否和 path 对得上。
  • 正文里的本地图片是否真实存在。
  • RSS 里有没有旧域名。
  • sitemap 里有没有重复 URL。
  • 标签 slug 是否为空。

这些工作人肉做很烦,机器做正合适。

不要让 AI 大规模改旧文风

WordPress 老文章经常有很多“当时的味道”:错别字、口头禅、旧截图、当年流行的表达。迁移时我不会顺手让 AI 全部润色。

润完可能更顺,但也更不像原来的博客。

我的做法是:旧文章只修结构,不修语气。比如去掉坏掉的短代码、修图片路径、补 frontmatter。正文能不动就不动。

新文章可以用 AI 起草,再自己改。旧文章不一样,它们本来就是时间的一部分。

图片迁移不要只靠模型判断

AI 可以帮你写下载脚本,但不要让它“看起来像图片就替换”。WordPress 里图片可能来自:

  • wp-content/uploads
  • CDN
  • 旧图床
  • 短代码生成的相册
  • 自定义字段里的封面图
  • REST API media 里的附件

这些来源要扫全。下载失败要留日志,不要静默跳过。

我会让脚本输出三个文件:

images-found.csv
images-downloaded.csv
images-failed.csv

后面再决定失败的图是重试、手动找 archive,还是保留远程地址。

redirects 一定要人看

迁移 WordPress 最容易伤 SEO 的地方,就是旧链接。

AI 可以根据旧 URL 和新 URL 生成 redirects.csv,甚至生成 Astro config:

export default defineConfig({
  redirects: {
    '/2019/hello-world/': '/2019/01/01/hello-world/',
  },
});

但这张表一定要人看。尤其是旧 WordPress 如果改过 permalink、分类前缀、中文 slug、.html 后缀,就会有很多边角情况。

我会抽查这些:

  • 搜索流量高的文章。
  • 被外站引用的文章。
  • 分类页和标签页。
  • RSS 里出现过的老链接。
  • 带中文路径的链接。

迁移不是为了得到一张漂亮的新路由表,是为了旧读者还能进来。

最后让 AI 做一次审稿,但别让它决定发布

文章和页面生成后,可以让 AI 做一轮“迁移审稿”:

请检查这个 Astro 迁移结果,重点看:
1. 是否有旧 WordPress 域名残留。
2. canonical 是否和 permalink 一致。
3. 图片是否仍指向 wp-content/uploads。
4. 是否有 WordPress block 注释残留。
5. 是否有明显的短代码没有处理。

只报告问题,不要直接改文件。

“只报告问题”这句挺重要。迁移后期最怕工具自动替换一大片,然后你不知道它到底动了什么。

我的态度

AI 时代迁 WordPress 到 Astro,确实轻松了不少。以前要花一天写的解析脚本,现在可能半小时能跑起来。

但站点迁移不是单纯的代码题。它还有历史链接、搜索权重、读者习惯、旧图片、评论和很多乱七八糟的边角。AI 可以帮忙搬箱子,不能替你决定哪些箱子要留。

我会用它,但会让它每一步都留下清单和日志。迁移这种事,能复盘比跑得快更重要。

参考: