这类问题我又碰上了一次。专题改版把 /tag/nginx/ 整体 301 到 /topic/nginx/,三个月后新页排名仍在第 15 位,旧页的入链一条没转过来。

第一反应是「新页内容比旧页少,被判定为不等价替换」,验证下来不成立。

把日志和配置对完,能解释这个现象的基本就这几处。301 链条中间还有一跳 302,权重传递打折;旧页仍有大量内链指向,没有批量替换成新地址;旧页的 canonical 仍指向自己,与新地址冲突。

上来先检查跳转链是否只有一跳

curl -sIL 'https://www.example.com/tag/nginx/' | grep -i '^HTTP\|^location'

然后把站内指向旧页的链接批量替换

UPDATE wp_posts SET post_content=REPLACE(post_content,'/tag/nginx/','/topic/nginx/') WHERE post_content LIKE '%/tag/nginx/%';

补齐新页的内容量

SELECT ID,LENGTH(post_content) FROM wp_posts WHERE ID IN (1111,2222);

剩下的就是确认旧页不再输出 canonical

curl -s https://www.example.com/tag/nginx/ | grep -c canonical

排查用的命令都是临时敲的,没有写成脚本,事后才整理。

改完先别撤,确认这几项。旧页只有一跳 301 到新页,站内旧地址的内链数归零,新页在六周内回到旧页原来的排名区间。

301 只是告诉搜索引擎换地址,站内链接不跟着改,权重会长期留在旧地址上。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189