网站收录

canonical 指向了别的 URL:声明失效的几种情况和排查顺序

canonical 是一条建议,不是重定向也不是 noindex。它指向的页面若被屏蔽、返回错误,或自身又指向别处,声明就可能被忽略。本文梳理常见的写错场景,给出从抓取源码到内链、站点地图保持一致的排查顺序,并说明哪些页面不适合用 canonical 合并。

网站收录

canonical 指向了别的 URL:声明失效的几种情况和排查顺序

canonical 是页面自己声明“哪个 URL 才是我希望被收录的版本”。它是一条建议,不是命令。很多站点把 canonical 当成重定向来用,结果就出现“声明指向 A,索引里却是 B”的情况。下面按声明、自选、冲突三个层面,把常见情形和排查方法理一遍。

canonical 能做什么,不能做什么

  • 能表达偏好:告诉搜索引擎多个相似 URL 里你更希望哪一个被索引。
  • 不是重定向:用户和爬虫仍然会访问原 URL,你只是希望索引归到另一个地址。
  • 不是 noindex:它不阻止抓取,也不保证某个 URL 从索引里消失。
  • 不等于必然生效:搜索引擎会结合内链、站点地图、内容相似度自己判断,与声明冲突时可能直接忽略。

最容易写错的几处

指向一个本身不能被收录的地址

例如 canonical 指向的页面被 noindex、返回 404 或 410,或者被 robots.txt 挡住。这种情况下声明基本无法执行,搜索引擎会自己挑一个版本。

目标页自己也 canonical 到别处

A 指向 B,B 又指向 C,或者 B 指回 A 形成环。链条越长越绕,越容易被判定为不可信。

分页、筛选、排序参数互相指

列表页第 2、3 页都 canonical 到第 1 页,可能连带把后续页上独有的内容一起忽略。带筛选参数的页面如果不是同一批内容,硬指到无参数版本,往往是白指。

模板复制后忘了改

批量生成页面时,canonical 里写死了某个固定 URL,或者相对路径拼接出错,最后全站都指向首页。抓几个 URL 的源码就能发现这类问题。

冲突时怎么排查

  1. 抓取原页面的 HTML,先看服务端返回的内容,确认 canonical 的实际值,注意协议、域名、结尾斜杠是否与你以为的一致。
  2. 访问目标 URL,确认它返回 200,没有被 robots.txt 挡住,也没有 noindex。
  3. 看目标页自己的 canonical 指向哪,避免出现环或断点。
  4. 在索引数据或搜索结果中,看实际被选中的是哪一个版本。
  5. 把内链、站点地图、canonical 三处统一指向同一个首选 URL,信号一致比单点声明更有用。

什么时候不该用 canonical

如果两个页面的主体内容确实不同,比如不同商品、不同城市的服务页,硬把它们指到同一个 URL,不会帮你集中权重,反而可能让其中一个长期进不了索引。canonical 适合处理同一份内容的不同 URL 版本,不适合用来合并内容不同的页面。

改完之后怎么观察

调整不会立刻反映在索引里,通常要等下一轮抓取。可以观察抓取日志里首选 URL 的访问是否增加、原 URL 的出现是否减少,以及索引中保留的版本是否与预期一致。如果几周后还是相反,优先回头检查上面那几处冲突,而不是反复修改声明。

把 canonical 当成一种一致的表达,而不是开关。它起作用的前提是,你的内链、站点地图和其他信号说的是同一件事。