服务器返回 200,页面看起来也能正常打开,但正文里只有一句“该商品已下架”或“没有找到相关内容”——这类页面在蜘蛛眼里属于典型的软 404。它和真正的 404 的区别不在于用户看到什么,而在于 HTTP 状态码告诉了抓取程序什么。
状态码是蜘蛛判断一个 URL 生死的第一手信号。200 意味着“这个地址有一个可用资源”,于是它会把正文抓回去、送进后续处理流程;至于内容有没有意义,要等到更后面才判断。当站点里存在成批这样的空壳页时,被占用的抓取额度是实打实的。
常见的软 404 来源
- 商品、房源、职位等条目下架后,模板还在,200 照常返回
- 站内搜索结果页、筛选组合页在没有匹配结果时渲染出的空列表
- 分类目录下没有任何内容时的空分类页
- 分页参数越界,例如实际只有 5 页却请求第 50 页,页面显示“暂无数据”
- 错误处理写成统一的“友好提示页”,把所有异常都用 200 兜住
- CMS 默认生成的标签页、作者页、日期归档页,长期没有对应内容
蜘蛛拿到 200 之后会怎么走
它不会立刻把页面判定为无效。通常的路径是:抓取 HTML、解析正文、抽取链接,再交给索引环节评估。评估时,空壳页会面临几种结果:正文过短、与其他页面高度雷同、没有独特信息,于是不被保留;如果这类页面数量很大,站点在内容有效性上的整体表现也会被拖累。更麻烦的是链接抽取——很多空壳页的侧边栏和推荐位仍然输出大量链接,蜘蛛会顺着这些链接继续爬,把预算花在与内容无关的路径上。
分开处理比统一处理更有效
确实已经不存在的资源
返回 404;如果确定是永久移除,410 表达得更明确。不要用 200 加一句提示语来“安抚”访问者,这对用户和蜘蛛都没有好处。用户侧可以在页面上给出替代入口,但状态码要如实。
暂时缺内容但页面想保留
例如断货商品。保留 URL 是可以的,但页面不能只有一句话。补充同类替代、规格参数、相关说明,让它仍然是一个有信息的页面。如果预计长期无内容,考虑把权重合并到上级分类并做 301。
搜索结果页与筛选组合页
这类页面数量可以近乎无限,且大多没有独立价值。常见做法是在页面上加 noindex,让它们不进入索引,同时仍然允许抓取——noindex 需要蜘蛛先抓到页面才会生效。如果连抓取都不希望发生,再用 robots.txt 的 Disallow 拦,但要注意拦掉之后 noindex 也会一并失效。
分页越界
参数超出实际页数时,直接返回 404 或 301 回到最后一页,比渲染一个空列表更清楚,也不会让蜘蛛反复试探不存在的页码。
怎么排查
- 看抓取日志中 200 响应的分布,找出哪些路径下集中出现短页面模板
- 抽样统计页面正文字数,与同类正常页面的均值做对比
- 检查错误处理中间件,确认异常没有被统一包装成 200
- 检查翻页、筛选参数是否设置了上界,避免任意参数都能生成页面
- 站长工具里如有软 404 相关报告,可以拿来交叉验证
修复软 404 往往不是改一个状态码,而是先决定这个 URL 到底还应不应该继续存在。