搜索抓取

Crawl-delay 设了之后,蜘蛛是抓得稳了还是干脆不来了

服务器压力大时,很多人会在 robots.txt 里加 Crawl-delay。这个指令并非所有蜘蛛都严格遵守,设置后会降低请求频率,也可能推迟新 URL 的发现。本文说明它适合哪些场景、有哪些更细的替代做法,以及如何用日志验证限速是否真的起了作用。

搜索抓取

Crawl-delay 设了之后,蜘蛛是抓得稳了还是干脆不来了

服务器偶尔扛不住蜘蛛的并发请求时,很多人的第一反应是在 robots.txt 里加一行 Crawl-delay。这个指令看起来简单,但它的实际效果取决于蜘蛛是否遵守、你的站点规模以及抓取需求的紧迫程度。设置之前,最好先弄清楚它会改变什么。

Crawl-delay 是什么,哪些蜘蛛会看

Crawl-delay 写在 robots.txt 中,用来告诉蜘蛛两次请求之间至少间隔多少秒。它和 Disallow 不同,Disallow 是拒绝访问某段路径,Crawl-delay 是要求降低访问频率,并不禁止抓取。

需要留意的是,不同搜索引擎对这个指令的态度并不一致。有的蜘蛛会明确读取并遵守,有的则把它当作参考,甚至完全忽略。也就是说,你不能假设写了就一定会生效,尤其不能把它当作控制抓取量的唯一手段。

设置之后,抓取会发生什么变化

  • 单位时间内的请求数下降,服务器压力随之减轻;
  • 同样一段时间内,蜘蛛能翻的页面变少,新 URL 的发现和重抓可能被推迟;
  • 如果站点本身页面不多,影响通常有限;如果 URL 数量大、更新频繁,延迟会累积得比较明显。

换句话说,它是在用抓取速度换服务器稳定。这个交换是否划算,要看你的站点处于什么阶段。

哪些情况适合设,哪些情况要谨慎

适合考虑的场景

  • 服务器配置有限,蜘蛛集中访问时 CPU 或数据库压力明显;
  • 站点规模不大,页面更新频率低,不需要蜘蛛高频回访;
  • 测试环境或不希望被频繁抓取的辅助站点。

需要谨慎的场景

  • 新站或新栏目刚上线,正需要蜘蛛尽快发现 URL;
  • 内容更新频繁,依赖重抓来同步变化;
  • 已经用了 CDN 或缓存,蜘蛛请求并不直接打到源站。

如果你的站点属于后一类,先排查是不是某个目录或参数拖慢了响应,往往比全局限速更对症。

比 Crawl-delay 更细的替代做法

与其一刀切地拉长间隔,不如从几个更具体的地方入手:

  1. 分开处理目录:只对压力大的路径设置延迟,其他目录保持正常抓取节奏。
  2. 优化响应速度:减少首字节时间,蜘蛛的等待变短,抓取效率自然会好一些。
  3. 利用缓存:让蜘蛛请求命中缓存,源站压力就不会随抓取量线性上升。
  4. 控制重抓信号:页面内容没变时,不要频繁改动 lastmod 或制造无意义的更新,减少不必要的回访。
  5. 看日志再决定:先确认蜘蛛请求集中在哪些时段、哪些 URL,再判断是限速还是优化。

如果站点正被放在链接池或蜘蛛池里,短时间内的抓取请求可能更加集中。这时先看日志里这些请求落在哪些 URL 上:如果大量是参数页、重复地址或早已下线的页面,优先清理这些入口,比直接给全站加延迟更有效。

怎么验证设置有没有起作用

设置几天后,可以回到服务器日志里看蜘蛛请求的时间分布。如果请求间隔确实拉大、服务器错误减少,同时重要页面的抓取没有明显掉队,说明这个值大致合适。如果发现新页面长时间没有被访问,或者抓取覆盖出现停滞,就要考虑把延迟调小,甚至取消。

把 Crawl-delay 当成一个调节旋钮,而不是收录开关。它不会让蜘蛛更愿意来,只能让它来得慢一点。

最终还是要回到一个基本判断:你的服务器是真的扛不住,还是只是某几个页面太慢。分清楚这一点,再决定要不要在 robots.txt 里写下那行数字。