有些 URL 抓取时状态码是 200,服务器也很配合,但打开一看,页面上除了导航、面包屑和页脚,什么都没有。这类页面行内常叫「软 404」:它没有报错,也不算真正的空响应,只是内容层面是空的。对蜘蛛来说,它拿到的是一次成功抓取,却几乎得不到可用信息。
软 404 为什么容易被忽略
因为它不产生错误日志。服务器只看到状态码 200,监控上一切正常;站长工具里也只是多了一个被访问的 URL。只有在抓取日志里把「状态码」和「响应体大小」放在一起看,才会发现一批体积明显偏小的页面。
常见的空内容页来源包括:筛选条件组合后没有结果、商品已下架但模板仍在、活动结束后的落地页、空标签或空分类、用户主页尚未发布内容、分页页码超出总页数、以及依赖前端渲染但渲染失败后剩下的空壳。
蜘蛛抓到空内容页之后会做什么
搜索引擎的具体处理并不公开,也不承诺某种固定结果,但从抓取行为上能观察到一些倾向:
- 首次抓取已经消耗了一次抓取动作,这部分成本收不回来;
- 同一模板批量生成、内容高度相似的空页面,重访间隔往往会拉长;
- 部分空页面可能被搜索引擎自行判定为软 404,从而从结果中移除;
- 如果空页面通过内链大量分发,还可能稀释真正有价值页面的抓取机会。
空页面最大的成本通常不是它自己有没有排名,而是它占用的那次抓取动作。
200、404、410、noindex 该怎么选
关键是想清楚:这个 URL 以后还会不会有内容。
- 内容永久没有了:直接返回 404;确定不会再回来且希望尽快清理的,可以用 410。
- 内容暂时消失:比如季节性缺货、临时下架,保留 200 是合理的,但页面上要给出明确说明和相关的替代入口,而不是只留一个空模板。
- 页面有存在价值,但不希望被索引:用 noindex。要注意 noindex 的意思是「别收录」,不是「别抓取」,蜘蛛仍可能来抓。
- 不要用 200 伪装错误页:把「没有找到」的内容用 200 返回,就是在制造软 404,长期看只会让抓取记录里多出一堆无信息量的 URL。
分页越界和站内搜索结果页
页码超过列表实际页数时,返回 404 比渲染一个空列表更清楚。站内搜索结果页通常建议 noindex,但它们依然是可被抓取的 URL,尤其是被外部链接或站内分享引用之后,仍会进入发现路径。
一套可落地的自查顺序
- 在抓取日志中筛出状态码为 200、但响应体大小明显低于同类型页面平均值的 URL;
- 对这些 URL 抽样,人工确认是否为筛选无结果、已下架、空分类等类型;
- 检查页面正文文本量,看是否只由导航、页脚和推荐模块构成;
- 观察这批 URL 的重访间隔是否在变长,作为价值判断的参考;
- 如果是前端渲染站点,确认关闭脚本后返回的 HTML 是否只是一个空壳。
从源头减少无效 URL
- 筛选、排序参数组合只在有结果时生成可抓取的链接,无结果时不在页面上外推;
- 列表分页链接不要指向越界页码,最后一页之后不再输出「下一页」;
- 分类和标签在内容为空时不要进入导航和站点地图;
- 用 robots.txt 屏蔽无价值参数时要有清醒认识:屏蔽抓取并不等于阻止 URL 被发现。
软 404 不是一个能一次修完的问题,它往往随着筛选、下架、活动上下线不断产生。比较务实的做法是把它当成日常清理项:定期从日志里捞出体积异常的 200 页面,判断它们该变成 404、该补充内容,还是该留在原地。整理一次之后,抓取记录会干净不少,真正需要更新的页面也更容易被安排上。