网站收录

被 robots.txt 挡住的 URL,为什么还能在索引里看到

robots.txt 管的是抓取,不是收录。本文说明被 Disallow 的地址为何仍可能出现在索引里、只留 URL 的空条目是怎么形成的,以及 disallow 与 noindex 同时使用时会出什么问题,并给出让页面真正退出索引的处理顺序。

网站收录

被 robots.txt 挡住的 URL,为什么还能在索引里看到

做站点运营时经常会遇到一个矛盾现象:某个目录已经在 robots.txt 里写了 Disallow,过一段时间用 site: 查,还是能看到里面的 URL。这不是蜘蛛不守规则,而是抓取和收录本来就是两道不同的门,用一把钥匙开不了两把锁。

先分清两道门:抓取与索引

robots.txt 约束的是抓取——蜘蛛能不能来读取这个 URL 的内容。能不能进入索引,则由 noindex 指令、页面内容质量、重复情况等信号决定。一个 URL 即使内容被挡在外面读不到,也可能因为被别处链接指向,在索引里留下一个条目。所以「挡住蜘蛛」和「不进索引」之间,并不能画等号。

被挡住的 URL 为什么还会进索引

常见来源有这几种:

  • 站内其他页面或外部网站有链接指向它,蜘蛛顺着链接知道了这个地址;
  • 站点的 sitemap 里仍然包含该 URL,或者曾经通过工具主动提交过;
  • 页面里的链接能从 HTML 或脚本中被解析出来,地址因此被发现;
  • 早期抓取时已经建立了记录,索引条目没有因为后来加的 disallow 自动消失。

这类条目通常比较空:可能只有 URL,标题来自锚文本,没有描述,用户点进去也看不到内容。对搜索体验和站点形象都没有好处。

三种常见的误用

用 robots.txt 处理「不想被搜到的页面」

如果目的是让页面不出现在索引里,正确做法是 noindex(页面需要允许抓取,蜘蛛才能读到这条指令),或者用 HTTP 响应头里的 X-Robots-Tag。真正麻烦的组合是同时 disallow 和 noindex:蜘蛛进不来,读不到 noindex,反而可能让索引里的旧条目长期留着。

用 disallow 屏蔽重复内容

参数页、筛选页、打印页这类近似页面,更合适的处理是 canonical 指向主版本,或做 301 合并,必要时用参数处理工具。用 disallow 挡住,只是让蜘蛛不再读,重复信号并不会因此消失。

想靠 robots 控制收录数量

索引里的 URL 数量最终取决于内容质量与规范化程度。robots.txt 能减少抓取,但不等于减少收录,两者不要混用。

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

  1. 先确认这个 URL 到底在不在索引里,用 site: 查询或 URL 检查工具验证,不要只看日志。
  2. 检查是否同时存在 disallow 与 noindex 的组合,这是最常见的死结。
  3. 如果确实要移除,先放开抓取,让 noindex 能被读到,再等蜘蛛重新抓取后评估。
  4. 紧急情况下可以用临时移除工具做短期下架,但它是临时的,不能当作长期方案。
  5. 长期靠规范化、合并重复、提升内容价值来减少不该被索引的 URL。

和抓取配额的关系

disallow 的价值在于省下抓取配额,把蜘蛛的访问留给真正重要的页面。代价是失去对这批 URL 索引状态的控制,也看不到内容是否更新。后台目录、搜索结果页、大量无内容参数页可以这样处理;有搜索价值的页面不要轻易屏蔽。

一句话总结:robots.txt 管的是「能不能来读」,noindex 管的是「能不能进索引」,两者不能互相替代。

日常巡检时,可以定期把 robots.txt 里的屏蔽目录和索引里的 URL 对一遍。发现被挡住的地址仍然出现在结果里,先判断是链接发现导致的历史遗留,还是指令组合写错了,再决定是放开抓取加 noindex,还是继续维持屏蔽。动作分开做,问题会清晰很多。