蜘蛛来抓頁面时,服務器返回什么狀態碼,直接决定了它下一次還會不會来、来得有多勤。很多人只盯着 404 和 301,其實 403、429、503 這几個碼對抓取节奏和收錄進度的影响同样明顯,而且更容易被当作“服務器小毛病”忽略過去。
先按性质把狀態碼分一分
從抓取的角度看,常见返回可以分成三類:
- 内容類:200 正常返回,301、302 指向新地址,蜘蛛按正常流程處理。
- 拒绝類:403 禁止訪問、401 需要認證。這是明确的“不给你看”,不是临时故障。
- 临时類:429 請求過多、500、502、503、504。服務器当下给不出结果,理论上稍後會恢复。
這三類在蜘蛛眼里的含义完全不同,處理方式也應该分開。
403:更像是長期關门
403 常出現在两種情况:一是防火墙或 WAF 把蜘蛛的 IP 拦了;二是目錄權限配置出错,整站或静態资源都不给訪問。蜘蛛拿到 403 後不會反复硬闯,通常會降低對该目錄甚至整個站点的抓取频率。如果持續存在,已经進入索引的頁面也可能因為長期無法驗證而逐渐失去展示机會。所以看到日誌里成片的 403,先查拦截規則,別当成小事。
429:顯式限流,蜘蛛能看懂
429 是服務器主動说“你請求太多了”。主流蜘蛛识別到這個碼後會主動降速,這本身不算坏事。問题在于,如果站点長期對蜘蛛返回 429,抓取速率會被一直压在一個很低的水位,新頁面被發現和抓取的時間被拉長,這就是抓取预算被削掉的表現。比較合理的做法是给搜尋引擎蜘蛛單獨放宽限流,而不是和普通用戶共用同一套频率阈值。
另外,返回 429 时如果能带上 Retry-After 头,告诉對方多久之後再试,效果會比干巴巴地丢一個狀態碼好得多。
503:临时维護可以,長期不可用不行
計划内的停机维護,返回 503 並带上 Retry-After 是标准做法,短期几天一般不會造成收錄上的损失。風險在于“临时”變成常態:有些站点因為資料库压力大,随机對部分請求返回 503,這種不稳定狀態會让蜘蛛對站点质量打折扣,從而减少抓取。如果 503 是偶發的,最好在日誌里統計它的比例,而不是只看“有没有出現過”。
從日誌里该怎么看這几個碼
建议按下面的顺序看,避免被總數稀释掉問题:
- 先按狀態碼分组,看 403、429、5xx 各自占蜘蛛總請求的比例。
- 再看這些错誤集中在哪些目錄或哪些 URL 模板上,是全局還是局部。
- 看時間分布,是持續存在,還是集中在某個時間段,比如备份窗口、活動高峰。
- 對照同一时段的服務器负载與防護日誌,確認是配置問题還是容量問题。
几條可以落地的做法
- 给搜尋引擎蜘蛛單獨放行,不要让它和爬虫防護規則硬碰。
- 维護窗口尽量短,用 503 加 Retry-After,不要用 200 返回一個“维護中”頁面,那等于软 404。
- 429 的触發阈值按目錄区分,静態资源可以宽松,動態接口收紧。
- 修复之後別指望立刻恢复,抓取频率的回升通常需要一段观察期。
狀態碼不是给用戶看的装饰,它是蜘蛛判断“這個站值不值得再来”的直接依據。把 403、429、503 当成配置問题而不是内容問题来處理,往往比改十次标题更有效。