抓取预算是有限的,响應耗时是主要消耗項
讨论抓取問题时,大多數人的注意力放在内鏈、Sitemap、robots 這些「入口层」的事情上。但還有一個更基础的因素容易被忽略:每一次抓取,蜘蛛都需要等待服務器把内容返回。等待的時間越長,同一個時間窗口内能完成的抓取次數就越少。也就是说,慢响應和入口缺失,最终表現都是抓取量不足,但成因和修法是两回事。
如果你的站点内鏈完整、Sitemap 正常、robots 也没挡错,抓取量却始终上不去,不妨先把服務器响應耗时這一項排查清楚。
一、响應耗时是怎么消耗抓取机會的
蜘蛛的抓取並發通常是有限度的。一次請求從建立连接到拿到首字节,這段時間都算在「占用」里。可以把它理解成一條传送带:站点返回得快,單位時間能過的請求就多;站点返回得慢,队列周轉速度就被拖住。
- 列表頁、聚合頁、搜尋结果頁如果每次都要實时查询,耗时往往最長;
- 未命中缓存的請求,通常比命中缓存慢一個數量級;
- 少數几個常年很慢的 URL,會反复出現在抓取队列里,持續占用額度。
需要說明的是,抓取調度本身還受站点權重、内容更新频率、歷史抓取质量等多因素影响,响應耗时只是其中一环,改善它並不保證抓取量立刻上升。
二、先看清楚哪几個信号
- TTFB 的分布,而不只是平均值。平均值會被大量快請求掩盖,建议看 P75、P95;
- 超时與连接中断的比例,以及它們集中在哪些路径;
- 5xx、502、504 出現的时段,是否與流量高峰或定时任務重合;
- 同一個 URL 多次被訪問时,耗时是否稳定,還是忽快忽慢;
- 是否所有慢請求都落在同一台後端、同一個接口或同一類參數上。
把這几項和一两個月的服務器日誌對照着看,通常能很快判断問题是「全站都慢」還是「某些模板慢」。
三、常见成因
1. 後端查询與聚合逻辑過重
分類頁需要跨表統計、需要按條件排序或調用多個接口拼装資料时,單次請求耗时會明顯拉長。
2. 缓存层缺失或命中率低
缓存键设計過细、缓存時間過短、频繁被參數击穿,都會让缓存形同虚设。
3. 動態渲染與首屏等待
依赖客戶端渲染再回填内容,或服務端渲染时同步等待外部接口,都會把响應時間推到几百毫秒以上。
4. 頁面與静態资源共用同一入口
图片、附件不经過 CDN,直接由應用服務器輸出,會挤占 HTML 的响應能力。
5. 连接與限流策略過紧
每次請求重新握手、並發阈值設定過低,都會让抓取效率打折,但這一項要谨慎調整。
四、排查顺序建议
- 先抽样實测,從不同栏目各取若干條 URL,区分是入口頁慢還是全站慢;
- 對比命中缓存與未命中缓存的耗时差异;
- 把 HTML 與静態资源的响應時間分開統計,避免互相干扰判断;
- 回到服務器日誌,核對蜘蛛請求的狀態碼、耗时與請求路径的對應關系;
- 調整後再按周观察回訪频率與抓取覆盖面,不要只盯着單日資料下结论。
五、可以優先動手的几件事
- 给列表頁與栏目頁加短周期缓存,时長按實际更新频率设定;
- 把慢接口改為异步計算或预生成,避免在請求鏈路上實时等待;
- 静態资源交给 CDN,让應用服務器专注輸出 HTML;
- 開啟连接复用,减少重复握手带来的固定開销;
- 在限流配置上给已知爬虫留出合理余量,但仍需防止異常流量放大。
响應耗时的改善通常不會立刻反映為抓取量上升。建议以两到四周為單位做前後對比,同时排除内容更新频率變化、站点结构調整等干扰因素,否則很容易把正常波動誤判成優化生效。
结语
把响應耗时纳入日常巡检,和 Sitemap、内鏈结构、robots 規則放在同一張检查表上,才能判断抓取問题究竟出在「入口没被發現」,還是「入口被發現但抓不動」。前者要补連結和提交渠道,後者要回到服務器和缓存上找答案,方向對了,排查效率會高很多。