记录一下那天晚上的排查过程。同一篇文章同时挂在 /news/1024 和 /blog/1024,两边 canonical 各自指向自己,索引里两条地址轮流出现,点击数据被拆成两半。

刚开始盯着「站内导航两套入口都在用,内链各指一边」,折腾了半个多小时,排掉了。

这类报错背后常见的原因有几处,逐个排除就行。发布时复制了一份内容,两套模板各自输出 canonical。还有一种是canonical 由模板自动生成,没有配置主路径。

还有一种情况,旧路径没做 301,蜘蛛两边都能抓到。

动手时先确认两条地址的 canonical

curl -s https://www.example.com/news/1024 | grep -o '<link rel="canonical"[^>]*>'

再往下把次要路径跳转到主路径

rewrite ^/blog/(\d+)$ /news/$1 permanent;

正文内链统一到主路径

UPDATE wp_posts SET post_content = REPLACE(post_content, '/blog/', '/news/');

主路径 canonical 指向自己

<link rel="canonical" href="https://www.example.com/news/1024">

别只看报错消失,验证要多做一步。三周后索引里只剩主路径,副路径的收录条目消失,点击数据合并到一条。

补一句。canonical 互指等于告诉搜索引擎两个页面都别选,最稳妥的还是把重复那条 301 掉。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189