这类问题我又碰上了一次。主题在 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 等于没写,排查时先数标签数量再看指向哪里。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
