訪客点進一個不存在的地址,看到的是服務器預設的错誤頁:一行小字、一段英文、没有導航也没有搜尋框。多數人不會去研究這是谁的锅,只會按返回键,或者干脆關掉。對站点运营来说,404 頁面是少數几個“注定會被看到”的頁面之一,值得当成正式頁面来對待。
先把几種“找不到”分清楚
同样是打不開,背後的狀態碼含义並不一样,處理方式也不同。
- 404:资源不存在,是正常且必要的返回。该给 404 的时候不要犹豫。
- 410:内容曾经存在、已被永久刪除。语义比 404 更明确,但只适合确實不會再恢复的地址,不要当成通用兜底。
- 软 404:地址能打開,狀態碼是 200,頁面内容却寫着“该内容不存在”。這類頁面最容易被当成正常頁面處理,也最容易堆积成垃圾入口。
- 5xx:服務器错誤,属于故障范畴。別用错誤頁把 5xx 包装成 404,那只會把問题藏起来。
自定义 404 頁面该放什么
一個好的错誤頁不是设計比赛,它的任務只有一個:让訪客在十秒内找到下一個可点的東西。
- 一句說明,告诉訪客地址失效了,而不是站点坏了;
- 站内搜尋框;
- 返回首頁或對應栏目的入口;
- 三到五個目前值得看的内容連結;
- 联系方式,方便訪客反馈坏鏈。
需要特別注意:好看的错誤頁不會自動带上正确的狀態碼。上线後請用命令行或浏览器開發者工具確認,失效地址返回的是 404,而不是 200。
從訪問日誌里挖出高频死鏈
错誤頁是被動承接,日誌才是主動排查的入口。定期把訪問日誌里狀態碼為 404 的记錄筛出来,按路径出現次數排序,優先處理那些被反复請求的地址。再看一眼来源頁(referer),就能知道訪客是從哪個頁面点過去的——那通常就是站内死鏈的所在位置。
如果站点有對外投放或長期外鏈,某些老地址的 404 請求會持續出現,說明外部還在往這里導流,這類地址更值得做一次跳轉。
死鏈通常從哪来
- 栏目改名或下线,但没有配置跳轉;
- URL 大小寫不一致,服務器又区分大小寫;
- 带尾斜杠和不带尾斜杠被当成两個地址,其中一個並不存在;
- 图片、附件、下载包被清理,引用它們的頁面還在;
- 正文里手寫的老連結,頁面改版後没有同步更新。
几個容易踩的坑
第一類是單頁應用的路由回退:所有未知路径都被前端路由接住並返回 200,结果等于批量制造软 404。這时需要在服務端区分:已知路由正常返回,未知路径明确给出 404。
第二類是错誤頁本身被当成内容。自定义 404 頁面同样會被抓取,如果不希望它出現在结果里,可以在该頁加上 noindex,同时保證狀態碼正确。
第三類是自動跳轉。错誤頁上放倒計时跳轉首頁,會让訪客来不及看清發生了什么,也让狀態碼的意义變得混乱,不如给一個明确的按钮。
一份可执行的自查清單
- 随便輸入一個不存在的地址,確認返回 404 而不是 200 或 302;
- 確認错誤頁里有搜尋框和至少两個可点入口;
- 检查错誤頁在移動端的顯示效果;
- 導出近一周日誌中的 404 记錄,按次數排序;
- 對排名靠前的死鏈逐條判断:该跳轉的做 301,该保留 404 的保持不動;
- 检查站内導航、頁脚、正文里的連結是否有指向失效地址的;
- 確認错誤頁没有被 robots.txt 誤封,也没有被路由回退吞掉;
- 把“新增 404 數量”纳入日常监控,出現突增时回查最近的改版操作。
404 不是失敗,而是一次重新引導訪客的机會。真正伤人的不是地址失效,而是訪客撞上一堵什么都没有的白墙,连下一步该点哪里都不知道。