站点运营

站点运营:404 與软 404 自查,別让空壳頁面留在抓取路径上

内容下架、栏目合並、參數寫错,都會在站内留下打不開的地址。本文区分硬 404 與软 404,梳理篩選無结果、临时维護、舊地址迁移等场景,给出可执行的自查清單和處理方式,让服務器狀態碼與頁面内容保持一致,减少蜘蛛在空頁面上的無谓回訪。

站点运营

站点运营:404 與软 404 自查,別让空壳頁面留在抓取路径上

站点跑久了,出現 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 規則誤挡。

按情况分開處理

  1. 内容永久下线:返回 404 或 410,頁面给出相關栏目和搜尋入口,不要自動跳首頁,那會引出另一類問题。
  2. 頁面換了地址:用 301 指到新地址,尽量一步到位,別串成多級跳轉。
  3. 篩選、排序、分頁參數無效:让服務端识別出無效组合,返回 404,或重定向到不带參數的干净列表。
  4. 搜尋無结果:可以返回 404,也可以正常返回 200 並明确标注無结果,關键是別让它看起来像一頁有内容的頁面。
  5. 临时维護:用 503 配合 Retry-After,不要用 404,免得把正常頁面誤判成不存在。

別把 404 当萬能開關

反過来也有坑:為了“清理”而批量 404 掉仍有訪問、仍有外部連結的頁面,等于主動放弃已经积累的入口。改版或合並栏目时,先整理一份新舊地址對照表,能映射的做 301,确實没有對應内容的再走 404。

站内自己寫错的連結、搜尋索引里残留的舊地址,也要一並更新。否則蜘蛛會在一堆死胡同之間来回走,真正有價值的頁面反而被排在後面。

把结果记下来,定期回看

建议按周看一次 404 的 TOP 地址:哪些是外部誤鏈,可以联系對方或忽略;哪些是站内模板寫错,需要開發修改;哪些是本该做 301 的舊地址,需要补規則。長期没人訪問、也没人連結的,就让它安静地留在 404 就好,不必强行给它安排去處。