抓取预算有限,蜘蛛每次来訪都是一次机會。如果它把時間花在一堆已经不存在、却仍返回 200 的頁面上,真正有價值的栏目和内容就會被少看几眼。404 與软 404 自查,就是把這些假頁面挑出来,让狀態碼说實话。
一、先分清三種狀態
硬 404 與 410
頁面确實没了,服務器返回 404 Not Found,這是最标准的做法。如果内容是永久刪除、不會再恢复,410 Gone 表達得更明确,部分搜尋引擎對它的處理會更快一些。两者都不會伤害站点整体质量,反倒是長期挂着無效 URL 更容易积累噪音。
软 404 是什么
软 404 指的是:頁面實际已经没有内容,或者内容與用戶预期完全不符,但服務器依然返回 200 OK。對蜘蛛来说,這等于告诉它這里有一篇正常内容,于是它會照常解析、照常占用预算,甚至可能把空頁面放進索引。
二、软 404 通常從哪冒出来
- 商品下架、文章刪除後,模板還在渲染,只剩标题和推荐位。
- 列表頁翻到超出范围的頁碼,返回 200 但列表為空。
- 站内搜尋無结果时,用同一個搜尋模板返回 200。
- 前端路由没配好,不存在的路径被單頁應用兜底渲染成内容頁。
- 舊 URL 全部 301 到首頁,蜘蛛拿到 200,内容却和原地址毫無關系。
- 篩選參數组合出大量只有一两條结果的頁面,内容高度重复。
三、手動自查的几步
- 從服務器日誌里筛出抓取量靠前的 URL,随机抽 30 到 50 條逐一訪問。
- 用命令行工具只看响應头,確認狀態碼,不要被頁面上寫着的 404 字样骗到。
- 检查這些頁面的正文長度,明顯少于同栏目平均值的單獨标记出来。
- 把所有跳首頁的舊連結列成清單,判断该保留、该 301 到相關頁,還是该直接 404。
- 對分頁和搜尋頁设定規則:超出范围返回 404,無结果頁考虑改狀態碼或加抓取限制。
四、服務器层面把狀態碼用對
核心原則是:让狀態碼和頁面真實情况一致。刪除的内容就返回 404 或 410,迁移的内容 301 到最相關的新地址,不要统一倒進首頁。前端渲染的站点尤其要注意,路由兜底组件不能一律返回 200,服務端應根據路由表判断是否存在對應资源。
自查时容易被忽略的一点:頁面顶部寫着抱歉、内容不存在,但 HTTP 狀態碼是 200。對用戶是提示,對蜘蛛是正常頁面,两者並不等價。
五、自定义 404 頁该放什么
- 明确的說明文字,一句话讲清楚頁面為什么打不開。
- 回到首頁、對應栏目、站内搜尋的入口,帮用戶繼續走下去。
- 不要把所有 404 都自動跳轉,跳轉會让狀態碼失去意义。
- 保持頁面轻量,不要挂大图和复杂脚本。
六、把 404 日誌變成巡检清單
定期統計 404 日誌里的来源,重点看两類:一類是站内連結指過去的 404,說明内鏈或模板有坏鏈,修掉即可;另一類是外部仍大量引用的舊地址,如果内容還有價值,考虑恢复或 301 到替代頁。把這两類分開處理,比笼统地减少 404 數量更有意义。
404 本身不是問题,狀態碼和頁面内容互相矛盾才是問题。花半小时抽查一轮,往往能發現几個持續消耗抓取预算的角落。