经常有人问:蜘蛛池入口页因为配置失误返回了 404,但页面 HTML 里其实还写着目标 URL 的链接,这种情况下搜索蜘蛛还会不会顺着链接爬过去?这个问题没有简单的会或不会,需要拆成两件事来看。
状态码和正文是两套信号
搜索蜘蛛请求一个 URL 时,会同时拿到 HTTP 状态码和响应正文。状态码是它对这次请求最优先的判断依据,正文属于次要补充。当状态码是 404 或 410 时,爬虫基本已经认定这个地址没有可用内容,至于正文里写了什么,处理优先级会明显下降。
搜索蜘蛛遇到 404 时通常怎么做
- 把该 URL 从待抓取队列中清理掉,短期内不再重复请求;
- 已收录的地址会逐步从索引中移除;
- 正文里的链接仍可能被解析出来进入发现队列,但优先级很低,实际被抓取的概率远低于正常页面;
- 如果同一个入口页反复返回 404,这个目录甚至整个子域的抓取频率都可能下降。
换句话说,链接被解析出来和链接会被抓取是两件事。偶尔发现一两个 URL,并不代表目标站能稳定拿到抓取。
软 404 是另一种麻烦
还有一种相反的情况:页面返回 200,但内容空洞、模板化,或者直接写着页面不存在。搜索蜘蛛会用内容特征把它判成软 404,效果和真 404 相近,同样不会给目标 URL 带来正向帮助。所以无论走哪条路,让入口页返回 200 且正文正常,都是基本前提。
真正需要检查的几件事
- 用 curl 或浏览器开发者工具查看响应头里的状态码,不要只看页面渲染结果;
- 确认反向代理、CDN、后端路由没有把入口页错误映射到不存在的路径;
- 检查是否有重写规则把带参数的 URL 一律丢给 404 处理器;
- 确认 404 页面本身不要再携带目标链接,避免给爬虫发送自相矛盾的信号。
404 页面里的链接会不会污染目标站
有些人担心 404 页面上的目标链接会连累目标站。实际上这种影响通常很小,因为爬虫很少把它当作有效发现路径。真正值得担心的不是污染,而是入口页白做:你花心思铺的链接,因为一个状态码配置错误,根本没有进入正常的抓取流程。
如果已经出现大批 404
先修状态码,再谈链接。修正后可以在站长平台重新提交入口页和 sitemap,让爬虫重新认识这些地址。已经流失的抓取频率需要时间恢复,不要指望一次性提交就立刻回到原来的水平。同时留意服务器日志里目标 URL 的抓取记录,用实际数据判断恢复情况,而不是凭感觉猜测。
入口页的核心作用是让目标 URL 被稳定发现。状态码异常、内容异常、速度异常,任何一项都可能让前面的努力白费。与其研究 404 页面里的链接能不能被读到,不如先把 200 响应和正常正文保证好。