一个 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 该不该存在,再决定给错误码、做合并还是补内容。顺序反了,容易把本来有用的页面一起清掉,收录量看着降了,反而不清楚是清理生效还是误伤。