站点跑一段時間後,總會出現一些打不開的地址:文章删了、栏目改了、URL 調整過,或者別處引用时寫错了。這些地址如果放着不管,用戶点到會卡住,蜘蛛爬到也會浪費一次抓取。死鏈自查的目的不是把 404 全部消灭,而是让每個無效地址都有明确、合理的出口。
先分清几種“打不開”的情况
同样顯示“頁面不存在”,背後的狀態碼可能完全不同,處理方式也不一样。
- 404:服務器明确告诉訪問者這個地址不存在,是正常且必要的响應。
- 软 404:頁面内容寫着“找不到”,但服務器返回的是 200,等于把一個空頁面当成正常頁交出去,容易造成重复和抓取浪費。
- 410:表示内容已被永久移除,比 404 更明确,适合确定不再提供的頁面。
- 301/302:地址發生了迁移,需要跳到新位置。跳轉鏈越長,中間损耗越大。
- 403、5xx:這類不是死鏈,而是權限或服務器問题,應该單獨排查。
死鏈一般從哪里来
- 内容下线後没有處理原地址;
- 改版或目錄調整时,舊 URL 没有做對應跳轉;
- 站内連結、導航、正文引用里寫错了地址,或大小寫不一致;
- 程序生成的列表、标簽、參數组合頁被刪除;
- 外部網站、舊邮件、舊QR Code里留下的歷史連結。
怎么把死鏈找出来
單靠一種方式容易漏,建议两條线一起走。
- 看服務器訪問日誌,篩選出返回 404、410 的請求,按路径和出現次數排序,出現频繁的優先處理。
- 用爬虫工具對站内做一次完整抓取,检查内部連結指向的地址是否都能正常打開,顺带發現跳轉鏈和软 404。
- 把两份结果合起来去重,形成一張待處理清單,标出每個地址的来源:站内連結、外鏈,還是歷史遗留。
日誌反映的是真實訪問,站内抓取覆盖的是结构問题,两者互补,能减少漏網的情况。
處理原則:一個地址一個决定
最省事的做法是全部跳首頁,但這其實會制造大量软 404,對用戶也没有帮助。更稳妥的是逐類判断。
- 有主题更接近的替代頁:做 301,指向最相關的那一篇,而不是站首頁。
- 内容确實不再提供:返回 404 或 410,让它安静地留在那里。
- 只是連結寫错:直接改連結,不需要加跳轉。
- 大小寫、结尾斜杠等變体:统一成一種規范寫法,其余做規范化處理。
- 来自外部的死鏈:影响有限,可以不管,也可以联系對方更新。
另外注意跳轉不要串成鏈條,A 跳 B、B 再跳 C,最好一步到位,减少中間环节。
404 頁面本身也要交代清楚
- 狀態碼必须是 404,不要用 200 伪装;
- 頁面给出简短說明,告诉用戶這個地址已经失效;
- 提供返回首頁、站内搜尋或几個常用栏目的入口;
- 不要設定自動跳轉,也不要把整站導航都堆上去;
- 样式與站点保持一致,避免用戶以為是網站出了故障。
定期复查比一次性清理更重要
内容會持續更新,連結也會不断變化,死鏈是持續产生的。可以把它放進日常运维清單:每月看一次日誌里的 404 记錄,每次改版或批量删内容後做一次站内抓取,新内容發布时顺手检查引用的連結是否有效。
死鏈治理的目标不是零 404,而是让每一個失效地址都有合理的去向,用戶不迷路,蜘蛛不空跑。
自查清單
- 服務器是否對不存在的地址返回真實 404,而不是 200;
- 是否存在顯示“找不到”却返回 200 的软 404 頁面;
- 高频 404 地址是否已经處理或做出判断;
- 跳轉是否指向相關頁面,是否出現多級跳轉鏈;
- 站内連結、導航、正文引用是否還有明顯寫错的地址;
- 404 頁面是否提供返回入口,且没有自動跳轉;
- 是否养成定期查看日誌、改版後复查的习惯。