先分清:慢不會直接扣分,但會改變抓取节奏
爬虫在單位時間内能請求的 URL 數量是有限的。服務器响應變慢之後,同样的抓取窗口里能拿到的頁面會變少。對頁面數量多、更新频繁的站点,這會直接影响两件事:新 URL 被發現的速度,以及老頁面被重新抓取的周期。
所以更准确的说法是:响應慢不一定让某個頁面被拒绝收錄,但它可能让整站的抓取节奏變慢,進而让收錄的推進看起来“卡住了”。判断时要把這两层分開。
三個可以量化的观察点
1. 首字节時間(TTFB)
用 curl 的 -w 參數,或者從服務器訪問日誌里的 upstream 時間来看 TTFB。经驗上,動態頁面的 TTFB 控制在几百毫秒以内比較從容,持續超過 1 秒就值得查。這里要区分两種問题:慢但不报错,和超时、5xx、429。後者對抓取的影响通常更直接。
2. 日誌里的响應時間分布與狀態碼
- 統計 5xx、超时、429 在爬虫請求中的占比,哪怕只有百分之几也要單獨看;
- 看平均响應時間和 P95、P99,平均值正常但長尾很慢,同样會拖住抓取;
- 看慢請求集中在哪些 URL 上,是列表頁、搜尋頁,還是某個依赖外部接口的詳情頁。
3. 抓取频次與待抓取积压
如果响應變慢的時間点和“每日抓取量下降”“已發現但尚未抓取的 URL 持續堆积”大致重合,這三件事很可能同源。把時間线画出来,比單獨看某一天的报表更有说服力。
慢的常见来源,按排查顺序
- 資料库慢查询、缺少索引,或列表頁做了全表統計;
- 頁面渲染同步依赖第三方接口,對方一慢,HTML 就出不来;
- 没有缓存,每個請求都回源重算;
- 图片、CSS、JS 体积過大,對依赖渲染的頁面影响尤其明顯;
- 服務器带宽或並發连接數触顶,高峰期整体變慢。
可以做的几件事
- 给可缓存的頁面加缓存或做静態化,並設定合理的缓存头,让回源請求降下来;
- 把慢接口异步化或做降級,保證 HTML 主体先返回,次要模块後补;
- 用 CDN 分流静態资源,减少對源站的压力;
- 检查 robots.txt 有没有誤挡渲染所需的资源,導致爬虫拿到的内容不完整——這類問题常被誤当成“收錄問题”;
- 改完之後观察两到四周,對比抓取频次、待抓取积压和索引量的變化,別一两天就下结论。
不建议同时做太多動作
常见誤区是:一發現收錄不理想,就同时提高提交频率、反复改站点地图、放宽服務器限流。這些動作叠加在一起,會让資料更难归因。更稳妥的做法是先记錄基线,一次只改一到两項,留出足够的观察窗口。
响應變快不等于頁面就會被收錄。它只是让爬虫有机會多抓几個 URL。内容质量、URL 規范、重复内容、内鏈入口這些問题,仍然需要單獨排查。
小结
把“服務器變慢”当成一個獨立的、可量化的變量来测:TTFB、日誌里的响應時間與狀態碼分布、抓取频次與待抓取积压。先確認它們之間有没有時間上的關联,再决定是優化服務器,還是回头去查 URL 與内容层面的問题。這样比笼统地说“收錄變差了”更容易找到真正的原因。