搜索抓取

canonical 指向的地址,蜘蛛真的会照着走吗

canonical 常被当成指路牌,但它只影响收录归属,不改变蜘蛛的抓取路径。本文解释为什么内链、Sitemap 与 canonical 不一致时,蜘蛛仍会走另一个地址,并列出几项可以直接自查的要点。

搜索抓取

canonical 指向的地址,蜘蛛真的会照着走吗

很多站点把 rel=canonical 当成一块指路牌,以为在页面里写上目标地址,蜘蛛就会只抓那一个 URL。实际对照日志时经常是反过来的:canonical 写明了 A,蜘蛛却仍在 B 上频繁出现。

原因不复杂。canonical 是一个合并信号,用来告诉搜索引擎多个地址中哪个代表正文,它并不改变蜘蛛怎么走。蜘蛛走的是链接,你内链指到哪、Sitemap 列了哪、外链落在哪,它就往哪走。

canonical 是提示,不是转向指令

和 301 不同,canonical 不会让蜘蛛停止抓取当前 URL,也不会把抓取请求强制转到目标地址。蜘蛛仍然会抓当前的 B 页,读出 canonical 里的 A,再把 A 当作正文归属。也就是说:抓取路径由链接决定,收录归属才受 canonical 影响。

如果 B 是被大量内链指向的那个地址,抓取预算就会持续消耗在 B 上;A 反而可能因为缺少入口而长期不更新。

几种常见的指向不生效

内链指向的不是 canonical 地址

导航、列表、面包屑、相关推荐如果都写着带参数的版本,例如带 from=list 这类标记的地址,蜘蛛自然会把参数版当成主入口,canonical 里的干净地址反而成了缺乏链接的页面。合理的处理顺序是:先把内链统一到目标地址,再谈 canonical。

Sitemap 与 canonical 不一致

Sitemap 是蜘蛛发现 URL 的重要入口。如果 Sitemap 里躺着参数版、旧版、大小写不一致的地址,就等于在和 canonical 唱反调。较稳妥的做法是:Sitemap 只列 canonical 地址,并保证这些地址返回 200、能正常渲染。

canonical 指向了会跳转或报错的地址

canonical 的目标如果本身就是 301、302,或者返回 404、5xx,蜘蛛需要多走几步才能确认归属,有时干脆无法确认。服务器不稳定时,目标地址间歇性超时,合并信号会变得很模糊。canonical 指向的地址,最好是一个稳定、可直接访问、返回 200 的 URL。

分页页面的 canonical 全部指向第一页

把第 2、3 页的 canonical 统一指向列表第一页,是一种常见写法。它的后果是:蜘蛛从第 1 页沿分页链接走到第 5 页,每页却都告诉它正文在第一页。时间一长,深处详情页的发现路径会变窄。分页更适合自引用 canonical,让每页代表自己。

与 noindex、hreflang 互相打架

canonical 指向 A,同时页面又写 noindex,或者 hreflang 把 A 指回 B,几种信号会互相抵消。遇到冲突时,蜘蛛通常选择更保守的处理方式,结果是该抓稳的没抓稳,该合并的没合并。多语言站点尤其要注意:hreflang 指向的地址应当与 canonical 保持一致。

自查时可以先看这几项

  1. 站内链接是否都指向 canonical 地址,有没有残留的参数版入口。
  2. Sitemap 里的 URL 与 canonical 是否一一对应。
  3. canonical 目标是否返回 200,而不是靠重定向才能到达。
  4. 是否存在 canonical 链,A 指 B、B 又指 C,尽量一步到位。
  5. 页面里是否只出现一个 canonical 标签,脚本注入的版本是否与 HTML 中的冲突。
  6. 用服务器日志核对:蜘蛛实际高频抓取的地址,是不是你以为的那一个。
判断 canonical 有没有起作用,不要只看页面标签,要看日志里蜘蛛走的那条路。路没变,标签写得再对,效果也有限。

最后提醒一句:canonical 解决的是哪个地址代表内容,不是蜘蛛该走哪条路。想让蜘蛛沿你设计的方向走,靠的是内链、Sitemap 和稳定的服务器响应;这三者对齐之后,canonical 才更容易被采纳。