这类问题我又碰上了一次。主题在 head 输出一条 canonical,SEO 插件又输出一条,两条指向不同地址,索引里的规范网址每天在这两个地址之间来回跳。

第一反应是「两条标签顺序不同,蜘蛛按先出现的那条计算」,验证下来不成立。

这类报错背后常见的原因有几处,逐个排除就行。主题和插件各自输出 canonical,没有做去重;插件只在 singular 页面接管,列表页仍由主题输出;缓存把两个版本的 HTML 混在了同一个页面。

数页面里有几条 canonical

curl -s https://www.example.com/post-1/ | Select-String "rel=\"canonical\""

接着停掉主题里的输出

remove_action('wp_head', 'rel_canonical');

然后确认只剩插件那一条

curl -s https://www.example.com/post-1/ | Select-String canonical | Measure-Object -Line

等前面都确认过,再清缓存后重新提交

curl -X PURGE https://www.example.com/post-1/

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

怎么算真的好了,看的是同一批现象。页面里只有一条 canonical,指向的地址与实际访问地址一致,索引里的规范网址稳定下来。

两条 canonical 等于没写,排查时先数标签数量再看指向哪里。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189