记录一下那天晚上的排查过程。文章分节页的 canonical 写成 /guide/#part-3,蜘蛛把整组页面都归到主地址,三个分节页一条都没进索引,页面本身是独立地址。

刚开始盯着「生成逻辑复用了目录页的链接」,折腾了半个多小时,排掉了。

原因不止一个,得分开看。片段标识不参与请求,带锚点的地址等于主地址。还有一种是分节页本来有独立 URL,模板却取了锚点地址。

少数情况下是没有做 canonical 与当前地址的一致性校验。

先看每条 canonical 的完整地址

curl -s https://www.example.com/guide/part-3/ | Select-String canonical

随后改成不带片段的自身地址

echo '<link rel="canonical" href="https://www.example.com/guide/part-3/">';

然后确认三个分节页各自指向自己

for p in 1 2 3; do curl -s https://www.example.com/guide/part-$p/ | Select-String canonical; done

提交分节页地址

curl -s "https://www.google.com/ping?sitemap=https://www.example.com/sitemap.xml"

这台环境是别人交接的,不少默认值被动过,只能一项项核。

改完先别撤,确认这几项。三个分节页的 canonical 各指自己,四周内陆续进入索引,主地址的排名不受影响。

这里还有个坑。canonical 带锚点是常见的复制错误,写之前先确认当前页面的真实地址。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189