网站收录

canonical 指了 A,索引里却出现 B:索引代表页选错时怎么排查

canonical 是提示而非命令。当规范页和索引中实际出现的 URL 不一致时,先确认标签有没有被读到,再看内链、sitemap 与 canonical 是否指向同一地址。本文按参数、协议、分页、移动版几个常见场景给出排查顺序,并说明改动后该怎么观察结果。

网站收录

canonical 指了 A,索引里却出现 B:索引代表页选错时怎么排查

canonical 是给搜索引擎的提示,不是强制指令。你指定了 A 作为规范页,索引里却出现 B,这在带参数、多域名或历史遗留较多的站上很常见。与其纠结“为什么不听我的”,不如先确认这条提示有没有被读到,再判断它为什么更倾向另一个 URL。

第一步:确认 canonical 是否真的被读到

  • 位置与生成方式:标签是否在 head 里;如果是脚本动态插入,抓取时可能还没生成,需要看渲染后的 HTML。
  • 指向是否有效:href 是否为绝对地址,是否指向一个 301、404 或需要登录才能访问的页面。
  • 规范页本身的状态:如果 A 被 robots.txt 挡住,或 A 自己带了 noindex,这条 canonical 基本不会生效。
  • 是否出现多个:同一页写了两条互相冲突的 canonical,等于把判断权交回给爬虫。

第二步:看索引选代表页时还参考了什么

canonical 只是信号之一。内链指向、sitemap 里的出现情况、多个 URL 的内容相似度、URL 结构是否稳定、哪个地址更早被收录,都会影响最终结果。常见的一种情况是:canonical 指向 A,但全站内链和 sitemap 都指向 B,最后索引里留下的是 B。

第三步:按场景对号入座

带参数与被清理后的地址

筛选、排序、追踪参数会生成大量近似 URL。如果站内链接里参数顺序不统一,或者不同页面模块用了不同的参数写法,索引很容易选到一个你没预期的版本。做法是让内链统一指向无参数或参数固定的版本,其余入口用 301 收拢,而不是只在页面里写一条 canonical。

协议、子域与大小写

http 与 https、带 www 与不带 www、路径大小写不同,都可能被当作不同 URL。这类问题的重点不是补 canonical,而是从服务器层面把非规范版本 301 到规范版本,并检查 sitemap 和站内链接是否还有旧写法残留。

分页与聚合页

列表分页、标签聚合页、搜索结果页之间内容高度重叠时,索引可能选聚合页,也可能选其中某一页。先明确这类页面的取舍意向:需要留的就给它稳定的入口和唯一标题,不需要留的就挡在索引之外,避免留下模糊地带。

移动版与独立域名

PC 与移动端分属不同域名时,两边的 canonical 和互指关系要成对检查。只在一侧写规范,另一侧没有对应提示,容易让索引在两套地址间摇摆。

第四步:改动后的处理顺序

  1. 先统一站内信号:内链、sitemap、canonical 尽量指向同一个 URL。
  2. 再处理入口:不该被访问的重复地址用 301,而不是只靠页面内的提示。
  3. 确认规范页本身返回 200、可抓取、可索引。
  4. 记录改动时间,等一次完整的重新抓取后再核对索引中的实际 URL。
当内链、sitemap 和 canonical 各指一个方向时,爬虫只能自行判断,结果通常不会刚好等于你的预期。

别急着反复改

代表页的选择需要重新抓取和重新评估,短期内反复调整只会让信号更乱。比较稳的做法是:先记录当前索引里的实际 URL 和页面状态,改一次,给它一个抓取周期,再对照结果决定下一步。