做蜘蛛池的时候,大家往往把精力放在入口页数量、域名和服务器上,却容易忽略一个很小的文件:robots.txt,以及页面里的 meta robots。它们本身不产生流量,但一旦配置错了,蜘蛛可能连门都进不来,或者进来之后不跟着链接走。这篇文章把入口页、目标页和资源文件这三类对象该放行还是该挡住,分开讲清楚。
先分清三个层级的“禁入指令”
同一个“别抓我”的意图,可以用三种方式表达,作用的范围不一样:
- robots.txt:放在域名根目录,是站点级协议,蜘蛛抓取任何 URL 前一般会先读它。写错一条通配符,可能整站被挡。
- meta robots:写在 HTML 的 head 里,只作用于当前页面,可以带 noindex、nofollow、noarchive 等参数。
- X-Robots-Tag:通过 HTTP 响应头下发,适合 PDF、图片等非 HTML 资源,也适合由服务器统一批量控制。
三者冲突时,通常按更严格的一条执行。也就是说,只要有一处写了禁止,蜘蛛一般就按禁止处理,不会帮你“择优”。
入口页该放行什么,该挡住什么
入口页存在的意义是被发现、被抓取、被跟随链接。所以对蜘蛛池的入口页来说,最基本的配置是:
- robots.txt 里不要对入口页所在目录写全站 Disallow;
- 不要给入口页加 nofollow,否则页面里的链接不会被跟随,目标页也就到不了;
- 如果入口页只是通道、不希望它自己出现在结果里,可以用 noindex,但要注意 noindex 不影响抓取和链接跟随,蜘蛛仍然会访问它并顺着链接走;
- 需要蜘蛛渲染的 CSS、JS 文件不要被 robots.txt 挡住,否则渲染出来的页面可能残缺。
常见的误区是把 noindex 和 nofollow 当成一回事。前者影响是否保留在索引里,后者影响是否跟随页面上的链接。对蜘蛛池来说,真正致命的是 nofollow 和 robots.txt 的全站禁止。
目标页的 robots 要注意什么
目标页是你希望蜘蛛最终到达的地方。如果目标页自己被 noindex 或者被 robots.txt 挡住,入口页做得再顺手,也只是把蜘蛛送到了一个死胡同。建议定期抽查:
- 目标页是否返回 200,而不是 301 到别处或 403;
- 目标页的 meta robots 是否含 noindex;
- 目标页是否有登录墙、验证码或地区限制,导致蜘蛛拿到的是拦截页而不是内容。
几个容易被忽略的细节
批量铺入口页时,最常出问题的不是写得不对,而是模板复制时把别处的 robots.txt 一起带了过来。
- 通配符与结尾斜杠:Disallow: /tmp 和 Disallow: /tmp/ 的含义不同,前者会连带挡住 /tmpabc 这类路径。
- 大小写敏感:路径部分通常区分大小写,别凭感觉写。
- 多域名、多协议:http 与 https、主域名与子域名的 robots.txt 各自独立,改了一个不代表另一个也改了。
- Sitemap 声明:如果 robots.txt 里写了 Sitemap 地址,确认它能正常打开,别写成一个 404。
- 缓存:robots.txt 有缓存周期,改完不要指望立刻生效,看日志时要把这段时间算进去。
排查顺序建议
- 用命令行或浏览器直接访问域名根目录的 robots.txt,确认返回 200、内容完整、没有多余的 Disallow。
- 用搜索引擎官方提供的 robots 测试工具,模拟某个入口页 URL,看是否被允许抓取。
- 查看入口页响应头里是否带 X-Robots-Tag,再看 HTML 源码里的 meta robots。
- 去访问日志里核对:蜘蛛是否真的抓了入口页,有没有顺着页面上的链接访问目标页。只有入口页访问记录、没有目标页记录,通常说明链接没被跟随。
整理下来其实就一句话:入口页要允许抓取和跟随,目标页要能被正常访问,中间的资源文件不要误挡。配置完先拿少量入口页跑一轮,确认蜘蛛能走完“入口页—链接—目标页”这条路径,再考虑扩大规模。具体效果受内容质量、站点状态与竞争环境等多方面影响,robots 只是把通道打开,并不保证蜘蛛一定常来。