蜘蛛池知识

蜘蛛池入口页的 robots.txt:哪些该放行,哪些该拦掉

robots.txt 是蜘蛛池里最容易被忽略、也最容易被改坏的一个文件。它不决定收录,却直接决定爬虫能不能进来。本文梳理入口页 robots.txt 的常见写法、容易踩的坑、缓存机制带来的延迟,以及它与 noindex 的区别,帮助你在放行与拦截之间做出更稳妥的选择。

蜘蛛池知识

蜘蛛池入口页的 robots.txt:哪些该放行,哪些该拦掉

在蜘蛛池的日常维护里,robots.txt 往往是最不起眼的那个文件。它放在域名根目录,几行文本,改起来只要几十秒。但正因为改动成本低,很多池子的问题恰恰出在这里:一个多余的斜杠、一个没想清楚的通配符,就可能让爬虫连入口页都不再访问。

需要先说清楚一件事:robots.txt 不是收录开关,也不是安全措施。它只是告诉爬虫“哪些路径可以抓、哪些不要抓”。对蜘蛛池来说,入口页本身就是要被爬的对象,所以默认策略应该是尽量放行,而不是想方设法去限制。

默认放行,还是默认拦截

入口页的使命是让爬虫进来、顺着链接走下去。既然这样,最省事的做法就是不放 robots.txt,或者放一个只声明 Sitemap、不写任何 Disallow 的文件。很多池子出问题,不是因为没写 robots.txt,而是因为写了太多。

如果服务器上残留了别的项目的 robots.txt,情况会更糟。比如从旧站复制过来的模板里带着 Disallow: /,整个域名对爬虫关闭,入口页做得再精细也没有意义。

最容易写坏的三种情况

  • 整站禁止:Disallow: / 覆盖全部路径。除非你确实想让这个域名彻底不被抓,否则不要出现。
  • 通配符误伤:为了挡掉某类参数,写了过于宽泛的规则,结果把正常的入口页路径也一起挡住了。规则越短越危险。
  • 文件本身返回异常:robots.txt 返回 200,但内容其实是 HTML 错误页,或者返回 5xx。爬虫解析失败时通常会更保守,可能减少甚至暂停抓取。

可以拦掉的部分

不是所有访问都值得欢迎。以下几类可以考虑拦截,但要想清楚后果:

  • 与目标无关的爬虫,比如采集工具、比价插件、SEO 分析平台的抓取 UA。数量多、不带流量,占用的是服务器资源。
  • 后台、测试、临时目录等不该被外部看到的位置。
  • 资源目录要谨慎。如果入口页依赖 JavaScript 渲染内容,屏蔽 JS 文件会让爬虫拿到的是一张空页面,反而把抓取信号浪费掉。图片目录的屏蔽影响相对小,但也可能影响页面的完整性判断。
判断标准很简单:拦掉它,会不会影响爬虫理解入口页的内容。如果会,就别拦。

robots.txt 有缓存,改动不会立刻生效

这是很多人忽略的一点。爬虫不会每次访问都重新读 robots.txt,而是按自己的周期拉取并缓存,短则几小时,长则超过一天。你上午改完,下午看日志没变化,不代表改错了,可能只是缓存还没过期。

所以不要把 robots.txt 当成应急开关。想快速阻挡某个路径,robots.txt 不是合适的手段。

别和 meta noindex 搞混

两者作用完全不同:robots.txt 管的是“能不能抓”,noindex 管的是“能不能出现在结果里”。

一个常见的连锁问题是这样:页面被 robots.txt 挡住,爬虫抓不到,自然也就读不到页面里的 noindex。但如果这个 URL 有外部链接,它仍可能以无摘要的形式出现在结果中。所以如果目标是让某个页面彻底不出现,正确顺序是允许抓取 + 加 noindex,而不是先屏蔽抓取。

对蜘蛛池入口页来说,这两种需求通常都不存在。入口页既要被抓,也没有必须隐藏的理由,保持简洁即可。

几个实操检查点

  1. 文件只保留必要的 User-agent 与 Allow/Disallow,附上 Sitemap 地址就够了。
  2. 多域名池子要逐个核对,避免复制粘贴时把 A 域名的规则写到 B 域名上。
  3. 改动前后对比日志里的抓取量和状态码,观察周期至少覆盖一次 robots 缓存时间。
  4. 确认 robots.txt 返回 200 且内容是纯文本,不要被服务器的伪静态规则改写成 HTML。
  5. 如果同一个服务器跑多个站点,检查根目录是否指向了正确的位置。

robots.txt 本身不复杂,但它属于“改一次、影响一片”的文件。写之前想清楚要放行谁、要拦谁,改完之后耐心等缓存过期再下结论,比反复调整规则要稳妥得多。