站点运营里有一類問题很隐蔽:地址能打開,浏览器不报错,用戶看到一句「暂無内容」,服務器返回的却是 200。這種頁面在蜘蛛眼里是正常頁面,但它没有任何價值,還會不断占用抓取額度。這就是软 404。
软 404 和真 404 的区別
真 404 是服務器明确告诉蜘蛛「這個地址没有對應内容」。软 404 是内容已经不存在,服務器却给出 200,只是在頁面里寫了提示文字。前者能让蜘蛛快速放弃這個地址,後者會让蜘蛛反复回来確認,甚至在索引里留下一條空壳记錄。
還有一種相反的情况:真正的错誤頁返回的狀態碼是 200。比如有人把自定义错誤頁配置成普通頁面,用戶看到「頁面不存在」,蜘蛛收到 200,于是把它当成一篇正常内容對待。
常见的软 404 来源
空列表與空搜尋结果
篩選條件叠加到没有结果的组合、搜尋關鍵詞没有匹配、栏目下暂时没有内容,這些頁面往往沿用列表頁模板,返回 200 並顯示「暂無相關结果」。如果參數组合能被無限拼出来,這類地址會成規模出現。
已下架但保留框架的詳情頁
商品、活動、职位、文章下线後,很多人只在前台把正文删掉,頁面模板還在,标题變成空白或「内容已刪除」,狀態碼依舊是 200。
框架统一返回 200
部分前端框架在客戶端渲染,服務端對所有路由都返回 200,再由 JavaScript 决定顯示哪種頁面。蜘蛛拿到的初始响應是 200,看不到真實狀態。單頁應用尤其容易出現這種情况。
兜底跳轉與首頁重定向
把不存在的地址全部 301 到首頁,看起来用戶不會碰到错誤頁,但對蜘蛛来说,一批無關地址指向同一個頁面,既浪費抓取,也容易让首頁被当成萬能落点。這種處理通常比直接返回 404 更麻烦。
自查步骤
- 用命令行工具或浏览器開發者工具看响應头,重点關注狀態碼,而不是頁面長什么样。
- 挑一批低價值地址做抽查:空篩選组合、已下架詳情頁、長期無更新的栏目頁、站内搜尋结果頁。
- 翻服務器訪問日誌,統計返回 200 但内容几乎為空的地址數量,按目錄归類。
- 在站長平台里查看软 404 相關报告,與日誌结果對照,確認不是統計口径的問题。
- 检查自定义错誤頁本身返回的狀態碼,確認它是 404 而不是 200。
發現之後怎么處理
- 确實没有内容的地址:返回 404;如果内容是永久移除並且有明确判断依據,可以用 410。狀態碼要真實,不要用 200 加一句提示来代替。
- 内容迁移到了新地址:用 301 指向新頁面,並保證新舊内容對應,不要一律指向首頁。
- 參數拼出的空结果:從内鏈和模板里减少無意义入口,必要时用 robots.txt 或 noindex 控制,前提是這些頁面确實没有獨立检索價值。
- 暂时缺内容的栏目:如果短期内會补上内容,可以先不開放訪問,等有内容再上线,比長期挂一個空壳頁更稳妥。
- 前端渲染的站点:尽量让服務端返回正确狀態碼,或者對确實不存在的路由在服務端做判断。
狀態碼是给机器看的說明书,頁面里寫多少提示文字,都代替不了一個准确的 404。
最後提醒一点:處理软 404 改的是狀態碼和内容策略,不是把提示頁做得更漂亮。批量修改後记得抽查几條地址,確認响應头真的變了,再观察一段時間的抓取與索引變化。抓取額度和索引位都是有限的,把它們留给真正有内容的地址,比留住一堆空壳頁面更有意义。