很多人在搭蜘蛛池时,把注意力全放在链接、IP、内容上,却忽略了 robots.txt 和 meta robots 这两道闸门。它们对爬虫来说就是通行规则,配错了,入口页可能连被抓取的机会都没有;配得太随意,又可能让蜘蛛把抓取预算耗在无关路径上。
先分清两件事:抓取与索引
robots.txt 和 meta robots 常被混为一谈,但它们管的不是同一件事。robots.txt 决定能不能抓,搜索引擎读到规则后,可能连页面内容都不看;meta robots 决定抓到了之后怎么处理,比如是否收录、是否跟随页面上的链接。蜘蛛池的入口页通常需要被抓取、被收录,所以默认策略应该是放行,只有明确的例外才动手收窄。
robots.txt 在蜘蛛池里的常见误用
不少池子为了让入口页看起来干净一点,顺手写上一句 Disallow: /,结果整站对所有搜索蜘蛛关门。蜘蛛确实不来了,之前的铺垫也全部作废。另一种相反的情况是 robots.txt 本身返回 404 或 5xx,抓取端会按不同规则处理,长期异常还可能影响对整站的抓取节奏。
- 把 robots.txt 当隐私工具:写进去的路径等于公开告诉别人这里有什么,真正的后台路径应该靠登录和权限控制。
- 用 302 跳转或返回一段 HTML:抓取端期待的是纯文本,拿到别的内容容易被判定为异常。
- 只检查主域名的 robots.txt,忘了子域名:每个子域名有独立的 robots.txt,多个入口域要分别核对。
- 文件名或路径大小写不一致:Robots.txt、带多余斜杠的写法,都可能被当成不存在的文件。
meta robots 与 X-Robots-Tag 的取舍
meta robots 写在 HTML 的 head 里,常见取值有 index、noindex、follow、nofollow。入口页一般写 index,follow,让蜘蛛抓取并顺着链接往下走。如果某个入口页只是中转、不希望被收录,可以用 noindex,follow,让蜘蛛继续沿着链接爬到目标页,但页面本身不进索引。
需要注意的是,noindex 必须建立在页面能被抓取的前提上。如果 robots.txt 已经 Disallow 了这个页面,蜘蛛就不会去读 meta 标签,noindex 等于没写,页面仍可能因为外链而出现在结果里。
对于非 HTML 资源,比如 PDF、图片或接口返回的内容,meta 标签写不进去,这时可以用 HTTP 响应头 X-Robots-Tag 达到类似效果。
入口页一般怎么配
- robots.txt 放行全站,只对确实不需要抓取的后台、测试、统计路径做 Disallow。
- 入口页 head 中写 index,follow,保持默认的抓取与跟随。
- 链向目标页的链接不要加 rel="nofollow",除非你明确不想让蜘蛛继续走。
- 分域名、分目录的池子逐个检查,不要只测一个入口就认为全站一致。
- 改完规则后,直接抓取 robots.txt 验证返回状态与内容,确认没有被跳转或拦截。
两个容易被忽略的细节
robots.txt 被中间层拦住
CDN、WAF 或限流规则如果拦住了 robots.txt 的请求,抓取端拿到的可能是 403 或 5xx。表现上不一定立刻掉抓取量,但时间一长会影响蜘蛛对整站的访问节奏。把 robots.txt 加到白名单里是比较省事的做法。
规则改动后的生效时间
robots.txt 通常会被缓存一段时间,改完不会立即生效。如果你刚放开限制就想看到蜘蛛量回升,需要给它一点缓冲期,期间不要反复修改规则,频繁变动反而不利于观察真实变化。
把 robots.txt 和 meta robots 当成给爬虫看的说明书,而不是隐藏内容的工具。说明书越简单清晰,蜘蛛越不容易走错路。
最后提醒一句:这两项配置属于基础项,做好它们只是保证入口页不被自己挡住,真正决定效果的是内容、链接结构和持续维护。发现蜘蛛量异常时,可以先确认这两道闸门是不是被误关了,再去排查其他环节。