报错是这么冒出来的。站点早已全站 https,sitemap 生成器读的却是数据库里遗留的 http 选项,提交的地址全部 301 到 https,索引报告里同一批页面出现两份,规范版本一直选不定。

中间走过弯路,把「页面里的 canonical 写的是 https,和 sitemap 的 http 地址互相矛盾」当成主因,改完现象没变。

排查方向其实有限,先把可能性排一排。生成器读取的是 home 字段,该字段迁移后没有更新。少数情况下是插件缓存了上一次生成的 sitemap,没有跟随协议变化重建。

不容易想到的是,CDN 对 http 请求返回 301,蜘蛛把它当成两条独立地址。

上来先抽查 sitemap 条目的协议

curl -s https://www.example.com/sitemap.xml | findstr /c:"http://" | measure -Line

然后核对站点配置里的 home 与 siteurl

SELECT option_name, option_value FROM wp_options WHERE option_name IN ('home','siteurl');

接着清掉插件缓存重新生成

curl -s -X PURGE https://www.example.com/sitemap.xml

等前面都确认过,再确认条目与 canonical 一致

curl -s https://www.example.com/post-1024/ | findstr /i canonical

别只看报错消失,验证要多做一步。sitemap 全部输出 https 后,重复条目在两周内合并,规范版本稳定到 https 地址。

补一句。sitemap 和 canonical 必须指向同一个地址,协议不一致时蜘蛛会自己挑一个,结果往往不是你想要的那个。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189