网站收录

被 robots 挡住的 URL 为什么还在索引里:Disallow 与 noindex 的边界

不少站点把 robots.txt 的 Disallow 当成“不收录开关”,后来发现被挡的 URL 仍出现在结果里。问题出在把抓取和索引当成了同一件事。本文说明 Disallow 只作用于抓取、noindex 必须能被抓到才生效,并给出下架单个页面的操作顺序和日常排查清单。

网站收录

被 robots 挡住的 URL 为什么还在索引里:Disallow 与 noindex 的边界

在日志或站长工具里看到某个目录已经被 robots.txt 的 Disallow 挡住,很多人的第一反应是“这部分内容不会再出现在搜索结果里”。过一段时间去搜,发现其中几条确实还在。于是开始怀疑 robots 规则没生效。问题通常不在生效与否,而在于把“禁止抓取”和“禁止索引”当成了同一件事。

抓取和索引是两个独立环节

搜索引擎处理一个 URL 大致分两步:先抓取页面内容,再根据内容判断是否放进索引。robots.txt 的 Disallow 作用在第一步,它告诉爬虫不要来取这个 URL 的响应体。但索引的素材来源并不只有抓取这一条路。

当外部站点链接到这个 URL 时,链接本身的地址、锚文本、周边上下文都会进入搜索引擎的视野。即使爬虫从来没取到页面内容,它也可能凭这些信息生成一条结果:标题可能是 URL 本身或外链锚文本,摘要可能来自链接周围的文字。这类结果常被误认为“robots 失效了”,实际上是索引用了抓取之外的信息。

noindex 生效的前提是页面能被抓到

noindex 写在页面的 meta robots 标签里,或者放在响应头的 X-Robots-Tag 中。无论哪种形式,爬虫都必须先把页面抓下来,才能读到这条指令。如果同一个 URL 既被 Disallow 又带 noindex,爬虫被挡在门外,读不到 noindex,索引状态自然不会有变化。这是最常见的一种冲突写法。

下架单个页面的操作顺序

  1. 先确认页面当前可被抓取:robots 规则不挡它,访问返回 200,没有被登录墙、验证码或地理限制拦在外面。
  2. 加上 noindex,保持页面可访问一段时间。
  3. 等搜索引擎重新抓取并识别到 noindex,观察索引中的该 URL 是否逐步减少。
  4. 确认基本消失后,再决定是继续保留 noindex,还是用 404、410 或重定向做后续处理。

顺序颠倒过来,先 Disallow 再想加 noindex,中间的等待时间会被拉长很多,因为爬虫根本没有机会读到新指令。

只想省抓取消耗,可以只用 Disallow

并非所有被挡的 URL 都需要清理索引。有些目录本来就不介意是否被收录,只是不希望爬虫反复来抓,比如无穷尽的筛选组合、内部日志页、临时导出链接。这种情况下只写 Disallow 是合理的,目的是把抓取配额集中在有价值的页面上。

判断标准可以归纳成两句话:不希望它出现在结果里,用 noindex 并保证可抓;不在乎是否收录、只想减少抓取,用 Disallow。两者混用时,先想清楚哪个目的优先。

排查时该看什么

  • robots.txt 中针对该路径的具体规则,注意通配符与 Allow 的优先级,以及是否被上层目录的规则覆盖。
  • 页面的 HTTP 状态码,以及响应头里是否存在 X-Robots-Tag。
  • 页面源码中的 meta robots 是否与响应头指令冲突。
  • 站长后台的抓取统计与索引状态,看最近一次抓取时间和抓取结果。
  • 是否存在登录墙、地域限制、JS 渲染失败等导致内容拿不到的情况。

被大量外链指向的 URL 更要谨慎

如果一个 URL 有较多外部链接,处理节奏会更慢。搜索引擎知道它存在,可能长期保留一条信息不完整的结果。想让这类 URL 彻底退出索引,需要在可抓取的前提下返回 noindex,或者用 404、410 明确表态,然后等外链自然衰减。单纯加 Disallow 往往只是让爬虫不再更新这条信息,结果反而更旧。

robots.txt 是抓取指令,不是收录开关。想让内容不进入索引,靠的是 noindex;而 noindex 要起作用,页面必须能被抓到。两个开关用反了,规则会互相抵消。

遇到“明明挡了却还在”的情况,先别急着改规则,把目的写清楚:是要它消失,还是只是不想被抓。目的不同,用的工具和验证周期都不一样。