蜘蛛抓走一个 URL,解析完之后发现页面上只有导航、侧栏和页脚,正文区一片空白——这种情况比返回 500 更隐蔽,因为从状态码上看,一切正常。这类页面通常被称为软 404 或空结果页,它们占用抓取时间,却换不回任何可索引的内容。
先分清三种“空壳”
- 真 404:URL 不存在,服务器返回 404 或 410,蜘蛛知道这里没有东西,通常抓一次就不再纠缠。
- 空结果页:搜索无结果、筛选条件组合后没有商品、分页翻过了最后一页,但页面依然返回 200。
- 软 404:内容已经下架或删除,页面却仍然返回 200,只是正文被替换成了“暂无内容”之类的提示。
三者对蜘蛛的意义完全不同。真 404 是明确信号,后两者是模糊信号,蜘蛛需要自己判断这个页面到底有没有价值,而这个判断过程本身就要花时间。
蜘蛛拿到空壳之后会做什么
它不会立刻放弃。第一次抓到空壳,蜘蛛会认为可能是暂时的,过一段时间再来一次。如果每次都是同样的空壳,回访间隔会逐渐拉长,但在那之前,这些 URL 已经占掉了若干次抓取。对于筛选参数、站内搜索、日历翻页这类会批量生成 URL 的模块,一个空页背后往往跟着成百上千个结构相同的地址,消耗是成倍放大的。
更麻烦的是,这些页面之间高度相似,正文缺失,模板重复。蜘蛛在同一批 URL 上反复花时间,留给真正正文页的抓取机会自然就少了。
判定要看三个信号
- HTTP 状态码:页面无内容却返回 200,是最基本的判断依据。注意区分“暂时为空”和“长期为空”,前者更适合返回 503 或让它先 404。
- 正文与模板的比例:把页面 HTML 去掉导航、页脚、脚本后,剩下的可读文本如果只有一两句话,基本可以归入空壳。
- 页面之间的相似度:同一模板下几十个 URL 的正文几乎一致,只是参数不同,这类页面通常在抓取时收益很低。
处理思路:能明确就明确
空结果页直接给出 404 或 410
搜索无结果、筛选无结果时,返回一个明确的不存在状态,比返回 200 加一句“没有找到”更省事。用户看到的是同样的提示页,蜘蛛得到的是清晰的信号。
已下架内容用 410 更干净
商品下架、文章删除后,如果确实没有替代页面,410 比 301 跳首页更合适。全部跳到首页会让首页承担大量无关的跳转,也让蜘蛛误以为这些旧地址仍然有效。
参数生成的空页,从入口处收敛
筛选、排序、站内搜索这类页面,如果组合后经常为空,可以考虑限制可被抓取的参数范围,或者让这些地址不进入内链和 Sitemap。规则之外的空页,再单独处理返回码。
不要用“暂无内容”长期占位
有些站点习惯保留旧 URL,把正文换成一句提示,靠 200 维持访问。短期可以,长期会让一批空壳永久留在抓取队列里。
判断标准其实很简单:这个 URL 如果被蜘蛛抓到,用户顺着搜索结果点进来,能不能看到有用的东西。如果答案是否定的,就不该用 200 把它挂在网上。
别忘了 Sitemap 和内链
处理完返回码,还要回头检查这些空页是不是仍被列在 Sitemap、分类列表、相关推荐里。一边让蜘蛛别抓,一边又主动把地址递过去,效果会互相抵消。内链尤其要注意,很多空页的入口就藏在“猜你喜欢”这类自动模块中。
一份简单的检查清单
- 抓取日志里状态码为 200 但响应体极小的 URL 有哪些;
- 站内搜索、筛选、分页的参数组合,是否会生成大量空结果页;
- 已下架内容的旧地址,现在是 200、301 还是 410;
- Sitemap 和自动推荐模块中,是否还包含着这些地址;
- 处理之后,隔一段时间再看日志,确认回访次数是否下降。
空壳页不会让站点立刻出问题,它们的影响是缓慢的:一点点吃掉抓取时间,一点点稀释站点整体的内容质量。定期清理,比等到抓取明显变慢再回头排查要轻松得多。