有人做过一轮站点清理,把不想要的目录写进 robots.txt 的 Disallow,日志里确实看不到蜘蛛来抓了,但过一段时间去查索引,那些 URL 还在。于是又怀疑规则没生效,或者蜘蛛不守规矩。多数情况下,问题不在执行,而在对 robots.txt 的理解。
robots.txt 管的是抓取,不是收录
robots.txt 的作用是告诉蜘蛛“这个路径不要抓”。它不负责把已经进入索引的 URL 删掉,也不负责阻止 URL 进入索引。一个 URL 能进索引,不一定需要蜘蛛拿到页面正文:从外链、sitemap、内链、历史记录里知道这个地址存在,就足够让它出现在索引里,只是没有标题、没有摘要、没有快照,用户点进去也可能打不开。
所以看到“被屏蔽但被收录”,先分清两件事:蜘蛛是否在抓(看日志),URL 是否在索引(看索引状态)。这两条线本来就可能不一致。
几种常见的误判
- 只屏蔽了目录,没覆盖到具体 URL:Disallow: /tag/ 与 Disallow: /tag 的范围不同,写错会让本想挡住的地址继续被抓。
- 屏蔽了 A 路径,URL 却从 B 路径被带出来:内链、外链、sitemap 里仍有完整地址,蜘蛛不抓也能知道它存在。
- 规则生效有延迟:不同抓取工具的缓存时间不一样,改完立刻看结果,容易得出错误结论。
- 规则只针对某个 UA 写:其他 UA 依然会抓,日志里看起来“还在访问”。
正确的处理顺序
如果目标是让页面彻底从索引里消失,robots.txt 通常不是第一个该动的工具,顺序反过来才更好用:
- 先确认页面可以被抓取。noindex 需要蜘蛛读到页面上的 meta 或响应头才会生效,如果 robots.txt 把整条路径挡死,蜘蛛读不到 noindex,删除指令也就无从谈起。
- 在页面上加 noindex,或者对整批不需要的地址返回 X-Robots-Tag 响应头。等它被重新抓取后,索引状态会逐步变成“已排除”,这个过程可能需要数周,取决于抓取频率。
- 确认已从索引移除后,再考虑用 robots.txt 减少抓取消耗。这时屏蔽只影响抓取,不影响收录状态。
- 如果涉及敏感或紧急内容,用各家的 URL 移除工具做临时处理,它有时间限制,别当成长期方案。
顺序记反了,就会得到“屏蔽了还收录、noindex 也没生效”的双重困惑,其实是从第一步就断了链路。
自查清单
- 日志里是否还有该路径的抓取记录,抓的是哪个 UA。
- robots.txt 是否可正常访问、返回 200,没有被 CDN 或防火墙拦截。
- 规则是否写成了相对路径,通配符位置是否造成误伤。
- 页面返回码是 200 还是 404/410,后者本身也有清理效果。
- 是否同时存在 canonical、noindex、robots 三套指令互相覆盖。
顺手要避免的做法
为了省抓取预算,把整个目录粗暴屏蔽,往往会把需要收录的页面一起挡掉。更稳妥的做法是按目录和页面类型分配合适的信号:该收的放开抓取、给出内链和 sitemap;不该收的用 noindex 收口;最后才用 robots.txt 控制抓取量。屏蔽是省资源的工具,不是清理索引的工具。