服务器偶尔扛不住蜘蛛的并发请求时,很多人的第一反应是在 robots.txt 里加一行 Crawl-delay。这个指令看起来简单,但它的实际效果取决于蜘蛛是否遵守、你的站点规模以及抓取需求的紧迫程度。设置之前,最好先弄清楚它会改变什么。
Crawl-delay 是什么,哪些蜘蛛会看
Crawl-delay 写在 robots.txt 中,用来告诉蜘蛛两次请求之间至少间隔多少秒。它和 Disallow 不同,Disallow 是拒绝访问某段路径,Crawl-delay 是要求降低访问频率,并不禁止抓取。
需要留意的是,不同搜索引擎对这个指令的态度并不一致。有的蜘蛛会明确读取并遵守,有的则把它当作参考,甚至完全忽略。也就是说,你不能假设写了就一定会生效,尤其不能把它当作控制抓取量的唯一手段。
设置之后,抓取会发生什么变化
- 单位时间内的请求数下降,服务器压力随之减轻;
- 同样一段时间内,蜘蛛能翻的页面变少,新 URL 的发现和重抓可能被推迟;
- 如果站点本身页面不多,影响通常有限;如果 URL 数量大、更新频繁,延迟会累积得比较明显。
换句话说,它是在用抓取速度换服务器稳定。这个交换是否划算,要看你的站点处于什么阶段。
哪些情况适合设,哪些情况要谨慎
适合考虑的场景
- 服务器配置有限,蜘蛛集中访问时 CPU 或数据库压力明显;
- 站点规模不大,页面更新频率低,不需要蜘蛛高频回访;
- 测试环境或不希望被频繁抓取的辅助站点。
需要谨慎的场景
- 新站或新栏目刚上线,正需要蜘蛛尽快发现 URL;
- 内容更新频繁,依赖重抓来同步变化;
- 已经用了 CDN 或缓存,蜘蛛请求并不直接打到源站。
如果你的站点属于后一类,先排查是不是某个目录或参数拖慢了响应,往往比全局限速更对症。
比 Crawl-delay 更细的替代做法
与其一刀切地拉长间隔,不如从几个更具体的地方入手:
- 分开处理目录:只对压力大的路径设置延迟,其他目录保持正常抓取节奏。
- 优化响应速度:减少首字节时间,蜘蛛的等待变短,抓取效率自然会好一些。
- 利用缓存:让蜘蛛请求命中缓存,源站压力就不会随抓取量线性上升。
- 控制重抓信号:页面内容没变时,不要频繁改动 lastmod 或制造无意义的更新,减少不必要的回访。
- 看日志再决定:先确认蜘蛛请求集中在哪些时段、哪些 URL,再判断是限速还是优化。
如果站点正被放在链接池或蜘蛛池里,短时间内的抓取请求可能更加集中。这时先看日志里这些请求落在哪些 URL 上:如果大量是参数页、重复地址或早已下线的页面,优先清理这些入口,比直接给全站加延迟更有效。
怎么验证设置有没有起作用
设置几天后,可以回到服务器日志里看蜘蛛请求的时间分布。如果请求间隔确实拉大、服务器错误减少,同时重要页面的抓取没有明显掉队,说明这个值大致合适。如果发现新页面长时间没有被访问,或者抓取覆盖出现停滞,就要考虑把延迟调小,甚至取消。
把 Crawl-delay 当成一个调节旋钮,而不是收录开关。它不会让蜘蛛更愿意来,只能让它来得慢一点。
最终还是要回到一个基本判断:你的服务器是真的扛不住,还是只是某几个页面太慢。分清楚这一点,再决定要不要在 robots.txt 里写下那行数字。