做站点运营时,robots.txt 是一个绕不开的文件。不少人把它的功能想象成“封杀令”——只要写上 Disallow,就以为搜索蜘蛛再也看不见那个 URL。于是,当服务器日志里仍然出现蜘蛛对已屏蔽 URL 的请求时,就开始怀疑是不是蜘蛛池出问题了。其实,这里混淆了两个概念:URL 发现和抓取执行。
robots.txt 到底如何控制搜索蜘蛛?
robots.txt 协议约定的不是“是否收录”,而是“是否抓取”。当搜索蜘蛛准备抓取一个 URL 前,会先查看该域名根目录下的 robots.txt,根据其中的规则决定能不能抓取。如果命中 Disallow,蜘蛛原则上不会主动抓取这个地址。注意,这个规则生效的前提是蜘蛛已经知道了这个 URL 的存在,并且打算访问它。
换句话说,robots.txt 是一道“闸门”,不是“过滤器”。它不能阻止其他网站或用户看到你的链接,也不能阻止搜索蜘蛛通过外部链接“发现”这个 URL。发现和抓取是两回事:搜索引擎在解析网页时,会从已抓取的页面里提取出所有链接,并把它们加入待抓取队列。这个过程叫 URL 发现。即使某个 URL 写在 robots.txt 里,只要它出现在某个公开页面上,搜索蜘蛛依然有可能在日志里留下请求记录——这往往是蜘蛛在尝试抓取前,先来检查 robots.txt,或者因为某些特殊原因直接请求了该地址。
被禁用的 URL 是否还会被“发现”?
答案是:会。搜索蜘蛛通过两种主要途径发现新 URL:一是从已收录页面的链接中提取;二是通过站点地图、外部提交等方式直接获得。当你把某个目录 Disallow 后,如果其他页面仍然指向这个目录下的 URL,搜索引擎就有机会发现它,只不过按照规则,它不会去抓取这个页面。
发现不等于抓取,抓取不等于收录。robots.txt 只能控制“不抓取”,但无法控制“不被发现”。
因此,如果你希望某个 URL 彻底不被搜索蜘蛛触碰,仅靠 robots.txt 是不够的。最稳妥的做法是:不要提供任何指向该 URL 的链接,同时考虑使用 noindex 标签,从搜索结果中移除已收录的版本。不过 noindex 要求蜘蛛抓取内容后才能看到,这与 Disallow 是矛盾的——如果将两者用在同一 URL 上,蜘蛛因为 Disallow 无法抓取,就永远看不到 noindex 标签,最终可能导致该 URL 长期留在索引中。这也是很多站长在屏蔽后台目录时踩过的坑。
为什么明明 Disallow 了,日志里还是有蜘蛛?
这里列出几种常见原因,供你排查。
- 蜘蛛先来检查 robots.txt 文件本身:每次抓取前,蜘蛛都要重新读取 robots.txt。日志中这些请求可能只是针对根目录下的 robots.txt,而不是被屏蔽的页面 URL,需要区分开。
- 缓存了旧的抓取队列:搜索引擎可能在其他地方已经“排队”了这个 URL,Disallow 生效后,部分蜘蛛策略仍会尝试访问一次,用 5xx 状态码来确认是否真的被屏蔽。
- 规则写错或语法不匹配:比如写成了“Disallow: /admin ”有多余空格,或者路径大小写不一致,导致规则没命中。建议仔细核对。
- 其他搜索引擎的蜘蛛:不是所有蜘蛛都完全遵循同一套 robots 标准,有的可能只检查域名级规则,有的则对嵌套目录处理不同。如果日志中是特殊 UA,需要单独了解其规范。
正确使用 robots.txt 的建议
既然 robots.txt 不能阻止 URL 被发现,那么该怎么用它才合理?这里有几个实践方向:
- 只屏蔽不需要抓取的资源。比如后台管理页面、脚本文件、重复的筛选参数等。记住,robots.txt 是拿来节省抓取额度的,不是拿来“保密”的。
- 确保站点地图 URL 不被 Disallow。如果 sitemap 地址被自己屏蔽,蜘蛛就看不到你提交的更新了。
- 为重要目录设计清晰的链接路径。想让蜘蛛发现新内容,就要保证新 URL 能从首页或内页被正常链接找到,而不是完全依赖提交。
结语
蜘蛛池也好,普通站点也好,理解 robots.txt 的边界都是基本功。它控制的是抓取动作,而不是发现过程。你的目标是让搜索蜘蛛高效地找到并抓取有效 URL,同时避免浪费资源在无用页面上。因此,与其指望用 robots.txt 隐藏链接,不如从源头控制链接结构,配合正确的状态码和 meta 标签,才能让 URL 的抓取和收录变得自然可控。