服務器返回 200,頁面上却几乎没有内容——這種狀態在訪問日誌里看不出任何異常,在索引报告里却會慢慢堆积。這類地址通常被称為软 404(soft 404),指的是“HTTP 狀態碼表示成功,但内容上等價于不存在”的頁面。
软 404 和真正的 404 差在哪
硬 404 是服務器明确告诉蜘蛛“這個地址没有東西”,蜘蛛會較快把 URL 從索引里拿掉。软 404 則相反:狀態碼是 200,蜘蛛要讀完整個頁面、甚至渲染之後,才能判断出這是個空壳。判断成本更高,也更容易出現反复抓取、反复评估的情况。
哪些頁面容易變成空壳
- 篩選或搜尋參數生成的结果頁,條件组合没有匹配項,只剩一句“暂無结果”。
- 商品下架、文章刪除後仍返回 200 的詳情頁,正文区已经為空。
- 分頁越界,例如實际只有 3 頁,第 50 頁却照常渲染出一個空列表。
- 模板占位頁:只保留标题、導航和頁脚,主体内容依赖接口,而接口没有返回資料。
- 需要登入才能看到内容的頁面,未登入狀態下只有一段登入提示。
蜘蛛用来判断“没内容”的信号
搜尋引擎不會只看字數,通常是多個维度叠加:
- 可讀正文與模板的占比,正文太少、導航和頁脚占了大部分版面。
- 與站内其他頁面的相似度,大量頁面共用同一段提示语,容易被归為重复或空頁。
- 頁面结构,正文容器為空,或者只有列表外壳没有條目。
- 連結情况,頁面上没有可用連結,或者全部指向同一批導航地址。
- 渲染结果,前端框架渲染後仍是空白,與初始 HTML 没有實质差异。
狀態碼 200 只代表“這次請求被成功處理”,並不代表“這個地址值得進索引”。
處理思路
- 确實没有内容的地址,直接返回 404 或 410,不要用 200 硬撑。
- 如果是暂时缺货、临时维護,用 503 加 Retry-After,比返回 200 空頁更清楚。
- 搜尋、篩選類參數頁,可以考虑加 noindex 或做抓取限制,同时避免在站内大量連結到它們。
- 分頁越界的 URL,重定向到最後一頁,或者干脆返回 404。
- 需要登入的内容,用 200 展示登入提示並不算错,但不要让它成為内鏈的主要落点,更稳妥的是让這部分不進入索引。
- 已经進索引的空壳頁,狀態碼修正後會逐步登出,不必急于一次性全部改完。
怎么找到站内的软 404
從日誌里找最有價值:同一批 URL 被反复抓取,但頁面正文長期很短,或者渲染後内容几乎一致,就值得抽查。也可以在搜尋、篩選、分頁這些入口上随机取样,看看有没有“條件為空”的情况被模板渲染成了完整頁面。
配合索引报告一起看
索引报告里的“已抓取 - 尚未编入索引”和“软 404”分類,经常指向同一批頁面。數量不多时可以人工判断;數量大时優先改模板和參數規則,而不是逐個改頁面。
软 404 的麻烦在于它不报错。服務器日誌顯示 200,頁面也能打開,只有蜘蛛在後台默默把這些地址标成低價值。定期检查空壳頁面,比事後清理索引要省事得多。