搭蜘蛛池时,很多人把精力全放在入口链接、域名数量和抓取日志上,却很少回头检查一个最基础的东西:自己的拦截规则。robots.txt 和 meta robots 属于一票否决型配置,入口铺得再多,只要这两处写错,蜘蛛到了门口也会掉头。
robots.txt:一个字符写错就可能封掉整站
robots.txt 是蜘蛛访问域名时优先请求的文件。它本身消耗不了多少抓取预算,但它决定了后续所有请求是否被允许。
- Disallow 写得太宽。比如想屏蔽后台,写成 Disallow: /,结果整个站都被挡住。更稳妥的做法是精确到目录,如 Disallow: /admin/。
- User-agent 名称不匹配。规则里的 UA 名字要和蜘蛛实际使用的名字对应。写错时规则往往不生效,等于默认放行;反过来,如果误匹配了其他 UA,也可能误伤。
- 文件位置或返回码不对。robots.txt 必须放在根目录。如果服务器返回 404,蜘蛛通常视为无限制;如果返回 5xx,蜘蛛可能暂停抓取一段时间,反而更麻烦。
- 通配符和结尾符滥用。* 和 $ 在不同引擎上的支持程度不一致,别把关键路径写成模棱两可的模式,否则本意是放开,实际却被挡。
一个实用习惯:改动 robots.txt 后,用抓取工具模拟一次蜘蛛访问,确认返回码和目标路径都在预期内,再去看日志。
meta robots 与 X-Robots-Tag:页面级的开关
如果 robots.txt 管的是能不能进来,meta robots 管的就是进来之后怎么处理。常见取值包括 noindex、nofollow、noarchive、nosnippet 等。
- noindex 与 nofollow 是两回事。noindex 表示不要收录该页,nofollow 表示不要沿该页上的链接继续爬。想保留入口页的爬取通道,就不要顺手加上 nofollow。
- X-Robots-Tag 是 HTTP 头版本。它适合用在图片、PDF、JS 等非 HTML 资源上,也可以通过服务器配置整站下发。注意两者同时存在时,通常取更严格的那个。
- JS 渲染出的 meta 要不要依赖?部分蜘蛛会渲染后再判断,但不要把关键拦截逻辑放在 JS 里,依赖渲染存在延迟和不确定性。
几个容易踩的误区
- 用 noindex 屏蔽入口页,却指望蜘蛛继续往下抓。noindex 不等于 nofollow,但长期不给收录信号,蜘蛛对这个入口的估值会走低。
- 多层跳转里某一环被 disallow。入口正常,第二跳或第三跳被拦,蜘蛛走到一半就断了。
- 测试环境的拦截规则被带到线上。上线前核对一遍,比事后排查省事得多。
- 只检查 HTML 里的 meta,忘了服务器响应头里的 X-Robots-Tag。
落地建议
- 先做一次拦截规则核查:robots.txt、meta robots、X-Robots-Tag 三处都要看。
- 区分环境,测试站的拦截规则别混进线上配置。
- 用服务器日志验证:看蜘蛛请求的返回码,如果大量是 403 或被拒绝,多半是规则之间有冲突。
- 规则改动小而勤,不要一次大改,方便定位问题来源。
蜘蛛池的价值建立在蜘蛛能顺利走通路径上。入口、域名、内容都准备好了,却因为一行 Disallow 或一个 noindex 把路堵死,是很常见的浪费。把拦截规则当成池子的地基,先确认它没写错,再谈后面的优化,顺序才不会颠倒。