做站点运营时经常会遇到一个矛盾现象:某个目录已经在 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 能减少抓取,但不等于减少收录,两者不要混用。
一个可以照着走的排查顺序
- 先确认这个 URL 到底在不在索引里,用 site: 查询或 URL 检查工具验证,不要只看日志。
- 检查是否同时存在 disallow 与 noindex 的组合,这是最常见的死结。
- 如果确实要移除,先放开抓取,让 noindex 能被读到,再等蜘蛛重新抓取后评估。
- 紧急情况下可以用临时移除工具做短期下架,但它是临时的,不能当作长期方案。
- 长期靠规范化、合并重复、提升内容价值来减少不该被索引的 URL。
和抓取配额的关系
disallow 的价值在于省下抓取配额,把蜘蛛的访问留给真正重要的页面。代价是失去对这批 URL 索引状态的控制,也看不到内容是否更新。后台目录、搜索结果页、大量无内容参数页可以这样处理;有搜索价值的页面不要轻易屏蔽。
一句话总结:robots.txt 管的是「能不能来读」,noindex 管的是「能不能进索引」,两者不能互相替代。
日常巡检时,可以定期把 robots.txt 里的屏蔽目录和索引里的 URL 对一遍。发现被挡住的地址仍然出现在结果里,先判断是链接发现导致的历史遗留,还是指令组合写错了,再决定是放开抓取加 noindex,还是继续维持屏蔽。动作分开做,问题会清晰很多。