常见問题

robots.txt 里的 Crawl-delay,能控制搜尋蜘蛛抓入口頁的速度吗

很多人在蜘蛛池入口頁的 robots.txt 里加 Crawl-delay 来限速,但主流搜尋蜘蛛並不都讀這個字段。本文說明它的适用范围、真正影响抓取节奏的因素,以及 429 / Retry-After、入口頁數量控制等更可靠的替代做法,並给出用日誌驗證效果的具体思路。

常见問题

robots.txt 里的 Crawl-delay,能控制搜尋蜘蛛抓入口頁的速度吗

给蜘蛛池入口頁做限速时,很多人第一反應是在 robots.txt 里加一行 Crawl-delay,希望搜尋蜘蛛慢一点、稳一点。這一行到底有没有用,取决于對面是谁,也取决于你想解决的是什么問题。

Crawl-delay 是什么,谁會遵守

Crawl-delay 不是 robots.txt 的正式标准,而是早期被部分搜尋引擎引入的扩展指令,用来告诉爬虫两次請求之間至少間隔多少秒。寫法通常是在 robots.txt 里加一行 Crawl-delay: 秒數

實际情况是:

  • Google 明确不讀取 Crawl-delay。它對抓取节奏的控制来自自己的抓取预算和服務器响應反馈,這個值寫得再大也不會改變它的行為。
  • Bing 更倾向于使用站長後台里的抓取控制設定,robots.txt 中 Crawl-delay 的支持情况並不稳定。
  • Yandex 等少數爬虫會讀取並遵守這個字段。
  • 各類第三方爬虫、采集器的行為完全看實現,遵守與否無法预期。

所以如果你的蜘蛛池主要面對 Google,靠 Crawl-delay 限速基本等于没寫。

真正决定抓取节奏的是什么

搜尋蜘蛛决定“多久来一次、一次抓多少”,依據主要是這几件事:

  1. 站点整体的抓取價值與更新频率;
  2. 服務器對爬虫請求的响應速度和稳定性;
  3. 歷史抓取中是否出現大量超时、5xx、连接重置;
  4. 入口頁與目标頁的结构是否清晰、連結是否稳定。

換句话说,速度不是靠一行配置喊出来的,而是靠响應质量养出来的。你希望它慢一点,往往是因為服務器扛不住,那就應该從服務器侧解决,而不是指望爬虫自觉。

想主動限速,更可靠的做法

用 429 / 503 加 Retry-After

当入口頁所在服務器压力過大时,可以返回 429 或 503,並带上 Retry-After 响應头,告诉爬虫多久之後再来。主流搜尋引擎對這種信号是有反應的,會相應降低该目錄或站点的抓取速率。注意這是短期手段,長期返回 5xx 會拉低整体抓取量。

調整入口頁的數量與分布

如果入口頁成千上萬、内容高度雷同,抓取压力自然會堆积。與其限速,不如先减少低價值入口頁,把抓取预算集中到少數更新稳定、連結有效的頁面上。

保證响應時間稳定

把入口頁的 TTFB 控制在几百毫秒内,避免臃肿的 HTML 和同步外部請求,抓取节奏通常會自然變稳。

限速的目标不是让蜘蛛不来,而是让它来的时候不把服務器打垮。這两件事的解法完全不同。

几個常见誤区

  • 寫了 Crawl-delay 就以為生效。先確認来的是哪家蜘蛛,再判断這個字段有没有意义。
  • 數值寫得越大越好。對遵守的爬虫来说,寫 60 秒意味着它可能真的很少来,發現和抓取都會變慢;對不遵守的爬虫来说,寫多少都没用。
  • robots.txt 语法寫错。字段拼寫、大小寫、冒号後的空格都會影响解析,寫错等于没有。
  • 用 Disallow 入口頁来“限速”。禁止抓取和限制频率是两回事,Disallow 會让蜘蛛直接不去解析頁面里的連結,目标 URL 更难被發現。

怎么驗證有没有效果

看日誌最直接:按小时統計搜尋蜘蛛對入口頁的請求次數、並發數、平均請求間隔,以及 2xx / 3xx / 429 / 5xx 的比例。改動前後各观察一到两周,比凭感觉判断可靠得多。如果請求間隔没有變化,而對面又是 Google,那基本可以確認它没有讀你的 Crawl-delay。

结论:Crawl-delay 可以作為兜底配置寫上,但不要指望它控制 Google 的抓取节奏。真正的限速手段在服務器侧——稳定的响應、合理的入口頁數量,以及必要时的 429 與 Retry-After。