页面能打开、状态码是 200,不代表它值得被收录。很多站点的收录问题,源头不是爬虫不来,而是一批“看起来正常”的 URL 把索引位和抓取预算占掉了——这类页面通常被叫做软 404。
软 404 是什么
服务器返回 200,但页面上没有用户真正想找的内容,或者正文本身就在说“这个东西不存在”。爬虫拿到的是“抓取成功”的信号,于是把它当成一个有效页面继续处理,后续的抓取分配和索引判断都会受它影响。
常见的几种形态
- 已下架的商品页、过期的活动页,正文只剩一句“该商品已下架”。
- 筛选参数组合出空结果,页面依然是 200,只是列表区域是空的。
- 分类页或标签页里没有任何条目,模板照常完整渲染。
- 内链写错导致的空页,共用模板统一输出“暂无内容”。
- 后端异常时仍返回 200,但正文是报错信息或默认框架。
为什么值得处理
单个页面影响有限,成规模后问题会累积:一是持续消耗抓取预算,让爬虫把时间花在没有内容的 URL 上;二是这些 URL 一旦进入索引,会给站点整体质量判断带来噪音;三是用户从搜索结果点进来却得不到答案,体验上也是实打实的损失。
怎么确认一批 URL 属于软 404
- 抽样:从抓取日志或站点地图里挑出几个可疑模板,人工打开确认正文是否有实质内容。
- 对照状态码与正文长度:同一模板下,正文明显偏短的那批优先排查。
- 找统一提示语:把“已下架”“暂无内容”“无结果”这类文案当成特征串去批量筛选。
- 确认渲染层:如果内容由 JavaScript 加载,要按爬虫视角核对最终 DOM,而不是只看源码。
处理动作按情况分开
- 有替代页面的,例如商品换了型号,301 到最接近的可用页面。
- 确实永久没有的,返回 404 或 410,不要用 200 硬撑。
- 暂时缺内容但以后会补的,可以保留 200,但要确认页面本身有基础信息,而不是空壳。
- 参数组合造成的空页,从入口层面处理:不让内链和站点地图收录,必要时用 robots 规则限制抓取。
- 站点级的空壳模板,从模板层修改,让空状态返回正确状态码,比事后一条条清更省事。
和 noindex、canonical 的配合
如果页面有实际用途但不想让它进索引,用 noindex 更明确;如果同一份内容存在多个 URL,先把 canonical 定清楚,再决定空页的去留。两者不要混用在同一批 URL 上,信号容易互相抵消,最后谁也说不清爬虫听了哪一个。
软 404 的处理重点不是“删掉多少 URL”,而是让状态码、页面内容和你的收录意图三者保持一致。
收尾检查
- 处理一段时间后,回看这批 URL 在索引状态和抓取日志里的变化。
- 确认没有把正常页面误判成空页,尤其是内容靠前端异步加载的页面。
- 把这类检查固化成模板上线前的一个步骤,成本远低于事后排查。