先把当时的情况摆出来。站点用 WPML,把默认语言从中文改成英文后,原来 /en/post/ 的地址变成 /post/。两千多条被外链引用过的英文地址一周内全部 404,GSC 的 404 报告涨到 2100 条。

真正麻烦的地方在于,几个原因的现象几乎一样。默认语言不带前缀,切换后原有前缀被整体去掉,地址位移。还有一种是WPML 的 slug 翻译表没有迁移,旧别名一条都没保留。

另外,旧地址缺少 301 兜底,直接返回 404。少数情况下是sitemap 由插件重建,映射关系没有落盘。

第一件事是导出切换前后的地址对照表

python wpml_map.py --before old.csv --after new.csv

然后确认旧前缀地址的当前状态

curl -sI https://www.example.com/en/post-1 | head -1

接着用重写规则把旧前缀 301 到新地址

location ~ ^/en/(.*)$ { return 301 https://www.example.com/$1; }

复验 404 报告是否收敛

curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/post-1

怎么算真的好了,看的是同一批现象。旧地址全部 301 到新地址,404 从 2100 降到 60 条,英文页索引两周后回到切换前的水平。

容易忽略的是,换默认语言等于换 URL 结构,先把映射表导出来再做 301,插件不会自动替你记住旧路径。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189