狀態碼决定了蜘蛛對你的第一判断
入口頁的内容再好,如果服務器先返回一個错誤狀態碼,蜘蛛拿到的就是“這個頁面有問题”。在蜘蛛池里,狀態碼是比标题和正文更前置的信号,它决定了蜘蛛是繼續抓、暂时等待,還是直接把這條 URL 划掉。
200 與 3xx:被接受的两種形態
200 是最直接的。蜘蛛拿到内容、解析連結、繼續往下走,這是入口頁最理想的返回。
301 和 302 属于跳轉。301 表示永久搬迁,蜘蛛通常會把信任轉移到新地址,後續可能直接抓跳轉後的 URL;302 是临时跳轉,蜘蛛會保留原地址,但反复 302 會让人怀疑你只是想把蜘蛛引到別處。入口頁如果本身只是中轉,用 301 指向最终頁更干净;如果是短期換路径,用 302 也说得過去,但不要長期挂着。
404 與 410:都代表“没有”,但收尾节奏不同
404 意思是“我找不到這個地址”,蜘蛛會再来几次確認,如果一直 404,才會慢慢降低抓取频率並從索引里移除。410 是“永久刪除”,態度更明确,蜘蛛確認後收手更快。
在蜘蛛池里,真正需要区分的是“這個 URL 我暂时不要了”和“這個 URL 永遠不要了”。临时下线用 404 或 503 更合适,彻底放弃再用 410。反過来,如果只是把連結從入口頁删掉、URL 本身還返回 200,蜘蛛仍可能從歷史记錄里反复回来抓,這属于资源没有真正回收。
5xx 與 429:告诉蜘蛛“稍後再来”,但不能長期挂着
500、502、503 表示服務器临时出問题。蜘蛛遇到 5xx 一般會缩短重訪間隔、過一阵再来,短期内不會直接判死,但持續几天甚至几周都是 5xx,入口頁就會被大量降频。429 是“請求太多”,通常出現在你主動限流时。如果限流規則把搜尋蜘蛛也一起挡了,蜘蛛看到的就是 429,等于你在告诉它別抓了。
常见誤区
- 用 200 返回一個内容為空的頁面。狀態碼正常,但頁面没有可抓的東西,蜘蛛下次来的意愿會下降。
- 把所有異常都统一返回 404。本该临时维護的頁面直接宣告不存在,恢复後要重新积累信任。
- 入口頁整体 302 到主站。批量 302 容易被理解為跳轉作弊,還不如老老實實放内容或做 301。
- 限流只按 IP 或频率,不区分 UA。搜尋蜘蛛和普通爬虫被同等對待,誤伤几乎不可避免。
- 下线頁面直接返回 200 空頁。蜘蛛抓到的是一條“活着但没内容”的 URL,容易反复来。
實操建议
- 先给入口頁的狀態碼定一套規則:正常頁 200,永久迁移 301,临时维護 503 加 Retry-After,彻底废弃 410。
- 定期抽查狀態碼分布,尤其是那批“應该已经下线”的 URL,確認它們没有再返回 200。
- 限流和 WAF 放行搜尋蜘蛛的 UA 與 IP 段,避免把 429 送给不该送的對象。
- 5xx 要当成告警處理,连續出現在日誌里說明服務器或配置有問题,而不是等蜘蛛自己适應。
- 狀態碼、日誌、可抓内容三者要能對上:蜘蛛来了、拿到 200、拿到内容,這才算一次有效訪問。
狀態碼是入口頁的门牌。门牌寫错了,蜘蛛不是找不到,而是找错了地方。
把狀態碼理顺,不會立刻带来收錄或排名變化,但它能减少無效抓取、降低蜘蛛空跑的比例,让池子里的资源被更准确地判断。這部分属于基础工作,值得在扩建之前先做扎實。