站点运营

站点运营:狀態碼自查,別让 200 兜底把失效頁面藏起来

狀態碼是服務器给爬虫的第一句话,比頁面内容更早被讀到。本文梳理常见的 200 兜底、软 404、错誤重定向寫法,並给出抽样核驗、日誌統計、自定义错誤頁检查的自查步骤,帮你在失效地址上少浪費抓取和時間。

站点运营

站点运营:狀態碼自查,別让 200 兜底把失效頁面藏起来

狀態碼是服務器给爬虫和浏览器最直接的一句话:這個地址是活着、搬走了,還是根本不存在。它比頁面上寫什么更早被讀到,也更容易被忽略。很多站点的問题不是内容差,而是狀態碼给得含糊,導致蜘蛛在一個已经不存在的地址上反复来回,或者把一個真實的错誤頁当成正常内容收下。

一、常见的含糊寫法

下面這些情况,本质都是让狀態碼和頁面實际狀態對不上:

  • 全站兜底:任何找不到的地址都返回 200,頁面里再寫一句「内容不存在」。
  • 软 404:URL 已经不在了,服務器還是回 200,加一段提示文字了事。
  • 重定向用错:永久迁移只给了 302,蜘蛛就一直按临时處理。
  • 错誤頁配置失誤:自定义 404 頁面做得很漂亮,但服務器把它当 200 返回。
  • 前端路由接管:找不到的路径在客戶端渲染出 404 样子,HTTP 狀態却是 200。
  • 異常被吞:後端报错时直接返回 200 加一片空白,5xx 從此在日誌里消失。

二、自查可以這样做

  1. 抽样核驗:從服務器日誌或站点地图里,挑出正常頁、已刪除頁、已改址頁各几個,用 curl -I 或浏览器開發者工具的 Network 面板看返回的狀態碼。
  2. 統計日誌:按狀態碼分组看分布,重点找那些返回 200 但内容為空、体积異常小的路径。如果某個路径長期被訪問却總是空頁面,基本就是兜底逻辑在起作用。
  3. 检查自定义错誤頁:確認訪問一個明顯不存在的地址时,狀態碼确實是 404 或 410,而不是 200。
  4. 检查重定向:永久改址用 301,一次到位;临时調整才用 302 或 307。顺手看看有没有绕成三跳的鏈。
  5. 盯住 5xx:服務器错誤應当是告警指标,不要因為挂了好看的错誤頁就把 500 改寫成 200。

三、给對狀態碼的几個原則

  • 内容确實不存在、也不會再回来:给 404;已经明确下线刪除的,可以给 410。
  • 地址永久變化:301,並且直接指向最终地址。
  • 临时维護或活動期間:用 302,或者 503 配合 Retry-After 告诉對方稍後再来,別用 200 假装一切正常。
  • 權限相關的頁面:老老實實返回 401 或 403,不要用 200 的登入提示頁代替。
  • 不要用 meta refresh 或 JS 跳轉替代服務端 301,這類跳轉在狀態碼层面等于没有表態。
  • 單頁應用或前端路由站点,需要在服務端或邊缘层根據路由给出正确狀態碼,不能全部落到 200。
返回 200,但内容是「頁面不存在」,等于告诉蜘蛛這里有一篇正常内容,它下次可能還會再来。

四、几個容易漏掉的位置

  • CDN 或反向代理可能统一改寫狀態碼,配置改動後要重新驗證一遍。
  • 多語言、多地区分站配置出错时,可能出現某個語言版本整体 200 空頁。
  • 分頁越界頁、标簽空结果頁、站内搜尋無结果頁,如果都返回 200,會慢慢堆出一批空地址。
  • 表單提交後的结果頁,不适合用 GET 方式生成可長期訪問的地址。

五、把它變成日常動作

狀態碼检查不需要复杂工具,一條 curl 命令加一次日誌統計就够,關键是放進上线清單和定期巡检里。日誌中 5xx 比例抬头、404 在某個目錄集中爆發、200 空頁數量變多,都值得当天看一眼。早点把狀態碼理清楚,後面排查抓取異常、内容對不上号时,會省下不少来回確認的時間。