搜尋抓取

蜘蛛抓取频次與站点承载:把抓取节奏調到服務器扛得住的范围

蜘蛛抓取频次太高會压垮服務器,太低又让新頁面迟迟進不了抓取路径。本文從服務器日誌判断抓取高峰與响應時間,讨论 429、Retry-After、crawl-delay 以及静態资源分担等限速做法,並說明如何把内容更新节奏與抓取节奏错開,让抓取安排更稳定。

搜尋抓取

蜘蛛抓取频次與站点承载:把抓取节奏調到服務器扛得住的范围

站点运营里常有一種矛盾:内容更新後希望蜘蛛尽快来抓,服務器负载高时又希望它慢一点。抓取频次並不是越高越好,也不是越低越安全,關键在蜘蛛的抓取节奏和站点實际能承受的容量是否匹配。节奏對不上,要么新内容迟迟不進入抓取路径,要么服務器在抓取高峰时响應變慢,连正常用戶訪問都受影响。

抓取频次的两端:太慢與太快都不理想

蜘蛛来得太慢,新發布的頁面可能要等上几天甚至更久才被發現和抓取;来得太快,尤其是站点有明顯抓取高峰时,動態查询和資料库压力會集中出現。两種情况的處理方向不同,所以第一步不是急着去調频,而是先判断站点現在處在哪一端。

先從服務器日誌里看清抓取节奏

日誌能回答几個關键問题:蜘蛛一天来多少次、集中在哪些时段、單次請求的响應時間是多少、並發請求峰值有多高。把這些資料拉出来看一周,通常會看到明顯的規律。

  • 抓取时段分布:是否集中在凌晨,還是與用戶訪問高峰重叠;
  • 單次响應時間:動態頁面是否经常超過 500 毫秒甚至更多;
  • 並發峰值:同一秒内有多少個蜘蛛請求同时到達;
  • 狀態碼构成:抓取請求里 5xx、429、404 各占多少。

如果並發峰值时段的响應時間明顯變長,說明限制因素在服務器一侧,而不是蜘蛛抓得不够。

慢响應比抓得少更值得關注

蜘蛛的抓取节奏部分取决于站点的响應速度。响應越慢,同样的抓取量需要更長時間,蜘蛛往往會降低並發或延後抓取,结果是新 URL 排在队列里迟迟不被處理。也就是说,服務器慢不只是体驗問题,還會間接把 URL 從發現到抓取之間的等待拉長。

優化方向通常比較朴素:给動態頁面加缓存、压缩資料库查询、把静態资源交给 CDN、避免在頁面里做大量同步遠程調用。响應時間降下来,抓取效率往往跟着改善。

主動調节抓取速率的几種做法

用 429 和 Retry-After 表達稍後再来

当站点确實忙不過来时,返回 429 Too Many Requests 並带上 Retry-After 响應头,比直接返回 5xx 更明确。5xx 容易被理解為站点故障,蜘蛛可能降频更久;429 更多被当作临时限流信号。不過 429 也不宜滥用,長期大量返回同样會影响抓取安排。

crawl-delay 的适用邊界

robots.txt 里的 crawl-delay 主要被部分搜尋引擎支持,主流搜尋引擎基本不依赖它来調节抓取速率。寫它可以作為补充,但不宜当成唯一的限速手段。

把静態资源分出去

图片、CSS、JS 也在抓取范围内。把静態资源放到 CDN 或獨立域名,可以减轻主站服務器的抓取压力,也让蜘蛛抓取頁面时不必等主站慢慢返回每一個附属资源。

把更新节奏和抓取节奏错開

批量發布内容时,如果所有頁面同时更新,容易形成一次集中的抓取高峰。可以分批發布,或者先更新入口頁和栏目頁,再逐步放出詳情頁;新頁面更新後通過 Sitemap 或站点地图入口通知蜘蛛,让抓取更分散。

限速和降频只能改變抓取节奏,解决不了内容本身更新少、结构乱的問题。站点稳定、结构清晰,抓取安排才更容易進入正常狀態。

持續观察比一次性調整更重要

速率調整不是一劳永逸的設定。内容量、頁面复杂度、服務器扩容都會改變可承受的抓取量。建议定期看抓取請求數、平均响應時間和狀態碼分布這三項,出現異常變化时再决定是否調整,不必频繁改動配置。