很多站点的收录问题,并不是某一条规则写错了,而是几条规则同时存在、方向却不一样。canonical 指向 A 页,meta robots 写着 noindex,sitemap 里还把这个 URL 列着,内链也照样指向它——四个信号,四个方向。搜索引擎最终怎么处理,取决于它自己的优先级判断,而站点这边往往连冲突存在都不清楚。
信号冲突大多是叠加出来的,不是技术故障
站点上线初期通常只有一两条规则,后来为了处理某个具体问题,又加了一条;再后来改版、换模板、上多语言,又加了一条。每加一次都是在已有状态上做加法,没人回头检查新旧规则是否互相矛盾。冲突就这样攒下来了。
所以排查的第一步不是找 bug,而是把同一个 URL 上生效的所有信号列出来,看它们是否在回答同一个问题。
常见的几组冲突
- noindex 与 canonical 同页:页面本身都不打算进索引,再指定规范版本意义有限;两个信号叠加后,实际表现往往和预期不一致。
- robots.txt 屏蔽与 noindex 同页:页面抓不到,里面的 noindex 自然也读不到,结果可能是 URL 长期留在索引里且内容陈旧。
- sitemap 里列着 noindex 页面:sitemap 是发现入口,不是收录承诺,但持续推荐一批注定不进索引的 URL,会消耗抓取资源。
- 301 与 canonical 指向不同目标:一个说“这条地址作废”,一个说“参考那条”,指向不同就会出现交接模糊。
- 内链指向被 noindex 的页面:站内权重还在往一个不打算收录的地址上导,容易让搜索引擎反复回访。
排查顺序:从能不能抓,到要不要收
建议按下面四层依次确认,前一层没弄清,后一层的判断都不可靠。
- 抓取层:robots.txt 是否放行,返回状态码是什么,服务器是否把完整 HTML 返回给爬虫。
- 页面层:HTTP 响应头里的 X-Robots-Tag、HTML 里的 meta robots、rel=canonical,三者写在哪个位置、说了什么。
- 发现层:sitemap、站内链接、外部链接分别从这个 URL 出发指向哪里。
- 内容层:这条 URL 的内容是否与其他 URL 高度重复,是否存在参数、排序、追踪等衍生版本。
页面级信号的先后
响应头里的 X-Robots-Tag 与 HTML 里的 meta 通常由不同的模板或服务端逻辑控制,两者冲突时,实际效果以更严格的一方为准;具体行为建议以搜索引擎官方文档为准,并用 URL 检查工具实测确认,而不是凭经验推断。
canonical 的定位也需要说清:它是提示,不是指令,搜索引擎可以采纳,也可以忽略。它回答的是“多条相似 URL 里哪一条更该作为代表”,并不回答“这条 URL 要不要进索引”。把它当成收录开关来用,是很多冲突的源头。
站点级信号:sitemap 和内链
sitemap 的职责是帮助发现,不保证收录。常见的情况是:某个栏目早先全量生成了 sitemap,后来又对这个栏目批量加了 noindex,两边没有同步,于是 sitemap 一直在推荐一批不该进索引的 URL。内链同理,栏目页、标签页、相关推荐模块如果写死了链接,规则变化后不会自动跟。
一句话原则:noindex 决定收不收,canonical 决定用哪一条,sitemap 和内链决定找不找得到。三者不在同一层,冲突时先分清楚对方在回答哪个问题。
收口时可以按这几步走
- 建一张 URL 清单,至少包含状态码、robots 指令、canonical 目标、是否在 sitemap、站内入链数量。
- 发现冲突时,先按更严格的一方统一,确认稳定后再逐条放宽,别一次性改动全部规则。
- 规则调整按批次进行,改完观察一段时间,确认抓取与索引状态没有异常再推进下一批。
- 检查时看搜索引擎抓取到的版本,而不是浏览器里渲染后的版本,两者经常不是同一份内容。
收录信号冲突很少有单一原因,多半是规则一层层叠加的结果。排查时先分层、再定优先级,比逐个试错要省时间,也更容易在下次改版时不重复踩同一个坑。