做蜘蛛池的人常常把注意力放在入口页的模板、链接和跳转上,却很少认真看一眼站点根目录下的 robots.txt。这个文件不产生内容,也不影响页面渲染,但它决定了爬虫能不能走进你的入口页——在很多抓取异常的案例里,问题就出在这几十行文本上。
robots.txt 在蜘蛛池里到底管什么
robots.txt 是爬虫访问一个站点时最先请求的文件之一。它告诉爬虫哪些路径可以抓、哪些不要抓,以及 sitemap 放在哪里。对蜘蛛池来说,它的作用有两个:一是决定入口页能否被抓到,二是决定爬虫进入池子后的路径范围。
需要明确的是,robots.txt 是一份约定,不是防火墙。遵守它的爬虫会照做,不遵守的照样抓。所以它解决的是“正常爬虫的路线问题”,不是“拦截问题”。
几种常见写法,分别会带来什么结果
- 全站 Disallow: /:正规搜索引擎爬虫基本不会抓入口页,池子形同虚设,除非你只想给特定 UA 看。
- 不写 robots.txt(返回 404):多数爬虫会视为没有限制,正常抓取。这是很多池子的默认状态,能用,但不便于后续管理。
- 只拦后台和参数路径:这是比较常见的做法,把 /admin、/search?、/tmp 等无意义路径排除,把抓取预算留给入口页。
- 路径通配写错:想拦某个目录结果写成了整站前缀,或通配符使用不当,把入口页也一起挡在门外。
判断标准很简单:如果入口页在你的 robots.txt 里被挡住了,那么后面所有的模板优化、链接布局都没有意义。
什么时候该放开,什么时候该拦
大多数蜘蛛池场景下,入口页需要被放开。入口页的作用就是被爬到、被跟着链接走,如果连门都不开,谈别的都早。
真正需要拦的通常是三类:一是与池子无关的系统路径,避免爬虫在无意义页面上消耗预算;二是可能产生大量重复或参数化 URL 的路径;三是你明确不想被索引的临时页或测试页。留住入口页,拦住噪音,是基本思路。
robots.txt、nofollow 与 meta robots 的分工
三者经常被混为一谈,但作用范围不同:
- robots.txt 管的是“能不能抓”,按路径生效,面向整个站点。
- meta robots 管的是“抓了之后怎么办”,按页面生效,可以写 noindex、nofollow。
- 链接上的 nofollow 管的是“这条链接要不要跟”,按链接生效。
入口页被 noindex 了却指望它引爬虫,是典型的方向错位。如果你希望入口页被抓、但不希望它出现在搜索结果里,可以用 noindex, follow 的组合;如果连跟链接都不想要,那这张入口页基本就没有存在价值了。
几个容易踩的坑
- 拦掉整个目录后忘了改回来。上线测试时加的限制,后面忘了删,池子安静了很久才发现。
- 多个子域名共用一份规则。有的池子把入口页铺在多个子域上,却只改了主域的规则,其他子域各自返回 404 或旧内容,行为不一致。
- robots.txt 本身返回 5xx。爬虫拿不到这个文件时,保守的做法是暂停抓取该站部分内容,这会让入口页迟迟进不了抓取队列。
- 规则写得太细。几十条 Disallow 反而容易出错,也不利于排查。保持简单、可读、可核对。
一些实用建议
- 把 robots.txt 列入池子上线检查清单,和状态码、跳转一起核对。
- 在文件里写明 Sitemap 地址,给 URL 发现多留一条通道。
- 每次改动后,用抓取测试工具或直接观察访问日志,确认爬虫行为符合预期。
- 保留改动记录。哪一天放了什么路径、拦了什么路径,出了问题能快速回溯。
- 如果你同时运营多个池子,把各自的规则统一成一套模板,减少配置漂移。
robots.txt 不是玄学开关,它只是一份说明书。写清楚“这里可以来、那边不用来”,爬虫的路线就会清晰一些,入口页被发现的几率也稳定一些。它不会让页面被收录或排名,但写错了,确实能让一个已经搭好的池子白忙一场。