站点运营

站点运营:HTTP 狀態碼分布自查,別让 404 和 5xx 白白吃掉抓取预算

狀態碼分布是抓取预算最容易被浪費的地方。本文介绍如何從服務器日誌統計 200、301、302、404、5xx 的比例,抽样驗證異常 URL,處理软 404、临时跳轉長期使用、登入頁消耗抓取等問题,並给出處理優先級,让每個被抓取的地址都有明确回應。

站点运营

站点运营:HTTP 狀態碼分布自查,別让 404 和 5xx 白白吃掉抓取预算

抓取预算听起来抽象,但在服務器日誌里它非常具体:蜘蛛一天来過多少次、抓走了多少個 URL、其中多少是白跑的。狀態碼分布是最容易暴露浪費的一項指标。做一次狀態碼自查,常常不用改一個字的内容,就能让有限的抓取額度落到真正有價值的頁面上。

狀態碼自查到底在看什么

很多人把這件事等同于“检查有没有死鏈”,其實范围要大一些。要看的是整站返回碼的构成比例,以及每種返回碼背後對應的頁面類型。

  • 200:正常返回,但數量異常偏高的目錄值得警惕,可能是參數頁、篩選頁被大量生成。
  • 301 / 308:永久跳轉,用對了是好事,用错了會把權重和抓取引到错誤的地方。
  • 302 / 307:临时跳轉,長期使用等于告诉搜尋引擎“原地址仍是主版本”。
  • 404 / 410:内容确實不存在,410 表達更明确,但不必為了用 410 而大動干戈。
  • 5xx:服務端错誤,蜘蛛會認為站点不稳定,抓取频率可能被主動下調。

三步做一次狀態碼普查

  1. 統計分布:從訪問日誌中按狀態碼分组,看每類占比,並挑出返回次數最多的前几十個 URL。
  2. 抽样驗證:對可疑 URL 手動訪問或寫脚本批量請求,確認返回碼與頁面實际内容是否一致。
  3. 分類處理:把每個異常 URL 归入“该保留、该跳轉、该刪除、该修复”四類,再動手改。

統計时注意两点

一是日誌里混着爬虫和真實用戶,先按 UA 分開看,否則结论會被自己的监控程序干扰。二是要区分“一次性出現”和“持續出現”,偶尔的 500 大多是抖動,连續几天同一路径报错才是問题。

驗證时別只看首頁

列表頁翻到第 50 頁、詳情頁的最後一個參數、已下架商品的老連結,這些地方最容易出現異常返回碼,也最容易被忽略。

几個高频的坑

软 404:内容没了,頁面還在

頁面返回 200,但正文位置寫着“该内容已刪除”或只剩一個空壳模板。這種情况比硬 404 更麻烦,因為蜘蛛會認為這是一個有效頁面並持續回訪。處理方式通常是让它返回 404,或者跳轉到真正相關的新頁面。

把 302 当 301 長期用

改版、換域名之後临时加了一條跳轉,後来忘了改。短期没問题,長期會让搜尋引擎一直拿不准哪個地址才是主版本。確認不再回退的跳轉,就換成永久跳轉。

登入頁和驗證碼跳轉

需要登入才能看的頁面被蜘蛛抓到,通常會被 302 送去登入頁。如果這類 URL 數量很大,等于白白消耗抓取预算,用 robots.txt 或權限控制挡掉更合适。

5xx 被当成“過一會儿就好”

網關超时、資料库连接失敗、後端進程被重啟,都會产生 5xx。偶發可以接受,但如果某個目錄持續报错,先修服務端,再谈内容優化。

處理时的優先級

先止血,再清理,最後才是優化。持續报 5xx 的路径優先修;被大量抓取的错誤跳轉其次;長期存在、無人訪問的老 404 可以放到队列後面慢慢處理。

動手之前先备份跳轉規則和路由配置。批量刪除或批量改寫跳轉,很容易顺手把正常頁面一起誤伤。

把它變成常規動作

狀態碼不會一直保持正常。每次上线新功能、改版目錄结构、下线舊栏目之後,都可以顺手跑一遍統計。频率不用太高,每月一次,或者大改動之後一次,就足以發現大多數問题。真正的價值不在于消灭所有 404,而在于让每一個被蜘蛛訪問的地址,都有一個说得清楚的答案。