搜索抓取

软 404 与空壳页:返回 200 的 URL 为什么抓不到东西

站点里总有一些 URL 能返回 200,却没有正文、没有标题,也没有下一步可走。它们不是死链,却同样让蜘蛛白跑一趟。这篇讲清软 404 与空壳页的常见来源、用日志和状态码把它们找出来的方法,以及从状态码、内链入口和模板三个层面怎么收拾。

搜索抓取

软 404 与空壳页:返回 200 的 URL 为什么抓不到东西

硬 404 是服务器明确告诉你这个地址不存在。软 404 是另一回事:地址照常返回 200,页面也渲染出来了,但正文是空的,或者只剩下导航、页脚和一句“暂无数据”。对蜘蛛来说,这两者的体验差别很大——前者是明确的终点,后者是一个看起来有效、实际没有内容的地址。

什么叫软 404

蜘蛛的判断依据不是你的意图,而是它实际拿到的内容。一个返回 200 的空壳页,在它那里首先是一个“有效 URL”,然后才是一个没有价值的页面。这两件事叠在一起,就会占用本该分给其他页面的抓取额度。

很多站点并不是故意这样做的,而是模板、参数和业务逻辑叠加后的副产物。

空壳页通常从哪来

  • 筛选与排序:颜色、价格、品牌多条件任意组合,同一批商品被拼出成百上千个地址。
  • 站内搜索:查询词进了 URL,有结果时是列表,没结果时是空页,两种状态共用一个地址。
  • 标签与聚合页:标签下只有一两篇内容,或聚合条件太窄,页面上拉不出东西。
  • 下架与过期:商品下架、活动结束、文章删除,地址还在,正文已经抽走。
  • 分页越界:超出范围的分页地址,有的站点返回 200 加一个空列表。
  • 地区与权限:内容对部分地区或未登录用户不可见,页面结构还在,内容被隐藏。

为什么值得专门处理

抓取预算是有限的。蜘蛛这次把时间花在空壳页上,留给真正需要更新的页面的次数就少了。更麻烦的是 URL 发现:列表页里如果挂着大量空壳链接,蜘蛛会顺着它们一层层走下去,走进一片没有内容的区域,再回头时已经绕了不少弯路。

另外,软 404 会让整站的质量判断变得模糊。返回 200 的页面比例很高,但有效内容比例很低,长期看对抓取节奏没有好处。

先把它找出来

不用一开始就上复杂工具,先把几个数据对齐看。

  1. 抓取日志里筛出请求量高、但正文长度异常的 URL 模式,带参数的组合往往是重灾区。
  2. 看服务器状态码分布,200 的占比如果远高于有内容的页面数,就值得往下查。
  3. 抽取一批 200 页面,比较标题、正文长度和出链数量,只有壳没有肉的就是候选。
  4. 观察蜘蛛在这些页面上的后续行为:抓完就走、不再深入,本身就是一种信号。

处理方式:状态码、入口、模板三件事

状态码要说实话

内容确实不存在,就返回 404;确定永久不再提供,可以用 410。别用 200 兜底所有异常,也别把空页统一跳到首页——那会把一堆地址变成同一个目标。已经进入索引但没有内容的页面,可以先用 noindex 让它退出,再决定地址是否保留。

从入口上减少生成

参数组合生成的地址,最有效的处理是不让它出现在内链里。列表页、筛选面板、分页导航,都是蜘蛛发现这些地址的地方。

  • 筛选条件收敛到少数几个确有搜索量的组合,其余不输出可点击链接。
  • 搜索无结果时,不要沿用同一套可被抓取的地址模板。
  • 分页给出明确边界,最后一页之后不再输出下一页链接。
  • 标签页设置最小内容量,达不到就不生成页面,也不放进 Sitemap。

模板层面别留空壳

很多空壳是模板渲染出来的:容器还在,循环为空。可以在服务端先判断是否有内容,没有内容就不输出页面主体,也不要输出指向它的链接。列表类页面尤其要注意,空结果不要在导航和推荐位里留下可点的入口。

蜘蛛不会因为你返回 200 就认为这个页面有价值,它只看页面上实际有什么。

已经存在的空壳怎么收尾

分几类处理会更清楚。有替代内容的,比如下架商品有同类可推荐,可以保留地址并给出替代入口;没有替代内容的,直接 404 或 410,同时把指向它的内链清理掉。数量大的话分批来,先处理被抓取最频繁的那一批,效果最直接。

软 404 不是抓取问题的全部,但它是很容易被忽略的一类。每周花一点时间看抓取日志里的异常 URL 模式,比事后追着蜘蛛跑要省力得多。