入口頁的 HTTP 狀態碼,是搜尋蜘蛛在讀到 HTML 之前拿到的第一個信号。同样是“頁面能打開”,返回 200 和返回 404,蜘蛛後續的動作可能完全不同。所以当目标 URL 迟迟没被發現时,先看响應头,往往比先看正文更省時間。
狀態碼决定的不是“抓不抓”,而是“抓完之後怎么用”
搜尋蜘蛛請求一個 URL,拿到狀態碼後大致會做两件事:一是决定這個 URL 本身要不要進索引,二是决定還要不要繼續解析這份响應体里的連結。這两件事经常被混在一起谈,其實是分開判断的。一個頁面完全可以“不收錄”,同时“里面的連結照样被跟進”。
几類常见狀態碼下的實际表現
200 與 304
200 是正常路径。304 表示内容未變化,蜘蛛會沿用缓存里的版本,缓存中已有的連結依然算已發現。反過来,如果入口頁長期返回 304,而連結是後来才加上去的,蜘蛛可能短時間内看不到新增連結。這时更新一下頁面内容或改動静態參數,會更直接。
301 與 302
301 會传递權重並让蜘蛛按新地址繼續,但跳轉鏈越長损耗越大,也更容易在某一环断掉。302 表示临时跳轉,蜘蛛一般仍會解析,只是對“最终地址”的判定没那么确定。把入口頁做成跳轉頁时,最好不要在跳轉之後才放目标連結。
404 與 410
這两個狀態碼意味着頁面本身不會被收錄。不過蜘蛛在抓到内容後,通常還是會解析响應体里的連結,所以挂在 404 頁面上的目标連結,仍有机會被發現。問题在于這類頁面不會長期被重复抓取——一旦蜘蛛確認它是 404,之後可能就不再来了,連結的持續曝光也就没了。410 比 404 更明确,放弃得更快。
403 與 401
被拒绝訪問时,蜘蛛拿不到响應体,自然也讀不到里面的任何連結。有些站点的防護策略會對異常 UA 或高频請求直接返回 403,而站長在浏览器里訪問一切正常,很容易誤判成“頁面没問题,是蜘蛛不来”。這種要结合日誌里的狀態碼一起看。
429 與 503
這两個属于“暂时別来”。蜘蛛一般會降低對该站点的抓取频率,過一段時間再试。短時間的 503 影响有限,但如果入口頁反复超时或频繁 503,整站的抓取配額都會被压下去,表現就是同一批連結的抓取間隔越来越長。
排查顺序
- 用命令行或抓包工具,以搜尋蜘蛛的 UA 請求入口頁,记錄狀態碼和响應头。
- 確認响應体里确實有目标連結,而不是靠 JS 後置插入。
- 對照訪問日誌,看蜘蛛拿到的是哪個狀態碼。日誌和實测不一致,通常是 CDN、WAF 或 UA 判断在中間改了响應。
- 如果是 3xx 且鏈路過長,把目标連結直接放到最终頁面上。
- 如果是 4xx 或 5xx,先解决可用性,再谈連結發現。
几個容易忽略的细节
- 软 404:返回 200 但内容是一句“頁面不存在”,蜘蛛照样可能判定為無效頁面,連結價值被削弱。
- 狀態碼與正文矛盾:返回 200,正文却是错誤提示頁,長期如此會影响整体质量评估。
- 只對蜘蛛返回不同狀態碼:這類差异一旦被识別,風險由入口頁自身承担,不一定只影响這一個頁面。
- 日誌里的狀態碼:注意区分蜘蛛請求和普通用戶請求,两者常常走的是不同的缓存节点。
狀態碼解决的是“能不能被正常讀取”,連結能不能被發現只是其中一环。入口頁可用、响應稳定、連結真實存在,這三件事都做到了,剩下的交给時間和抓取节奏。