很多站点在核對抓取情况时,只看“昨天蜘蛛来了多少次”,却忽略了一個更基础的問题:在同样的抓取配額下,服務器實际能交付多少頁面。抓取量從来不是一個固定數字,它由蜘蛛愿意花的時間和你服務器的交付速度共同决定。响應越慢、頁面越大,單位時間内能抓完的 URL 就越少,未被抓取的队列就會越积越長。
抓取的本质是“時間分配”
搜尋蜘蛛在單位時間内能發起的請求數是有上限的,這個上限受限于它對该站点的抓取预算、连接並發數以及你服務器的承载能力。可以把整個過程想成一條传送带:传送带的速度不是由蜘蛛單方面决定的,你的响應速度直接决定了它每分钟能拿走多少個頁面。
因此,当我們讨论抓取量下降时,先別急着怀疑蜘蛛“不喜欢”新頁面,先看看平均响應時間和單頁体积是否發生了變化。
三個最容易被忽略的變量
1. HTML 体积與压缩
一個 300KB 的 HTML 和一個 80KB 的 HTML,在網絡传輸和解压环节花費的時間差距是實實在在的。常见問题包括:把大段 JSON 資料直接内联到頁面里、模板重复輸出冗余的 class 與 data 属性、未開啟 gzip 或 brotli 压缩。建议對主要模板做一次体积审計,看看是否有可以直接删掉的隐藏字段。
2. 首字节時間(TTFB)
TTFB 反映的是服務器從收到請求到吐出第一個字节的時間,它包含資料库查询、缓存命中、後端渲染等环节。TTFB 從 200ms 變成 1s,對單個用戶可能只是“稍慢”,但對蜘蛛而言意味着單位時間能抓的頁面數可能减少一半以上。未命中缓存的分類頁、需要實时統計的詳情頁、缺少索引的查询,都是 TTFB 的常见拖累項。
3. 连接與限速策略
有些站点為了“保護服務器”,在前端網關层對蜘蛛做了較激進的限速,结果每次請求都要重新建立连接,反而拖慢了整体吞吐。限速本身没错,但應基于真實负载資料设定,而不是拍脑袋给一個很小的並發值。
如何用日誌核對吞吐能力
不需要复杂的工具,把蜘蛛請求日誌按小时切分,就能看到大致趋势:
- 統計每個小时蜘蛛的請求總數,剔除 4xx、5xx 後的成功請求數。
- 計算响應時間的分布,重点看 P90、P95,而不是平均值——平均值常被少量快速静態請求拉低。
- 統計成功响應的總字节數與平均單頁字节數,观察是否在某次改版後明顯上升。
- 把“成功請求數 / 小时”與“平均响應時間”画在同一張图上,看两者是否呈明顯的反向關系。
- 對比不同目錄:如果某個栏目抓取量長期偏低,但响應時間正常,那問题可能出在入口结构而非性能。
常见誤判
- 把 5xx 当成唯一問题:大量 200 但响應很慢的請求,同样在消耗抓取時間。
- 只看總請求數:總請求數上涨可能只是 404 或參數頁變多,有效抓取並未增加。
- 忽略缓存命中率:蜘蛛訪問的往往是被缓存過的頁面,若缓存频繁失效,性能資料會失真。
- 用压测结果代替真實日誌:压测环境没有真實的蜘蛛訪問模式,參考價值有限。
抓取量的天花板,往往不是蜘蛛给的配額,而是你自己的响應速度。
優化顺序建议
如果確認是交付速度拖累了抓取,建议按“先降低單頁成本,再提升並發能力”的顺序處理:先做 HTML 体积削减與静態资源清理,再检查缓存策略與資料库慢查询,最後才考虑調整並發與限速參數。改動前後各留一段日誌做對比,避免把波動誤判成優化效果。
另外,性能改善不會立刻轉化為抓取量提升,通常需要观察數天到數周,因為蜘蛛的抓取节奏存在惯性。保持服務器稳定、响應一致,比短期内的爆發式加速更有意义。