一個 URL 返回 200、浏览器能正常打開,並不代表它對搜尋引擎来说是一個合格的内容頁。软 404 指的是服務器给出了正常狀態碼,但頁面實质上是空的、错的,或者對用戶没有價值。它既不是明确的 404,也不是一個值得長期保留的頁面,通常先被抓取,再被判断,最後停在“已抓取,尚未编入索引”或“已排除”里。做收錄核對时如果只看狀態碼,很容易漏掉這一類。
先把“能訪問”和“有内容”分開看
抓取、索引、展示是三個不同的环节。软 404 往往能顺利通過抓取,卡在後面两個环节。它的麻烦在于:表面上没有报错,站長平台也不會给你一個醒目的红字,只能靠自己抽查看内容。判断一個地址是不是空壳,看的是正文里有没有可用信息,而不是看它能否打開。
哪些頁面最容易變成空壳
- 越界分頁:URL 上寫着 page=999,模板照常渲染,但列表為空,只剩導航和頁脚。
- 站内搜尋结果頁:關鍵詞没有匹配項时仍返回 200,正文只有一句“没有找到相關内容”。
- 已下架的商品或文章詳情頁:主体内容被删,模板還在,頁面只剩标题、面包屑和推荐位。
- 參數生成的變体頁:颜色、尺寸、排序方式组合出一個從未有過内容的地址。
- 需要登入才能看正文的頁面:蜘蛛拿到的是提示语和登入框。
- 内容极短的聚合頁:只列了几條标题、没有摘要,和其他列表頁高度重复。
- 靠前端填充的頁面:原始 HTML 里只有骨架,資料要等接口返回才出現。
用几個低成本的方式把它們找出来
- 抽样:從索引和抓取日誌里各取一批 URL,用不带 Cookie 的方式請求,看返回的 HTML 里正文部分還有多少可用文字。
- 按模板分组統計:同一套模板批量取 50 到 100 個样本,看空壳比例是否集中。集中出現时,往往能一次定位到一個模板。
- 看抓取频次與索引狀態的组合:抓得很勤但長期不進索引的模板,值得單獨拉出来對照。
- 看日誌里的狀態碼分布:如果某個目錄下几乎全是 200,反而值得警惕,正常站点通常會有一定比例的 404。
處理时按“這個地址還有没有存在價值”来分
没有存在價值的
- 越界分頁、無结果搜尋頁、無效參數頁,直接返回 404 或 410 更干净。让模板在無内容时明确返回错誤碼,比渲染一個空壳省事得多。
- 已经彻底下架、也不打算恢复的内容,同样走 404 或 410,不要用 200 挂着。
有存在價值但目前内容不足的
- 先补内容,再谈收錄。加一段真正有用的說明、把相關條目聚合進来,通常比反复調整 canonical 更有效。
- 短期补不上、又不想让用戶看到空頁,可以合並到上級頁面,並做 301 指向那個真正有内容的地址。
内容没問题,只是被抓到的部分少
- 這種情况要和软 404 区分開。判断方法是看原始 HTML 里有没有正文:有,則偏渲染問题;没有,才更接近内容問题。
- 不要把渲染問题当成软 404 去删頁面,那样容易誤伤本来正常的地址。
几個容易踩的坑
- 用 noindex 代替 404。noindex 只是不索引,URL 依然可能被反复抓取,長期占用抓取资源。
- 全站一套 404 模板却返回 200。用戶和蜘蛛看到的一样,但引擎無法靠狀態碼判断,只能退而判断内容,成本更高。
- 把“内容少”直接等同于软 404。有些頁面确實短,但信息完整、能解决問题,這類不该一刀切。
- 只看站長平台的匯總报告,不看真實响應。报告有延迟和聚合,抽查原始响應更可信。
處理软 404 的顺序建议是:先確認這個 URL 该不该存在,再决定给错誤碼、做合並還是补内容。顺序反了,容易把本来有用的頁面一起清掉,收錄量看着降了,反而不清楚是清理生效還是誤伤。