站点运营

站点运营:404 與错誤狀態碼自查,把走错的訪客和蜘蛛接回来

错誤頁常被当成小事,但它决定了訪客撞上死鏈後是繼續逛還是直接离開。這篇文章梳理 404、410、5xx 等狀態碼的正确用法,說明软 404 和兜底跳首頁為什么容易出問题,並给出一份可以直接照着做的错誤頁自查清單。

站点运营

站点运营:404 與错誤狀態碼自查,把走错的訪客和蜘蛛接回来

站点跑久了,多多少少會出現打不開的地址:文章下线了、栏目合並了、外部連結寫错了。這些地址對應的頁面往往没人管,但訪客和搜尋蜘蛛都會撞上。错誤頁做得好不好,直接影响两件事:訪客是繼續逛還是直接關掉,蜘蛛是把抓取预算浪費在死路上還是尽快轉向別處。

先把几種打不開的情况分清楚

很多人把所有打不開的情况统称為 404,實际上服務器返回的狀態碼含义差別很大,用错了會誤導訪客,也會誤導搜尋引擎。

  • 404:地址對應的资源不存在。适合内容已删、但不确定以後是否恢复的情况。
  • 410:资源被永久刪除,不會再回来。相比 404,它表達得更明确,蜘蛛處理起来也更干脆。
  • 301 / 302:地址變了,属于跳轉而不是错誤。只在确實有新地址时使用。
  • 403:资源存在但没有訪問權限。用 404 伪装權限不足是另一種做法,但別把两者混着用。
  • 500 / 502 / 503:服務端出了問题。503 可以配合 Retry-After 告诉蜘蛛稍後再来。

狀態碼用错,麻烦在哪

最常见的两個坑是软 404 和兜底跳首頁。

软 404 指頁面實际返回 200,但内容寫的是内容不存在。訪客看不出来,蜘蛛却會把它当成正常頁面收下一份空壳。數量多了,站点里就积压一批没有價值的頁面。

兜底跳首頁則是把所有错誤地址都 301 到首頁。短期看訪客没有停在错誤頁,但预期落空,蜘蛛也可能把大量不相關的地址当成同一個頁面来處理。错誤的地址並没有真的變正确,只是被盖住了。

判断标准其實很简單:地址真的換了,用 301;内容真的没了,用 404 或 410;服務挂了,用 5xx。別把 301 当萬金油。

404 頁面本身该放什么

狀態碼對了,頁面内容也別是一片空白。一個能用的 404 頁至少包含几样東西。

  • 一句清楚的說明,告诉訪客這個地址没有内容,而不是只寫系統错誤。
  • 返回首頁和主要栏目的連結,最好带上一級栏目列表。
  • 站内搜尋入口。訪客愿意留下来自己找,就還有机會。
  • 和全站一致的導航與頁脚,別让错誤頁變成孤岛。
  • 移動端可讀,不要做成只有一行小字加一張大图的展示頁。

另外,別让 404 頁面自動跳轉。跳轉會让訪客来不及看清楚發生了什么,也會让狀態碼的意义變得混乱。

顺手排查几個细节

URL 大小寫不一致、结尾斜杠时有时無,也會制造一批本不该存在的 404。Linux 服務器上 /About 和 /about 是两個地址,站内連結如果寫法不统一,蜘蛛就會顺着两種寫法各抓一遍。

服務器日誌里的 404 记錄其實是很好的參考。如果某個舊地址持續被訪問,說明還有外部連結或用戶书簽指向它,值得考虑做一次 301 到新地址,而不是放任它一直 404。

一次完整的自查怎么做

  1. 随便敲一個明顯不存在的地址,用浏览器開發者工具或 curl 看返回的狀態碼是不是 404。
  2. 找一個已下线内容的地址,確認它没有返回 200。
  3. 把站内几個主要入口頁面的連結点一遍,看看有没有拼寫或大小寫導致的死鏈。
  4. 翻一下最近的服務器日誌,把 404 出現次數靠前的地址列出来,逐個判断该重定向還是保持 404。
  5. 確認服務端错誤返回的是 5xx 而不是 200,避免故障被伪装成正常頁面。
  6. 在手机上打開一個 404 頁面,检查導航和搜尋框能不能正常使用。

這些事情一次做完大概一小时,之後每季度過一遍就够。错誤頁處理得好不會带来額外流量,但能少丢一点本来就不多的訪客,也能让蜘蛛少在死路上绕圈。