硬 404 是服务器明确告诉你这个地址不存在。软 404 是另一回事:地址照常返回 200,页面也渲染出来了,但正文是空的,或者只剩下导航、页脚和一句“暂无数据”。对蜘蛛来说,这两者的体验差别很大——前者是明确的终点,后者是一个看起来有效、实际没有内容的地址。
什么叫软 404
蜘蛛的判断依据不是你的意图,而是它实际拿到的内容。一个返回 200 的空壳页,在它那里首先是一个“有效 URL”,然后才是一个没有价值的页面。这两件事叠在一起,就会占用本该分给其他页面的抓取额度。
很多站点并不是故意这样做的,而是模板、参数和业务逻辑叠加后的副产物。
空壳页通常从哪来
- 筛选与排序:颜色、价格、品牌多条件任意组合,同一批商品被拼出成百上千个地址。
- 站内搜索:查询词进了 URL,有结果时是列表,没结果时是空页,两种状态共用一个地址。
- 标签与聚合页:标签下只有一两篇内容,或聚合条件太窄,页面上拉不出东西。
- 下架与过期:商品下架、活动结束、文章删除,地址还在,正文已经抽走。
- 分页越界:超出范围的分页地址,有的站点返回 200 加一个空列表。
- 地区与权限:内容对部分地区或未登录用户不可见,页面结构还在,内容被隐藏。
为什么值得专门处理
抓取预算是有限的。蜘蛛这次把时间花在空壳页上,留给真正需要更新的页面的次数就少了。更麻烦的是 URL 发现:列表页里如果挂着大量空壳链接,蜘蛛会顺着它们一层层走下去,走进一片没有内容的区域,再回头时已经绕了不少弯路。
另外,软 404 会让整站的质量判断变得模糊。返回 200 的页面比例很高,但有效内容比例很低,长期看对抓取节奏没有好处。
先把它找出来
不用一开始就上复杂工具,先把几个数据对齐看。
- 抓取日志里筛出请求量高、但正文长度异常的 URL 模式,带参数的组合往往是重灾区。
- 看服务器状态码分布,200 的占比如果远高于有内容的页面数,就值得往下查。
- 抽取一批 200 页面,比较标题、正文长度和出链数量,只有壳没有肉的就是候选。
- 观察蜘蛛在这些页面上的后续行为:抓完就走、不再深入,本身就是一种信号。
处理方式:状态码、入口、模板三件事
状态码要说实话
内容确实不存在,就返回 404;确定永久不再提供,可以用 410。别用 200 兜底所有异常,也别把空页统一跳到首页——那会把一堆地址变成同一个目标。已经进入索引但没有内容的页面,可以先用 noindex 让它退出,再决定地址是否保留。
从入口上减少生成
参数组合生成的地址,最有效的处理是不让它出现在内链里。列表页、筛选面板、分页导航,都是蜘蛛发现这些地址的地方。
- 筛选条件收敛到少数几个确有搜索量的组合,其余不输出可点击链接。
- 搜索无结果时,不要沿用同一套可被抓取的地址模板。
- 分页给出明确边界,最后一页之后不再输出下一页链接。
- 标签页设置最小内容量,达不到就不生成页面,也不放进 Sitemap。
模板层面别留空壳
很多空壳是模板渲染出来的:容器还在,循环为空。可以在服务端先判断是否有内容,没有内容就不输出页面主体,也不要输出指向它的链接。列表类页面尤其要注意,空结果不要在导航和推荐位里留下可点的入口。
蜘蛛不会因为你返回 200 就认为这个页面有价值,它只看页面上实际有什么。
已经存在的空壳怎么收尾
分几类处理会更清楚。有替代内容的,比如下架商品有同类可推荐,可以保留地址并给出替代入口;没有替代内容的,直接 404 或 410,同时把指向它的内链清理掉。数量大的话分批来,先处理被抓取最频繁的那一批,效果最直接。
软 404 不是抓取问题的全部,但它是很容易被忽略的一类。每周花一点时间看抓取日志里的异常 URL 模式,比事后追着蜘蛛跑要省力得多。