本文约 3,085 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:改版上线三天,流量掉了一半
站点改版是 404 的最大来源:换了固定链接结构、合并了分类、删了几个不再维护的落地页、把 /blog/post-name 改成 /post-name。上线那一刻页面看着完美,但搜索引擎里存着几百条旧 URL,用户点进来全是 404。更糟的是,这些 404 不会立刻体现在排名上,而是两三个月后缓慢体现——旧页面的权重没有传递出去,新页面从零开始攒。
Rank Math 自带的重定向管理器(Redirections)就是处理这件事的。它是免费版功能,和 404 监控(404 Monitor)配合使用:404 监控负责发现哪些 URL 有人访问但不存在,重定向管理器负责把这些 URL 指向正确的新地址。但很多站长装完找不到这两个菜单,因为它们默认不在主菜单里,需要在模块里手动开启。
原理分析:重定向的三种匹配方式与状态码
先理清 Rank Math 支持的匹配逻辑:
| 类型 | 说明 | 适用场景 |
|---|---|---|
| Exact Match(精确匹配) | 完整 URL 完全一致才命中 | 单条 URL 迁移,最安全 |
| Contains(包含) | 请求 URL 包含指定片段即命中 | 批量处理带相同参数的旧链接 |
| Regex(正则) | 用正则表达式匹配,可用 $1 捕获组回填 |
固定链接结构整体变更,效率最高 |
状态码选择上只有两个常用:301(永久重定向) 用于改版、换域名、内容永久搬家,搜索引擎会把权重传递给新地址;302(临时) 用于 A/B 测试、短期活动页。除此之外的 307、410 等在特定场景下有用,比如 410 表示”已永久删除且不打算恢复”,比 404 更明确地告诉搜索引擎放弃这个 URL。
执行链路要清楚:Rank Math 的重定向发生在 template_redirect 之前。命中规则时直接 wp_redirect() 并 exit,不走模板渲染,所以开销很小。规则存放在数据表 wp_rank_math_redirections 里,另有缓存表加速匹配。规则条数上万时,建议优先用正则而不是一条条加。
保姆级实操
第一步:开启模块
进入 Rank Math → Dashboard,找到 404 Monitor 和 Redirections 两个模块,把开关打开。开启后左侧菜单才会出现对应入口。
第二步:配置 404 监控的日志策略
进入 Rank Math → 404 Monitor,右上角设置里:
- Log 404 Errors:开启;
- Log Limit / 保留条数:建议设 200–500 条,别让它无限增长;
- 忽略的扩展名:把
.css、.js、.png、.ico、.woff2加进忽略列表,否则静态资源缺失会刷满日志。
# 看看 404 日志表有多大,避免后台变慢
wp db query "SELECT COUNT(*) FROM wp_rank_math_404_logs;" 2>/dev/null || \
wp db query "SHOW TABLES LIKE '%rank_math%';"
第三步:从 404 日志一键生成重定向
在 404 Monitor 列表里,每条记录右侧有 Add Redirect 按钮。点击后会自动带出来源 URL,你只需填目标地址、选 301,保存即可。先按访问次数排序,把 hits 最高的前 20 条处理掉,覆盖 80% 的损失。
第四步:批量导入(改版必备)
准备一个 CSV,三列:source URL、destination URL、redirect type。
"/blog/hello-world","/hello-world","301"
"/blog/2020/01/old-post","/new-post","301"
"/category/news/","/news/","301"
然后在 Rank Math → Redirections → Import 上传这个文件。导入前先小批量试 5 条,验证格式无误再全量导入。
第五步:用正则处理结构性变更
比如把 /blog/{slug} 整体迁移到 /{slug}:
规则类型:Regex
来源 URL:^/blog/(.*)$
目标 URL:/$1
状态码:301
再比如把带 ?utm_source=xxx 的旧参数页统一指向干净 URL:
规则类型:Regex
来源 URL:^/product/(.*)\?utm_source=(.*)$
目标 URL:/product/$1
状态码:301
第六步:验证重定向是否真的生效
for u in /blog/hello-world /category/news/ /old-page; do
echo "== $u"
curl -sI "https://mimangfei.com$u" | grep -Ei '^(HTTP/|location:)'
done
期望看到 HTTP/2 301 加一条 location: 指向新地址。如果返回 404,说明规则没命中(多半是正则写错或来源 URL 带了前导斜杠不一致)。
常见踩坑
- 模块没开就找菜单。404 Monitor 和 Redirections 都要在 Dashboard 里手动开启。
- 正则忘了转义点号。
.在正则里匹配任意字符,URL 里的点要写\.;问号要写\?。 - 规则顺序问题。Rank Math 从上到下匹配,宽泛的正则要放在精确规则后面,否则会抢先命中。
- 目标 URL 写成相对路径。建议写完整的站点内绝对路径(
/new-page),不要写https://开头的完整域名,换域名时会失效。 - 案例:某站改版时用正则
^/blog/(.*)$→/$1,上线后首页打不开了。原因是/blog本身(不带尾斜杠)也被正则匹配,(.*)捕获为空,目标变成/,形成自循环重定向,浏览器报”重定向次数过多”。修复是把正则改成^/blog/(.+)$(加号要求至少一个字符),循环立刻消失。 - 404 日志刷满。机器人扫
.env、.git、WordPress 登录路径会产生海量记录,必须配忽略规则或限制条数。 - 缓存插件缓存了 404 响应。改完规则后必须清缓存,否则仍返回旧的 404。
- 重定向链太长。
A → B → C的链式重定向会稀释权重且拖慢速度,应直接A → C。
总结
Rank Math 重定向管理器的正确用法是”先监控、再批量、最后用正则兜底“:开启 404 Monitor 收集真实失效 URL,按访问量从高到低处理前 20 条;改版场景下用 CSV 批量导入映射表;结构性 URL 变更用一条正则解决,但要先用两三个样例验证,确认不会形成自循环。每次改动之后,务必用 curl -I 复查状态码,别只看后台显示”已保存”。
如果你是老站点在换插件,可以先看 Yoast SEO 迁移到 Rank Math 的注意事项 保住原有规则;想了解别的重定向方案,Redirection 插件做 301 与 404 监控 也值得对比。
