入口頁返回什么狀態碼,比頁面里寫了什么更容易被蜘蛛先看到。蜘蛛拿到响應後,第一步不是解析正文,而是根據狀態碼决定“這個 URL 還要不要再来看”。狀態碼配错,影响的往往不是一次抓取,而是後續很長一段時間的抓取节奏。
狀態碼在蜘蛛眼里的含义
可以粗略理解為一句话:狀態碼决定了 URL 在索引里的去留,以及蜘蛛還會不會回来。
- 200:正常内容,蜘蛛會繼續抓取並解析。
- 301 / 308:永久跳轉,索引信号會逐步轉移到新地址。
- 302 / 307:临时跳轉,蜘蛛一般保留原地址,但會跟随跳轉。
- 401 / 403:訪問被拒,蜘蛛通常不認為頁面消失,但可能降低訪問频率。
- 404 / 410:頁面不存在,索引會被移除,410 的信号更明确。
- 429:請求過多,蜘蛛會主動降速。
- 5xx:服務端出错,蜘蛛当成临时問题並安排重试。
5xx 是最容易被忽略的坑
很多人以為 5xx 只是“這次抓取失敗”,下次再来就好。實际影响更大:蜘蛛把 5xx 视為服務端不健康,會整体調低對站点的抓取速度,甚至暂时减少發現新 URL 的频率。如果入口頁因為資料库连接、程序超时或後端接口抖動而間歇性返回 500,抓取量往往會在几天内明顯下滑,而错誤日誌里可能只有零星的異常记錄。
需要注意的是,入口頁做 302 跳轉到正常頁面並不算错誤,但如果跳轉鏈太長、最终落到 5xx,蜘蛛看到的就只是一次失敗。
软 404 更隐蔽
還有一種情况:服務器返回 200,但頁面内容是“该内容不存在”“已下架”之類的提示頁。這種软 404 會让蜘蛛把無效内容当成正常頁面收進去,浪費抓取预算,也让真正有價值的入口頁资源被無效 URL 挤占。判断方法很简單:返回 200 的入口頁里,正文是否真的有獨立内容。
429 與硬拦截不是一回事
429 是“請求太多”,属于约定内的礼貌拒绝;而 WAF 直接返回 403 或直接断開连接,蜘蛛只會理解為訪問被拒。前者會自降速,後者可能让蜘蛛减少訪問甚至放弃。如果确實需要限流,優先用 429 並给出合理的重试間隔。
實践中的處理建议
- 對入口頁集合做定期抽样請求,核對狀態碼與预期是否一致。
- 监控 5xx 比例,超過阈值先查後端稳定性,而不是急着加新域名。
- 确定不再使用的入口頁,用 404 或 410 明确表態,不要長期挂 200 空壳頁。
- 跳轉尽量一步到位,避免多級 302 串联。
- 把狀態碼纳入日誌巡检,並和蜘蛛 UA 一起看,才能分清是蜘蛛抓取失敗還是真實用戶訪問失敗。
狀態碼是入口頁對蜘蛛说的第一句话。這句话说清楚,後面的内容、结构和連結才有被看到的机會。
狀態碼本身不复杂,难的是長期保持稳定。入口頁數量越多,越需要一個统一的响應規范,避免個別程序把整站的抓取节奏拖慢。