先看现象。WordPress 的标签归档是 /tag/php,主题又注册了一条 /tags/php 的重写规则,两个地址都返回 200,页面内容一样。必应各收了一份,标签页收录数直接翻倍,权重也被拆成两份。

把日志和配置对完,能解释这个现象的基本就这几处。主题和插件各注册了一条标签重写规则 前缀不同。少数情况下是两个地址的 canonical 都指向自己 没有合并信号。

少数情况下是旧链接和站内推荐混用两套前缀。

不容易想到的是,sitemap 里两套地址都列了出来。

动手时先分别请求两个前缀看状态码

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

接着加一条 301 把多余前缀并过去

rewrite ^/tags/(.*)$ /tag/$1 permanent;

然后清理 sitemap 里的重复前缀

grep -c '/tags/' sitemap.xml

等前面都确认过,再替换正文里的旧前缀链接

UPDATE wp_posts SET post_content = REPLACE(post_content,'/tags/','/tag/');

恢复的判定其实很直接。访问 /tags/php 返回 301 且落到 /tag/php,索引里同标签只剩一条地址。

提醒一点。重写规则冲突不会报错,两个前缀都能打开时只能靠日志和 sitemap 才发现。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189