给蜘蛛池入口頁做限速时,很多人第一反應是在 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 限速基本等于没寫。
真正决定抓取节奏的是什么
搜尋蜘蛛决定“多久来一次、一次抓多少”,依據主要是這几件事:
- 站点整体的抓取價值與更新频率;
- 服務器對爬虫請求的响應速度和稳定性;
- 歷史抓取中是否出現大量超时、5xx、连接重置;
- 入口頁與目标頁的结构是否清晰、連結是否稳定。
換句话说,速度不是靠一行配置喊出来的,而是靠响應质量养出来的。你希望它慢一点,往往是因為服務器扛不住,那就應该從服務器侧解决,而不是指望爬虫自觉。
想主動限速,更可靠的做法
用 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。