蜘蛛抓取一個 URL 的過程,本质上是一次 HTTP 請求。站点响應得快,它就能在同样的時間里多走几個頁面;响應得慢、频繁报错,它會自然地把抓取节奏降下来。很多“抓取量突然掉了一半”的情况,最後追到的不是 robots 或 Sitemap,而是服務器在那几天變慢或開始大量返回 5xx。
慢和错,蜘蛛的處理方式不一样
响應慢(比如 3 秒以上)通常不會让蜘蛛立刻放弃,但它會降低對整站的抓取频率,因為單位時間内能完成的請求變少了。持續超时才會中断连接,這類請求在日誌里往往看不到完整的狀態碼,只留下中止的记錄。
而 5xx 是另一個信号。蜘蛛會把服務端错誤理解為“這台服務器現在不适合被打扰”,于是缩短抓取間隔、减少並發。如果整站大面积 500,抓取量可能在几天内明顯下滑;恢复稳定後,通常需要一段時間才會回到原来的水平。
- 连接中断:多為超时,检查慢查询、慢接口和外部依赖。
- 500 / 502 / 503:服務端或網關错誤,優先看應用日誌與回源情况。
- 429:主動限流的返回值,用過头反而會被当作持續拒绝。
- 200 但内容為空:蜘蛛拿到了頁面,却讀不到有效内容,同样浪費一次抓取。
抓取窗口與业務高峰撞在一起
很多站点的慢不是全天候的慢,而是集中在几個时段:早上發布、白天促销、夜間跑批量任務。蜘蛛的抓取分布也有起伏,如果两者重叠,日誌里就會出現一批响應時間偏高的抓取记錄。
判断标准可以很简單:把日誌按小时切分,看每個时段蜘蛛請求的 P95 响應時間和 5xx 比例。哪几個小时明顯變差,問题就在那几個小时。
常见的處理思路是错峰,而不是硬抗:把全站重建、資料同步、图片压缩這類重任務挪到抓取低谷;對蜘蛛频繁訪問的列表頁、分類頁做缓存或静態化;把動態查询的落地頁尽量提前生成。
让慢接口不拖累整站
蜘蛛抓取的是 URL,一個慢接口可能被包装成很多個 URL。如果詳情頁要實时調用库存、推荐、评论三個外部服務,任何一個抖動都會让整批頁面變慢。把它們從首屏渲染路径里挪出去,或者降級為兜底内容,對抓取稳定性的帮助往往比調服務器配置更直接。
CDN 和反向代理在這里能分担一部分:静態资源、图片、已经生成好的 HTML 交给邊缘节点,回源請求就會少很多。但要注意邊缘节点缓存了舊版本或者错誤頁时,蜘蛛看到的就是那份内容,必要时通過刷新缓存来處理。
一份可执行的检查顺序
- 從日誌里筛出蜘蛛 UA 的請求,統計狀態碼分布、响應時間分布。
- 把 5xx 按 URL 归類,看是集中在少數接口還是全站。
- 核對 robots.txt 返回是否正常——robots 本身报错也可能影响抓取。
- 检查最近的發布、配置變更、證书更新是否與異常時間点重合。
- 確認恢复稳定後,观察日誌里的抓取量而非後台指标,给它几天時間。
服務器稳定性不是“越快越好”的問题,而是“別让蜘蛛白跑”的問题。响應稳定、错誤少、内容能一次讀全,抓取节奏自然會保持在合理的水平。