蜘蛛来一趟是有成本的:服务器要响应、页面要下载、链接要解析。如果抓到的是一堆无意义页面,这些成本就白花了。相比干脆利落的 404,更容易被忽略的是软 404——页面其实已经没什么内容了,却依然返回 200 状态码,看起来像正常页面。
什么是软 404,为什么它比 404 更麻烦
404 是明确的信号:这个地址没有内容。搜索引擎收到后会逐步降低对该地址的抓取频率,确认后从索引中移除。软 404 不一样,它返回 200,正文却可能是空的、一句“抱歉,没有找到”,或者一个空列表。蜘蛛拿到的是“正常页面”,于是可能继续抓、继续解析,甚至把这种空壳页当成有效内容处理。
更麻烦的是,软 404 往往成批出现:搜索无结果页、筛选条件组合出的空列表、已下架商品的详情页、被清空的栏目页。单看一个没什么,累积起来会占掉可观的抓取预算。
常见的软 404 场景
- 站内搜索无结果页:用户搜了一个不存在的词,页面返回 200,正文只有“没有找到相关内容”。
- 电商或下载站的已下架详情页:商品没了,页面还在,返回 200 但只剩推荐位。
- 筛选与排序组合页:多个条件叠加后结果为空,状态码仍是 200。
- 被清空的栏目页:栏目下内容全部移除,页面只剩标题和空列表。
- 过期活动页:活动结束、内容撤下,地址仍可正常访问。
- 分页越界:超出实际页数的 page=N 返回 200 的空列表。
怎么自查
1. 用状态码和响应体大小交叉看
单纯看状态码没用,因为软 404 就是 200。可以把抓取日志或爬虫工具的导出结果按 URL 分组,筛出“状态码 200 但响应体很小”的页面。响应体只有几百字节、正文词数极少的地址,值得逐个打开确认。
2. 抽查典型的空状态页
把站内搜索、筛选、下架、过期这几类页面各挑几个样本,用命令行工具或浏览器开发者工具看返回头,再看正文。重点确认三件事:返回的是不是 200、页面上有没有实质内容、是否被写进了站点地图或内链。
3. 看日志里的重复抓取
如果某个地址在日志里被反复抓取,但正文长期没有变化、内容量又很少,基本可以判断它要么是软 404,要么是低价值页面。把这类地址列出来,比逐个猜要快得多。
处理方式
- 确实没有内容的固定地址,直接返回 404 或 410。410 表示永久移除,语义更明确,但不必强求,404 也够用。
- 临时缺内容的页面,如果只是短暂缺货或短期下线,可以保留 200,但补充说明文字和替代入口,别让它变成一张空壳。
- 搜索与筛选结果页,一般用 robots.txt 限制抓取,或者加 noindex 标签,两者选一个即可,同时用容易互相干扰。
- 分页越界,返回 404,或者把超出范围的页码统一指向最后一页。
- 已下架的内容,如果还有同类商品或相关文章,可以跳转过去;没有就让它正常 404。
死链巡检该按什么节奏做
死链不是清一次就没事了。内容下线、栏目调整、外链失效都会不断产生新的,比较省力的做法是把它变成例行检查:
- 每月跑一次全站爬取,导出 404 与 410 列表,按来源分类。
- 区分“站内链接指向了死链”和“内容本身已下线”,前者要尽快改,后者只需确认状态码正确。
- 留意被外部网站链接的地址,这类死链影响更直接。
- 改版或大批量下线内容后额外跑一次,别等例行周期。
软 404 不会报错,也不会在监控里亮红灯,所以容易被长期忽略。判断标准可以很简单:如果一个页面返回 200,但用户打开后得不到任何有用信息,那它对蜘蛛来说也是同样的空跑。
写在最后
处理软 404 和死链,本质上是在减少无效抓取。做完之后,蜘蛛会把时间花在真正有内容的页面上,站点整体的抓取效率也更容易稳定下来。这件事不复杂,难的是持续做,建议把它和状态码监控、日志巡检放进同一张例行清单。