蜘蛛拿到一个 URL,服务器返回 200,页面也顺利下载完成——从抓取日志看这是一次成功请求。但如果这个页面里没有真正的内容主体,蜘蛛最终还是会把 URL 放进“低价值”那一堆。这类页面通常被称为软 404:状态码是正常的,内容却是空的。
它和 404 的差别在于成本。真正的 404 是一次快速失败,蜘蛛很快知道这里没有东西,之后减少回访即可;软 404 要求蜘蛛把 HTML 完整下载、解析、和站内其他页面比较,最后才得出同样的结论。同样的抓取额度,被消耗在了一次没有结果的判断上。
哪些页面最容易变成空壳
- 无结果的搜索页和筛选页:用户输入的关键词组合没有匹配项,页面只剩标题和一句“没有找到相关内容”。
- 空分类与空标签页:分类下的商品或文章已全部下架、迁移,模板还在正常渲染。
- 售罄或已下架的商品页:只剩框架、导航和推荐位,主体信息被清空。
- 过期的活动与专题页:活动结束后内容被撤下,URL 仍然可以访问。
- 渲染失败的页面:前端依赖的接口报错,HTML 里只有页头页脚,主体是一个空容器。
蜘蛛怎么判断这是空壳
搜索引擎没有公开判定公式,但从抓取行为能看出几个常被参考的信号:
- 正文文本量明显低于同模板的其他页面;
- 页面主体与站内大量其他页面高度相似,只有标题不同;
- 页面里的链接极少,或者链接都集中在页头页脚这类全站公共区域;
- 用户进入后很快返回,停留时间接近于零。
反过来,如果页面主体清晰、有独立的文字描述、有指向相关内容的链接,即便内容不多,也不太会被当成空壳。
空壳页面带来的实际损失
最直接的损失是抓取额度。一个站点每天能被抓取的页面上限有限,空壳页面占的比例越高,真正需要更新的页面被轮到的机会就越少。其次是内链:如果站内大量链接指向这些空页面,权重会在这些死胡同里被摊薄,蜘蛛顺着链接走过去也拿不到新东西。最后是判断噪声——日志里一批 200 状态码的请求看起来都很正常,掩盖了真正的结构问题。
处理顺序:先止血,再清理
- 先找到来源。从服务器日志和站长平台报告中筛出有抓取、未收录的 URL 集合,按 URL 模式归类,通常很快能看出是搜索参数、筛选参数,还是某个即将下线的栏目。
- 能删内链就先删。空页面的入口大多来自内链和 Sitemap,把这两处的引用去掉,比改状态码见效更快。
- 该给什么状态码就给什么。永久下线的页面返回 410 或 404;临时缺货、可能恢复的页面保留 200,但要补上内容或加 noindex 更合适。
- 搜索和筛选结果页。可以对无结果的组合直接返回 404 或做 noindex,同时用 robots.txt 屏蔽高风险的参数组合,避免蜘蛛在参数空间里反复试探。
- 检查渲染链路。如果是前端渲染导致的空壳,需要确认蜘蛛执行脚本时接口是否可达、返回是否稳定,别让一次接口超时变成一批空页面。
日志里的识别方法
软 404 不会以状态码的形式出现在日志里,需要换个角度找。一种做法是把日志中蜘蛛抓取的 URL 与页面正文长度做关联,正文低于某个阈值的页面单独列出来看;另一种是观察抓取频次的变化,某个 URL 模板的抓取次数持续下降,往往说明蜘蛛已经把它归到低价值一类。把这两条线索交叉起来,通常能定位到大部分空壳页面。
软 404 的本质不是页面出错,而是页面存在、却对用户和蜘蛛都没有信息量。处理它的关键是减少这类 URL 的产生,而不仅仅是在被抓之后去清理。
最后一点:清理空壳页面是个持续工作。栏目调整、商品下架、活动结束都会不断产生新的空页面,最好在模板层面加一道判断——内容为空时不生成页面,或直接返回合适的错误状态码,而不是让它以一个完整的 200 页面留在站点里。