站点跑久了,出現 404 是常態:文章下架、栏目合並、商品停售、外部連結寫错,都會留下打不開的地址。真正需要运营操心的,不是“有没有 404”,而是這些 404 有没有被正确表達出来,以及有没有一批頁面明明没有内容,却仍然返回 200,让抓取程序以為那里還有東西可看。
404 要解决的是“告诉對方這里没有”
当用戶或搜尋蜘蛛請求一個地址,服務器至少要给出明确態度:存在就返回 200,永久搬家就返回 301,确實没有就返回 404 或 410。含糊不清的後果是,蜘蛛會反复回来確認,把抓取時間花在一批永遠不會出現内容的地址上。
先分清硬 404 與软 404
硬 404
服務器直接返回 404 狀態碼,頁面里放一段友好的提示,再给出返回首頁、站内搜尋、相關栏目的入口。這是最干净的做法:狀態碼說明事實,頁面内容负责把人留住。對于確認不再提供的頁面,410 语义更明确,但不是必须。
软 404
软 404 指的是:頁面實际上不存在,但服務器返回 200,頁面上寫一句“内容已刪除”或“暂無相關结果”。對訪問者来说区別不大,對搜尋蜘蛛来说差別很大,它會把這個地址当成正常頁面收下,然後一次次复查為什么内容始终是空的。常见形態包括:
- 篩選或搜尋無结果时,仍然渲染完整框架的空列表頁;
- 文章撤下後保留模板,只把正文換成一句提示,狀態碼仍是 200;
- 單頁應用路由没有命中,前端渲染出一個空白组件;
- 參數错誤或 ID 不存在时回落到首頁内容,但 URL 和狀態碼都没變。
一份可以照着做的自查清單
不需要复杂工具,用浏览器開發者工具看响應头,或者用命令行把地址請求一遍就能查。重点覆盖這几類:
- 已下架内容的原始 URL,確認返回的是 404 還是 200;
- 栏目列表翻到超出范围的頁碼;
- 站内搜尋輸入一個几乎没有结果的關鍵詞;
- 带错誤參數或不存在 ID 的詳情頁;
- 移動端與桌面端同一地址的狀態碼是否一致;
- 404 提示頁本身能否正常訪問,有没有被 robots 規則誤挡。
按情况分開處理
- 内容永久下线:返回 404 或 410,頁面给出相關栏目和搜尋入口,不要自動跳首頁,那會引出另一類問题。
- 頁面換了地址:用 301 指到新地址,尽量一步到位,別串成多級跳轉。
- 篩選、排序、分頁參數無效:让服務端识別出無效组合,返回 404,或重定向到不带參數的干净列表。
- 搜尋無结果:可以返回 404,也可以正常返回 200 並明确标注無结果,關键是別让它看起来像一頁有内容的頁面。
- 临时维護:用 503 配合 Retry-After,不要用 404,免得把正常頁面誤判成不存在。
別把 404 当萬能開關
反過来也有坑:為了“清理”而批量 404 掉仍有訪問、仍有外部連結的頁面,等于主動放弃已经积累的入口。改版或合並栏目时,先整理一份新舊地址對照表,能映射的做 301,确實没有對應内容的再走 404。
站内自己寫错的連結、搜尋索引里残留的舊地址,也要一並更新。否則蜘蛛會在一堆死胡同之間来回走,真正有價值的頁面反而被排在後面。
把结果记下来,定期回看
建议按周看一次 404 的 TOP 地址:哪些是外部誤鏈,可以联系對方或忽略;哪些是站内模板寫错,需要開發修改;哪些是本该做 301 的舊地址,需要补規則。長期没人訪問、也没人連結的,就让它安静地留在 404 就好,不必强行给它安排去處。