本文约 3,646 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:迁移只花十分钟,补救花了一个月
SEO 插件迁移看起来很简单:装新插件,点”导入”,删旧插件。真正做过的人知道,麻烦全在后面——导入工具只搬一部分字段,剩下那些(焦点关键词之外的 noindex 标记、重定向规则、Schema 自定义字段、面包屑调用)要么静默丢失,要么以另一种形式残留在数据库里。
更要命的是时间差:迁移当天你看不出任何问题,因为前台页面照常显示。等两三周后搜索引擎重新抓取,才发现一批本来 noindex 的聚合页被放进了索引,一批老 URL 重定向失效变成 404。这时候旧插件已经删了,数据也清了,回滚成本极高。所以迁移必须按”先备份、再导入、后验证、留回滚”的顺序做。
原理分析:迁移到底搬的是什么
先搞清楚两款插件把数据存在哪:
| 数据 | Yoast 存储位置 | Rank Math 存储位置 |
|---|---|---|
| SEO 标题 | _yoast_wpseo_title (postmeta) |
rank_math_title (postmeta) |
| SEO 描述 | _yoast_wpseo_metadesc |
rank_math_description |
| 焦点关键词 | _yoast_wpseo_focuskw |
rank_math_focus_keyword |
| 索引控制 | _yoast_wpseo_is_cornerstone、meta-robots-noindex |
rank_math_robots |
| 重定向 | wp_yoast_seo_redirections(Yoast Premium 才建表) |
wp_rank_math_redirections |
| 全局设置 | wpseo、wpseo_titles 等 options |
rank-math-options-* |
Rank Math 自带的导入工具(Rank Math → Status & Tools → Import & Export)把 Yoast 归在可导入列表里,它会做 postmeta 的字段映射。但有三类东西它搬不了:
- Yoast Premium 的重定向规则(表结构和 Rank Math 不同,且免费版 Yoast 根本没有这张表);
- 主题里硬编码的 Yoast 函数调用(如
yoast_breadcrumb()); - Yoast 的新闻 SEO、视频 SEO、本地 SEO 等扩展数据。
另外,Yoast 的 wpseo_* 选项和 postmeta 在删除插件时默认不会清干净(Yoast 提供”删除数据时清除”的选项,但默认关闭),这些数据留在库里不影响显示,但会干扰后续排查。
保姆级实操
第一步:完整备份,且备份要可验证
cd /var/www/mimangfei.com
wp db export ~/backup/before-yoast-migration.sql
wp db size --tables
# 额外单独备份 Yoast 的 SEO 元数据,方便回滚时抽查
wp db query "SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE meta_key LIKE '_yoast_wpseo%'" > ~/backup/yoast_meta.csv
第二步:导出 Yoast 的重定向规则(如果有 Yoast Premium)
# 先看有没有这张表
wp db query "SHOW TABLES LIKE '%redirect%';"
# 有就导出成 CSV,后面手工转成 Rank Math 的导入格式
wp db query "SELECT origin, target, type, format FROM wp_yoast_seo_redirections" > ~/backup/yoast_redirects.csv
Rank Math 的重定向支持 CSV 导入(Rank Math → Redirections → Import),字段列为 source URL、destination URL、redirect type,把 Yoast 的 origin/target 映射到前两列、状态码统一转 301 即可。
第三步:安装 Rank Math 并执行导入
- 装 Rank Math 但先别删 Yoast;
- 进 Rank Math → Status & Tools → Import & Export,在导入区找到 Yoast,勾选需要导入的数据类型(Post Meta、Term Meta、Settings 全勾);
- 点 Import,等待完成提示。
第四步:抽查导入结果
# 统计 Rank Math 数据是否已写入
wp db query "SELECT COUNT(*) FROM wp_postmeta WHERE meta_key='rank_math_title';"
wp db query "SELECT COUNT(*) FROM wp_postmeta WHERE meta_key='_yoast_wpseo_title';"
# 随机抽一篇文章对比两边
wp post meta get 123 rank_math_title
wp post meta get 123 _yoast_wpseo_title
两个数量级应该接近(Yoast 侧可能更多,因为有些文章只写了 Yoast 的 noindex 没写标题)。
第五步:处理主题里的 Yoast 函数调用
# 在主题目录里搜 Yoast 的硬编码调用
grep -rn "yoast_breadcrumb\|YoastSEO\|wpseo_" wp-content/themes/ --include="*.php" | head -20
找到后替换为 Rank Math 的面包屑输出,或直接删除(Rank Math 面包屑可挂载到 wp_body_open)。
第六步:验证前台输出再下线 Yoast
curl -s https://mimangfei.com/ | grep -E '<title>|rel="canonical"|application/ld\+json' | head -10
# 确认只有一份 canonical、一份 JSON-LD
确认无误后,在 Yoast 的”常规设置 → 工具”里先停用前台输出,观察两三天,再卸载插件。
常见踩坑
- 没备份就导入。导入是写操作,映射错了无法撤回。
- 以为导入工具会搬重定向。Yoast Premium 的重定向表结构不同,必须手工导出再导入。
- 删了 Yoast 才发现问题。先停输出观察,再卸载。
wpseo_*残留数据被误清。有些数据库清理插件会把”无来源插件”的 postmeta 当垃圾删掉,迁移后一段时间内别跑激进的数据库清理。- 案例:一个做了四年的内容站迁移后,Google Search Console 里出现 800 多个”已提交但未索引”的新 URL。追查发现是 Yoast 里设为
noindex的 800 个标签页,迁移时meta-robots-noindex字段没有对应的 Rank Math 映射,全部变成了默认可索引。最后的补救是写一段脚本,从旧备份里读出noindex清单,批量写回rank_math_robots。 - 面包屑双份输出。主题里留着
yoast_breadcrumb(),Rank Math 又挂了一份,结构化数据校验报重复 BreadcrumbList。 - 导入后没清缓存。前台还是旧的 meta,误判导入失败。
- 多语言站只导了主语言。WPML/Polylang 下每篇译文也是独立 post,导入是按 post 走的,需要确认译文也都导了。
总结
Yoast 迁 Rank Math 的判断标准是三条:导入前后 rank_math_title 的数量与 _yoast_wpseo_title 基本对齐;前台 canonical 与 JSON-LD 各只有一份;旧的重定向规则已在 Rank Math 里逐一可查。满足这三条再卸载 Yoast。整个过程里,备份的价值远大于任何工具——那份 before-yoast-migration.sql 才是你唯一的安全网。
迁移完成后,建议立即配置 Rank Math 重定向管理器使用教程 来接管 404;插件本身该怎么配,可以看 Rank Math SEO 从安装到配置完整教程。
