蜘蛛抓取入口頁时,最先拿到的不是頁面内容,而是 HTTP 狀態碼。它决定了蜘蛛接下来是解析 HTML、跟随跳轉,還是直接放弃這條 URL。很多入口頁看起来正常,却迟迟没有後續動作,問题就出在返回碼和跳轉鏈上。
狀態碼先按處理方式分三類
不用背全表,按蜘蛛的後續動作分三類就够了。
- 可抓取類:200、203 等,蜘蛛會繼續解析頁面並提取其中的連結。
- 跳轉類:301、302、307、308,蜘蛛會跳到新地址,但能否稳定地把發現路径延續下去,取决于跳轉是否固定、是否成鏈。
- 拒绝類:404、410、403、429、503,蜘蛛會降低甚至暫停對這個地址的訪問。
容易被忽视的几種寫法
把 302 当成 301 用
入口頁長期用 302 指向另一條路径,蜘蛛會持續把它当成临时狀態,發現鏈路變得不稳定。如果地址已经确定不再變化,應換成 301;如果只是灰度或 A/B 測試,尽量让每條路径都能獨立返回 200,而不是靠跳轉兜底。
软 404
頁面返回 200,正文却寫着内容不存在或已下架。這種软 404 蜘蛛無法從狀態碼识別,會繼續把這條 URL 留在待抓队列里反复回訪,占用抓取配額。要么真返回 410,要么把頁面补成有實际内容的落地頁。
503 與 429 的誤用
有些入口頁在负载高时统一返回 503,但响應头里没有 Retry-After。蜘蛛只能按自己的节奏重试,连續失敗几次後,往往會下調整個站点的抓取频率。如果确實需要临时挡一下,建议带上 Retry-After,並尽量缩短持續時間。
跳轉鏈的長度
從入口 URL 到最终落地頁,跳轉最好控制在一次以内。两次以上會带来两個問题:一是中間环节的處理存在不确定性,二是每一跳都要重新建立连接,抓取效率下降。常见的情况是 http 到 https、带 www 到不带 www、舊路径到新路径三段叠加,實际抓取时只走到第二跳就停了。
可以用命令行工具或抓取工具查看完整跳轉鏈,確認跟到最後拿到的狀態碼是 200,而不是某個中間頁返回的 302。
一份自查清單
- 入口頁直接訪問返回 200,不依赖跳轉才能看到内容。
- 跳轉只保留必要的一跳,並且使用 301。
- 确實不存在的路径返回 410 或 404,不用 200 頁面代替。
- 临时维護使用 503 加 Retry-After,並尽快恢复。
- 定期抽查訪問日誌,確認蜘蛛拿到的是预期狀態碼。
狀態碼本身不會让頁面被收錄,但它决定了蜘蛛是否愿意繼續往下走。把返回碼和跳轉鏈處理干净,是入口頁最基础、也最容易被跳過的一步。