蜘蛛每天要跑大量站点,遇到连接超时、502、DNS 抖動是再平常不過的事。對站点来说,真正需要關心的不是“有没有失敗”,而是失敗之後蜘蛛會怎么處理:這個 URL 是暂时跳過,還是被長期放到一邊。
先分清两類失敗
蜘蛛拿到的失敗信息不同,後續動作完全不同。
- 临时性失敗:连接超时、5xx、TLS 握手失敗、DNS 解析不到。這類通常會被标记為“稍後再试”,URL 仍然留在待抓队列里。
- 确定性失敗:404、410、明确的 4xx 拒绝。這類一般不會反复重试,抓取频率會快速归零。
- 被拒绝:401、403、429。蜘蛛會把它理解為“現在不方便”,通常不會立刻放弃,但會明顯降低试探频率。
重试是带退避的,不是马上再来一次
單個 URL 的重试間隔
同一條地址连續失敗,蜘蛛會拉長重试間隔:几分钟、几小时、几天,甚至更久。間隔跟着失敗次數增長,這就是退避。所以“刚才還报错,一分钟後就好了,為什么還不来抓”這種疑問,答案往往是重试窗口還没到。
主机級別的降频更值得警惕
如果同一台服務器上大量 URL 同时超时,蜘蛛判断的就不是“某個頁面坏了”,而是“這個站点現在不稳定”,于是把整個域的抓取节奏調慢。這时候受影响的頁面遠不止出错的那几個,表現就是整体抓取量一起往下掉。
失敗记錄會保留多久
- 临时失敗:修复並返回正常的 200 後,基本在下一次正常調度窗口就能恢复,不需要額外操作。
- 持續多轮的 5xx:恢复時間會被拉長,需要连續几次稳定成功的响應,才能把抓取节奏重新拉回来。
- 404、410:不會因為“等一等”自己回来,只能通過連結或 Sitemap 重新把 URL 交出去。
修复之後怎么让它更快回来
- 先確認响應碼确實是 200,而不是带错誤提示内容的“伪 200”。
- 確認服務器、CDN 没有再對蜘蛛 UA 或蜘蛛 IP 段做特殊拦截。
- 用站内連結把修好的頁面重新指向一次,让它處在可發現路径上。
- Sitemap 里保留该 URL 並更新 lastmod,不要删掉再加回来。
- 不要短時間内反复手工提交同一個地址,這不會加快重试,反而增加噪音。
容易被忽略的几種“假失敗”
- CDN 回源超时:源站日誌里看不到這次請求,但蜘蛛拿到的是 5xx。
- WAF 把蜘蛛 IP 段誤判為異常流量,返回 403 或驗證頁。
- HTTP/2 或 TLS 配置問题,只在部分线路或部分客戶端上失敗。
- 站点在维護窗口统一返回 503,却没有给出明确的重试提示。
這些情况下源站“看起来没問题”,但抓取确實在掉,需要從 CDN、WAF 日誌和蜘蛛侧返回碼两头對照排查。
把稳定性当成抓取的一部分
抓取节奏本质上是蜘蛛對站点稳定性的判断。90% 的請求正常、10% 超时,和 100% 正常但响應偏慢,是两種不同的信号:前者更像“不可靠”,後者只是“慢”。宁可整体慢一点但稳定,也不要忽快忽慢、时不时抛错。
與其研究怎么让蜘蛛多来几次,不如先保證它每次来的时候,都能拿到一個干净的 200。
可以定期看一下服務器日誌里蜘蛛請求的响應碼分布,重点盯 5xx 和超时的占比。這個數字比抓取總量更能說明問题,也更容易在抓取量真正下滑之前先發現苗头。