蜘蛛進到入口頁的第一件事不是讀内容,而是看服務器返回的狀態碼。這個三位數字决定了它接下来是繼續解析 HTML、顺着 Location 头跳走,還是把這條 URL 记進「暂时不再来」的名單。很多蜘蛛池看起来铺了大量入口頁,實际能被正常抓取的却没几個,問题往往就出在狀態碼上。
狀態碼在蜘蛛眼里的基本分類
可以把狀態碼理解成蜘蛛和服務器之間的第一句對话,不同区間代表完全不同的態度:
- 2xx:請求成功,蜘蛛會繼續解析頁面内容,並從中提取連結。
- 3xx:内容在別處,蜘蛛會按 Location 头繼續請求新地址。
- 4xx:资源不存在或請求方有問题,蜘蛛會逐步降低该 URL 的訪問频率。
- 5xx:服務器自身出错,属于临时狀態,但持續出現會被当成站点不稳定。
- 429:明确的限速信号,蜘蛛通常會退让一段時間再来。
200 不等于這個頁面有價值
最容易被誤讀的是 200。服務器只要没报错就返回 200,但蜘蛛拿到的是一個空壳頁面、一個只有几行占位文字的模板頁,還是一個真正能讀的入口頁,它的判断完全不同。
软 404:狀態碼 200,内容却是空頁
入口頁因為采集失敗、模板渲染異常或資料库查询為空,最终輸出了一篇没有正文的頁面,狀態碼却仍是 200。蜘蛛會把它当作正常頁面抓走,但抓完之後很难判断主题,回訪意愿自然下降。检查方法很简單:随机抽几十個入口頁,統計去掉标簽後的正文字數,如果相当比例低于一两百字,先別急着加量。
301 和 302:跳轉鏈越長,损耗越大
入口頁把蜘蛛引向目标頁,靠的就是跳轉。這里有几個常见的坑:
- 跳轉鏈過長:A 跳 B,B 跳 C,C 再跳 D。蜘蛛會跟,但每一步都在消耗抓取预算,鏈尾頁面被完整抓到的概率明顯下降。
- 把 302 当 301 用:临时跳轉長期存在,蜘蛛會反复回来確認原始地址,浪費回訪次數。
- 跳到不相關域名:入口頁讲一個主题,跳過去却是完全無關的站点,這條連結的信任分會打折。
- 跳到 4xx 或 5xx:等于把蜘蛛带進死胡同,反复几次之後入口頁本身也會被降频。
经驗上,從入口頁到目标頁的跳轉最好控制在两跳以内,並且全鏈路都以 200 收尾。
404 與 410:让蜘蛛放弃也要讲方式
入口頁下线了,有人直接删文件返回 404,有人返回 410,两者都能让蜘蛛移除记錄,410 的態度更明确一些。問题在于蜘蛛池里的入口頁多是批量生成的,下线时如果只是停掉域名、让請求一直超时,蜘蛛拿到的是连接错誤而不是 404,它既不會清理舊记錄,也不會把這條 URL 归入已消失,只會不断重试。
建议下线时留一個明确的 404 或 410 响應,並保持一段時間,等抓取日誌里该路径的請求明顯减少,再彻底關閉。
403 和 5xx:最容易被忽略的减分項
403 通常来自防火墙、防盗鏈規則或權限配置,蜘蛛看到它會理解為這個地址不欢迎抓取,長期持續可能影响整站抓取。5xx 則是服務器過载、資料库连接失敗、脚本超时等問题的表現。偶尔几次没關系,但如果抓取日誌里 5xx 的比例長期偏高,蜘蛛會主動降低對這個站点的抓取频率,這时候入口頁铺得多反而是负担。
429 與 503:限速时的正确表達
服務器扛不住时,直接超时或断開连接是最差的選擇。更好的做法是返回 429 或 503,並在 Retry-After 头里给出建议等待秒數。蜘蛛多數會參考這個提示,退让一段時間再来,既保住了服務器,也保住了抓取關系。
日常排查怎么做
- 從訪問日誌里按狀態碼分组統計,先看 4xx 和 5xx 的占比。
- 抽一批返回 200 的入口頁,检查正文長度和主题是否正常。
- 跟踪一條完整鏈路:入口頁到跳轉到目标頁,確認每一跳的狀態碼。
- 把長期没有抓取、狀態碼又異常的入口頁整理出来,决定修复還是下线。
- 每次批量上线新入口頁後,隔几天再复查一次狀態碼分布。
狀態碼解决不了蜘蛛来不来的全部問题,但它是成本最低的一道检查。入口頁铺量之前先把這道關守住,後面看抓取日誌时才不會被一堆無意义的报错淹没。