记录一下那天晚上的排查过程。文章从 http 迁到 https 后,页面里的 canonical 仍写着 http 地址,蜘蛛每次按 canonical 去抓都会收到 301 跳回当前页,索引里长期显示重复网页未选定规范页。

刚开始盯着「CDN 的回源改写让判断协议的那段代码读到 http」,折腾了半个多小时,排掉了。

真正麻烦的地方在于,几个原因的现象几乎一样。模板里的 canonical 由固定域名拼接,没有跟随协议切换。另一种情况是数据库里存的是迁移前的绝对地址,输出时没做替换。

少数情况下是部分老文章的正文里还留着 http 的内链。

先抽查页面里的 canonical 值

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

接着确认该地址是否发生跳转

curl -sI http://www.example.com/a/1.html | grep -Ei 'HTTP/|location'

然后统一改成当前协议加当前域名

add_filter('get_canonical_url', fn($u) => set_url_scheme($u, 'https'));

批量替换数据库里的旧协议

UPDATE wp_posts SET post_content = REPLACE(post_content,'http://www.example.com','https://www.example.com');

改完先别撤,确认这几项。所有页面的 canonical 与当前地址完全一致,重复网页报告里的条目两周内减少八成。

容易忽略的是,canonical 指向一个会跳转的地址,等于让引擎多走一步,这一步经常直接导致规范页无法确定。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189