搜索抓取

robots.txt 出问题时蜘蛛会怎么抓:404、5xx 与误封的差别

robots.txt 是蜘蛛抓取前的第一道检查,它自身的状态码会直接改变抓取行为。本文说明 200、404、5xx 与限速响应各自对应什么处理方式,列出常见的误封写法,并给出规则缓存生效的节奏与一套可执行的排查顺序。

搜索抓取

robots.txt 出问题时蜘蛛会怎么抓:404、5xx 与误封的差别

robots.txt 在抓取流程里的位置

蜘蛛准备抓取一个新 URL 之前,通常会先确认这个站点的 robots.txt 允许它访问。这份文件本身也是一个普通 URL,同样要经历 DNS 解析、建立连接、等待响应这一整套流程。区别在于,它的结果会影响蜘蛛对整个站点的判断,所以一个不稳定的 robots.txt,比一个不稳定的一般页面更麻烦。

不少站点只在 robots.txt 里写几条 Disallow 就长期不管,等到出现抓取异常才回头检查,往往已经过去几周。把它当成一份需要监控的基础配置,比当成一次性的设置更稳妥。

不同响应状态对应不同处理方式

200,正常读取规则

返回 200 且内容可解析时,蜘蛛按规则执行。需要注意的是,规则按路径匹配,Disallow 写得过于宽泛,或者使用了蜘蛛并不支持的写法,都可能波及本来想放开的目录。

404 与 410:视为没有限制

robots.txt 返回 404 或 410,蜘蛛通常理解为该站点没有设置限制,于是按常规方式抓取。对新建站点来说这不算坏事,但如果本来是靠 robots.txt 屏蔽某些目录,文件被误删之后,这些目录会重新进入抓取范围。删除或改名之前,最好先确认没有依赖它做屏蔽。

5xx 与超时:偏向保守

robots.txt 连续返回 5xx 或请求超时,蜘蛛会倾向于暂停或减少抓取,等待后续再试。这种保守是有道理的:在拿不到规则的情况下继续大量抓取,风险更高。如果服务器整体故障,页面和 robots.txt 会一起出问题;但如果只是这一个路径被错误配置、被防护策略拦截、或者被后端路由吞掉,就会出现「页面能打开、抓取却在降频」的割裂现象。

429 与其他限速响应

有些站点会在 robots.txt 之前加一层限速,返回 429。这类响应同样会被当作未取得规则处理,短期影响不大,但如果长期如此,蜘蛛每次都要为读取规则付出额外代价。

误封的几种典型写法

  • Disallow: / 从测试环境复制到生产环境,整站被挡在门外。
  • 规则里的路径大小写或尾斜杠写法不一致,以为挡住了 /search/,实际只挡住了其中一种写法。
  • 把 Sitemap 声明放在被 Disallow 覆盖的目录下,忽略了声明文件和 Sitemap 文件本身是两件事。
  • 通过跳转把 robots.txt 指向别处,或者让它返回一个 HTML 页面,导致内容无法解析。

缓存与规则生效的节奏

蜘蛛不会每次抓取都重新读一遍 robots.txt,它有自身的缓存周期。规则改动之后,生效往往不是即时的:收紧规则和放开规则的感知速度也不一样,放开之后页面还需要重新进入抓取队列。修改前后都留一段观察期,比反复改动更容易看清效果。

robots.txt 里的 Sitemap 声明

在其中写入 Sitemap 地址是一个低成本的补充,让蜘蛛在读取规则的同时知道 URL 清单在哪里。不过它只是清单来源之一,并不等于收录保证;Sitemap 里的 URL 仍然要能正常响应、有站内入口,才更容易被稳定抓取。

出现抓取异常时的排查顺序

  1. 直接用命令行或抓取工具请求 robots.txt,看返回的状态码、内容类型,以及正文是否为纯文本。
  2. 确认返回内容与当前线上文件一致,排除缓存或反向代理返回了旧版本。
  3. 检查是否有防护策略把该路径的请求拦成 403 或 5xx。
  4. 核对 Disallow 规则是否误伤目录,以及 Sitemap 声明的地址是否可访问。
  5. 对照服务器日志,看蜘蛛对该文件的请求频率和状态码分布。
robots.txt 不决定页面是否被收录,它只影响蜘蛛能不能抓、以多大的范围抓。把它当成访问控制的入口,而不是排名的开关。

一个稳定的 robots.txt,价值不在于写得多复杂,而在于长期返回一致的结果,并且与站点实际想开放的范围保持一致。