先明确:返回碼正常,不等于頁面有效
服務器返回 200,只說明這個 URL 還能正常响應請求,不代表它上面有值得索引的内容。当頁面因為資料被删、商品下架、模板报错或前端渲染失敗,最终只輸出一個空壳时,搜尋引擎看到的仍然是一個可訪問的頁面。這類頁面通常被称為软 404。
它比真正的 404 更麻烦的地方在于:404 是一個明确信号,蜘蛛會逐步把该地址從索引和抓取队列里淡出;而软 404 每天都會被当成正常頁面抓一遍,占着抓取配額,却不贡献任何有效内容。數量一多,站点整体的抓取效率會被稀释,质量判断也會受影响。
常见的几種软 404 形態
- 詳情頁資料被刪除或下架,頁面仍保留頁头、頁脚和推荐位,正文区域為空或只剩一句提示语。
- 篩選、排序、分頁參數超出了實际结果范围,返回一個没有任何條目的空列表頁。
- 模板變量取值為空導致渲染異常,比如标题、正文全是占位符或报错文本。
- 正文依赖 JS 异步加载,接口出错或超时,浏览器里只剩骨架屏或空白区,原始响應里同样没有正文。
- 站点改版或迁移後,舊的動態地址没有做 301,直接輸出了一個空模板。
這些情况表面上各不相同,共同点是:狀態碼是 200,正文里没有真正可索引的内容。
核對顺序:從响應到索引狀態
- 先看狀態碼和响應体。用抓取工具請求一次,確認返回的是 200,再查看原始 HTML 里正文区域是否為空。只看浏览器渲染後的效果容易被誤導。
- 對比同類正常頁面。把出問题的 URL 和同栏目下正常收錄的頁面放在一起,對比响應内容、模板结构、資料来源,判断是資料缺失還是模板問题。
- 確認内容是不是後来才加载。如果正文由 JS 注入,检查接口是否报错、是否被 robots.txt 拦掉、是否需要登入態。這類問题在原始响應里表現為空,但頁面本身的设計是有内容的。
- 查看索引报告里的标记。索引覆盖率报告中,已抓取但尚未编入索引之類的項目里,经常會混着這類頁面。把它們的數量、URL 規律同站点结构對照,能判断是零星問题還是批量問题。
- 判断這個 URL 该不该繼續存在。這是决定處理方式的關键:内容應该存在,就去修資料或模板;内容确實没有了,就不要再用 200 硬撑。
该修的修,该撤的撤
頁面應当存在
- 資料被誤删或狀態異常:恢复資料、修正狀態字段,让頁面重新輸出正文。
- 模板报错:排查變量為空、接口超时、缓存脏資料等具体原因。
- 前端渲染失敗:修接口,把關键内容放到服務端渲染或预渲染,保證原始响應里能拿到正文。
- 空结果頁:只對确實有结果的參數组合開放抓取,無结果的组合不生成站内連結,或统一做規范化處理。
頁面确實不该存在
- 内容已被永久刪除且無替代頁:返回 410 或 404,比用 200 輸出空壳更清晰。
- 有替代頁面:用 301 指向最接近的有效頁面,不要把所有下架頁都笼统指向首頁。
- 頁面仍需保留给用戶,但不适合索引:確認没有其它收錄入口後,再评估是否加 noindex。注意 noindex 只是不索引,頁面仍會被抓取。
容易混淆的两種情况
一種是内容單薄。頁面有正文,只是信息量少、和別處高度重复,它不算软 404,處理思路是补内容或做合並,而不是简單删掉。
另一種是抓取異常。服務器超时、限流、返回 5xx 时,蜘蛛拿到的是错誤頁;如果错誤頁本身也返回 200,就同时叠加了软 404 的問题。核對时要先把服務端稳定性排除掉,再谈内容层面。
软 404 的關键不是頁面打不開,而是打開之後没有東西。先確認狀態碼與正文是否匹配,再决定修复還是下线,比反复提交站点地图更有用。