很多站点把注意力都放在能打開的頁面上,却很少检查打不開的頁面。蜘蛛每天都會碰到失效地址,這时候服務器返回什么狀態碼、頁面顯示什么内容,會直接影响它對整個站点的判断。404 本身不是問题,問题是把 404 伪装成 200。
先分清三種情况
- 404:地址确實不存在,服務器明确返回 404,頁面给出提示和可用的導航。
- 软 404:地址不存在或内容已刪除,但服務器返回 200,頁面主体是“暂無内容”“没有找到相關内容”之類。
- 410:明确告知该地址已永久移除,多用于确定不會再恢复的内容。
三者里最容易被忽略的是软 404。它看起来一切正常,用戶能打開,狀態碼也是绿的,但蜘蛛拿到的是一張空壳頁。數量一多,抓取预算就被這類頁面分走,真正需要抓的地址反而排到了後面。
软 404 常见的几種来源
- 内容被下架,但詳情頁模板還留着,頁面只剩标题和一段空白正文。
- 站内搜尋没有结果时,仍然返回 200 的搜尋结果頁。
- 商品或文章下架後,统一跳到一個“已下架”的空頁面。
- 分頁參數超出范围,比如第 200 頁返回 200,但列表里一條都没有。
- 前端渲染異常,HTML 里只剩一個空的容器节点。
這些情况的共同点是:地址還能訪問,狀態碼還是 200,但頁面本身没有實质内容。蜘蛛不會替你做质量判断,它只看狀態碼和返回的 HTML。
自查步骤
- 抽一批可疑地址,用 curl -I 或服務端工具查看真實狀態碼。浏览器顯示的頁面效果不能作為判断依據。
- 從服務器日誌中筛出返回 200、但响應体体积极小的地址,重点看詳情頁和搜尋頁。
- 检查站内搜尋结果頁、篩選頁、分頁越界頁是否對蜘蛛放開。這類頁面如果没有结果,最好返回 404 或直接禁止抓取。
- 检查已刪除内容的處理方式是否统一。有的跳首頁,有的留空壳,有的返回 404,規則越乱越难排查。
- 定期對比已提交的地址和實际能返回内容的地址,把長期只有空壳的地址清理掉。
好的 404 頁面要做四件事
- 返回正确的 404 狀態碼,而不是用 200 加一段提示文案。
- 說明發生了什么,語言简洁,不要让用戶以為站点挂了。
- 提供導航:首頁、栏目入口、站内搜尋框都可以。
- 不要用 302 或 meta refresh 自動跳回首頁。自動跳首頁會让蜘蛛把原来那個失效地址也当成正常頁,等于制造了新的软 404。
舊地址:重定向還是留 404
判断标准其實很简單:
- 有内容等價的新頁面,就做 301,把權重和用戶一起送過去。
- 没有替代頁面,就让它老老實實返回 404 或 410。
- 只有极少數通用入口(比如首頁)适合承接一批失效地址,其余全部跳首頁没有意义。
還要注意重定向鏈。一次跳轉能到位的,不要拆成两三层,鏈條越長,蜘蛛和用戶到達目标頁的成本越高。
两個容易踩的誤区
誤区一:把所有失效地址都跳首頁
這样處理,表面上看不到 404 了,實际上每個失效地址都返回 200 加首頁内容,重复度极高,比直接返回 404 更麻烦。
誤区二:認為 404 數量多就是坏事
一次改版、一批内容下线,短期出現大量 404 很正常。真正需要關注的是長期、持續新增的软 404,以及日誌里反复出現却始终没被清理的空壳地址。
404 是站点在正常说话。让失效地址返回失效狀態,比让它們假装存在要健康得多。
這類自查不需要多复杂的工具,一張狀態碼列表、一段日誌篩選、一次随机抽查,就能發現大部分問题。把它放進日常维護清單,比事後补救省力得多。