為什么 404 值得單獨做一次自查
蜘蛛每天来站点,不只是看新内容,也在確認舊連結是否還活着。如果一批連結返回 404,蜘蛛會逐渐降低對這些路径的訪問频率;如果本该 404 的頁面返回 200,蜘蛛會把空頁面或错誤頁面当成正常内容收進去,浪費抓取预算,也可能影响站点质量判断。
404 本身不是错誤,它只是一個狀態碼。真正的問题在于:该返回 404 的时候没有返回,不该返回 404 的时候却返回了。
真 404、软 404 和假 404
真 404
頁面确實不存在,服務器返回 HTTP 404 狀態碼,頁面内容给出清晰的“頁面不存在”提示,並引導用戶回到首頁或相關栏目。這是最正常的處理方式。
软 404
頁面内容已经没了,但服務器仍然返回 200,或者頁面虽然顯示“未找到”,狀態碼却是 200。蜘蛛會認為這是一個正常頁面,可能反复抓取,甚至把它当成低质量内容。
假 404
頁面其實存在,内容也有,但因為權限、參數、大小寫、尾部斜杠等問题返回了 404。用戶点進来看到错誤頁,蜘蛛也會放弃這條 URL。
自查时重点看這几個位置
- 已刪除的内容頁:是否返回 404,還是仍然返回 200 的空壳頁。
- 栏目頁與列表頁:当栏目下没有内容时,是返回 404、返回 200 的空列表,還是保留並顯示提示。
- 商品或文章下架頁:是否用 404、410 或 301 到新頁面,狀態碼和跳轉目标是否一致。
- 站内搜尋無结果頁:是否返回 200 並生成可索引的空白頁。
- 分頁超出范围:例如第 100 頁没有内容,是否仍然返回 200。
- 參數错誤頁:错誤參數導致頁面為空时,返回什么狀態碼。
软 404 常见的几種来源
很多软 404 不是故意做出来的,而是模板或程序預設行為。例如:
- 内容被刪除後,系統仍然渲染詳情頁模板,只是正文区域為空。
- 分類為空时,列表頁照样輸出,标题和描述還是原来的栏目文案。
- 搜尋無结果时,頁面只顯示“没有找到”,但 HTTP 狀態碼是 200。
- 前端路由接管後,所有路径都由同一個入口返回 200,服務端不再区分。
- 缓存把舊的 200 响應繼續發给蜘蛛,即使後台内容已经刪除。
這些情况單看頁面可能不容易發現,需要结合服務器响應和日誌一起判断。
處理 404 的基本顺序
先確認頁面是否真的應该消失。如果内容只是換了地址,優先做 301 到最相關的新頁面,而不是直接 404。如果内容确實不再提供,再返回 404 或 410。
對于软 404,需要让服務端在内容不存在时返回正确的狀態碼。如果站点有前端路由,至少要保證首屏返回可识別的狀態,或者通過预渲染、服務端渲染把狀態碼传出去。
404 頁面本身也要有用:說明頁面不存在,给出返回首頁、查看相關栏目或搜尋的入口。不要自動跳轉,也不要把 404 頁面做成一個内容丰富的专题頁,那會让蜘蛛和用戶都困惑。
404 頁面不是流量入口,它的任務是清楚地告诉用戶和蜘蛛:這個地址没有内容。
用日誌和抓取工具做一次驗證
自查不能只看浏览器。可以用命令行或抓取工具請求一批典型 URL,记錄返回的狀態碼。重点抽查:已刪除内容、空栏目、無结果搜尋頁、超出范围的分頁、带错誤參數的詳情頁。
再看服務器日誌里蜘蛛的訪問记錄。如果某些已经不存在的 URL 持續被大量抓取,並且返回 200,就說明软 404 還在消耗抓取资源。如果這些 URL 返回 404,但站内仍然有大量入口連結指向它們,則需要清理内鏈或更新連結目标。
小结
404 與软 404 自查,核心是让狀態碼和頁面真實狀態保持一致。该 404 的就返回 404,该 301 的做 301,该保留的不要誤伤。把這件事理顺,蜘蛛才不用在空頁面上反复確認,抓取预算也能用在真正有内容的地方。