搜索抓取

noindex、canonical 与 Sitemap 打架时,蜘蛛会听谁的

同一批 URL 上,meta robots 写了 noindex,canonical 指向另一个地址,Sitemap 里还照旧登记着——三个信号各说各话。本文梳理这三种配置各自的作用范围、常见冲突组合下的实际表现,并给出一套可以照着做的排查顺序,帮站点把抓取和索引收敛到规范地址上。

搜索抓取

noindex、canonical 与 Sitemap 打架时,蜘蛛会听谁的

站点的技术配置常常互相矛盾:页面 meta robots 写了 noindex,链接上的 canonical 指向另一个地址,Sitemap 里还把这个 URL 列得好好的。三个信号都说自己代表站点意图,蜘蛛只能按优先级做取舍。理解这套优先级,比反复改配置更能省事。

三个信号各自管什么

  • robots meta / X-Robots-Tag:页面级指令,管的是这个 URL 要不要进索引。它不阻止抓取,蜘蛛必须先把页面抓下来,才能读到这条指令。
  • canonical:去重信号,表达“这段内容的首选地址是哪个”。它既不阻止抓取,也不保证被采纳,只是给蜘蛛一个参考。
  • Sitemap:URL 发现渠道,告诉蜘蛛这里有页面、大致什么时候更新过。它是建议,不是命令。

冲突时通常怎么走

  • noindex 与 canonical 同页:noindex 更硬,canonical 基本被忽略。但前提是蜘蛛能读到 noindex,所以这个 URL 仍会被抓取。
  • noindex 加 robots.txt 屏蔽:蜘蛛读不到 noindex,URL 可能仍被外部链接发现,以无描述的形式出现在结果里。这两个不要叠加使用。
  • canonical 指向 A,Sitemap 登记 B:抓取会分散到两个地址,收敛周期被拉长,日志里两条路径都会反复出现。
  • Sitemap 里放了 noindex 页面:自相矛盾的配置,既浪费抓取,也会让整份 Sitemap 的可信度打折。

一套可以照着走的排查顺序

  1. 先确认哪些 URL 真的需要被索引。筛选页、排序参数页、登录后页面通常不在其中。
  2. 决定这些 URL 是用 noindex 处理,还是用 robots.txt 屏蔽。二选一,别叠加。
  3. 检查 Sitemap 是否只保留需要收录的规范地址,剔掉 noindex 页面和已经 301 的旧地址。
  4. 检查内链指向的地址与 canonical 是否一致。内链指向 A、canonical 写 B,是非常常见的自相矛盾。
  5. 观察一段时间的日志:抓取是否集中到规范地址,被 noindex 的 URL 是否还在被大量访问。

几个容易忽略的细节

noindex 得先被读到

如果 noindex 是靠脚本注入到 head 里的,蜘蛛不一定能执行到那一刻。用服务端直接输出,或者用 X-Robots-Tag 响应头,稳定性更高。

canonical 不是省抓取的工具

把一批参数页 canonical 到主页面,蜘蛛依然会抓取这些参数页,只是把权重归拢到主页面。想真的减少抓取,得靠 robots.txt 或 noindex。

Sitemap 的规模要真实

把大量重复或低质 URL 塞进 Sitemap,会让蜘蛛对整份文件的分发节奏变慢,真正需要收录的新页面反而排在后面。

跳转入口要尽量短

用外部跳转页做入口时,注意跳转方式。302 叠加脚本跳转的链路越长,蜘蛛走到目标页的概率越低,入口尽量直连目标 URL。

配置之间的一致性更重要

单项配置写得对,不代表整套配置能配合。定期把 robots.txt、meta robots、canonical、Sitemap 和内链放在一起对一遍,能省下很多说不清楚的抓取异常。

抓取异常往往不是某一条规则写错了,而是几条规则各自为政。先让它们口径一致,再谈优化。