问题出现得很突然,日志倒是留得挺全。在 SEO 插件里设置了 canonical,前台页面输出的却是另一条地址,插件后台显示配置正常。

这类报错背后常见的原因有几处,逐个排除就行。主题里硬编码了 canonical 标签。另一种情况是两个插件同时输出,后加载的覆盖前面的。

不容易想到的是,子主题覆盖了父主题的 head 模板。

第一件事是查看页面源码里 canonical 出现几次

curl -s https://www.example.com/a/ | grep -c 'rel="canonical"'

再往下找出主题里硬编码的位置

grep -rn 'rel="canonical"' /www/wwwroot/site/wp-content/themes/

移除主题输出,只保留插件

remove_action('wp_head', 'theme_canonical');

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

怎么算真的好了,看的是同一批现象。页面里只剩一个 canonical,内容与插件设置一致,报告里的规范网址稳定,不再出现两条信号打架。

补一句。两个 canonical 同时存在时蜘蛛通常取第一个,主题里那份在前,插件设置就永远不生效,改完务必用源码确认只剩一条。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189