站点运营

站点运营:robots.txt 与 noindex 自查,别让一行规则挡住整站抓取

robots.txt 决定能不能抓,noindex 决定要不要留,两者层级不同却经常被写混。本文梳理常见误伤场景:通配符写得过宽、规则顺序被误解、测试环境配置串到线上、noindex 因抓取受阻而失效,并给出一份可以直接照着做的自查清单和改动后的验证方法。

站点运营

站点运营:robots.txt 与 noindex 自查,别让一行规则挡住整站抓取

robots.txt 和 noindex 是站点上最容易改错、也最容易长期没人复查的两个开关。它们平时不出声,出问题时也不报错,只是抓取量慢慢变少、地址清单慢慢变杂。这篇文章只讲一件事:怎么确认这两个开关现在的状态,就是你想要的状态。

先分清两个开关的分工

robots.txt 决定“能不能来抓”,noindex 决定“抓到了要不要留下”。两者层级不同,生效时机也不同。

  • robots.txt:放在根目录,按 UA 与路径匹配,控制的是抓取行为。它并不阻止页面被索引,只要别处有链接指向,地址仍有可能出现在结果里。
  • noindex:可以写成页面的 meta 标签,也可以放在响应头的 X-Robots-Tag 里,控制的是索引行为。前提是抓取工具必须真的抓到这一页,才能读到这条指令。

由此可以推出一个常见的自相矛盾:既在 robots.txt 里 Disallow 了某个目录,又想用 noindex 把目录里的页面清出索引。因为抓不到,noindex 永远不会被读到,结果往往和预期相反。

robots.txt 最容易出问题的几处

通配符和路径写得过宽

一条以斜杠开头的规则,如果结尾没有做锚定,往往会连带匹配到一堆无关路径。比如本意是屏蔽搜索参数,却把正常栏目一起罩了进去,抓取量下降常常就是从这里开始的。

把规则顺序当成唯一依据

多数主流抓取工具按最长匹配生效,而不是简单地“先写先赢”。同一份文件里既有 Disallow 又有 Allow 时,路径最具体的那条通常优先。写规则时如果只按顺序推断,很容易得出错误结论。

分环境时直接复制粘贴

测试环境为了省事写了全站 Disallow,上线时整份文件被原样带到生产环境。这类问题往往要等几天后翻日志才看得出来。

顺手加了 Crawl-delay

这不是标准字段,各家处理方式并不一致。对本来就抓得不多的站点,人为加延迟只会让新地址被发现得更慢。

noindex 不生效的三种情况

  1. 页面被 robots.txt 挡住,标签根本没机会被读到。
  2. 标签写在模板里,但页面靠前端异步渲染,抓取时拿到的是空壳。这种情况应改用响应头方式下发。
  3. 同一页面出现互相冲突的值,例如同时有 noindex 和 index。处理方式取决于抓取工具,最好只保留一个明确值。

另外要留意:noindex 与 nofollow 是两件事。前者管索引,后者管链接跟踪,写错一个词,效果完全不同。

一份可执行的自查清单

  1. 直接访问根目录下的 robots.txt,确认返回 200 且内容与预期一致,不是缓存里的旧版本。
  2. 逐条核对 Disallow 路径,重点看有没有误伤栏目页、详情页和 sitemap 所在目录。
  3. 确认 sitemap 地址在文件中有明确声明,并且该地址可以正常访问。
  4. 抽查几个标记了 noindex 的页面:它们是否仍可被抓取,标签是出现在 HTML 里还是响应头里。
  5. 检查测试环境与生产环境的配置文件是否已经分开,避免互相污染。
  6. 用抓取日志抽样验证:被挡住的目录还有没有来访记录,被放开的目录抓取是否正常。
如果一份规则你自己都说不清它到底匹配了哪些路径,那它大概率不止匹配了你想匹配的那些。

改完之后怎么验证

规则调整不会立刻反映在数据里,通常需要几天时间观察。建议改动前后各留一份日志样本,对比目标目录的来访次数与状态码分布。如果发现某类地址的来访量骤降到接近零,先回头确认是不是新增的规则把它们一起挡了。

robots.txt 和 noindex 都属于低维护成本、高误伤概率的设置。把它们放进固定的站点巡检清单,比出问题之后再回头排查要省事得多。