蜘蛛来抓页面时,服务器这一端如果没有正常把 HTML 交出去,这次抓取就是失败的。很多站长看到日志里成片的 5xx 或超时,第一反应是页面要掉收录了,其实要先分清失败的类型和持续时间,再判断影响范围。
抓取失败和收录失败不是一回事
抓取是蜘蛛取回页面的动作,收录是搜索引擎把页面存进索引并允许它参与展现。抓取失败时,蜘蛛手上拿不到新内容,但它不一定马上把已有的索引条目删掉。短暂故障期间,索引里往往还保留着上一次成功抓取的版本,只是不会更新。
真正需要警惕的是持续失败。如果同一个 URL 连着几天、几周都抓不下来,蜘蛛会认为这个地址不稳定,先降低回访频率,再考虑把它移出索引。
按状态码区分失败的严重程度
- 5xx(500、502、503、504):服务器侧问题,通常是程序报错、数据库连不上、网关超时。这属于临时性失败,蜘蛛一般会稍后再来;但如果 5xx 连续出现,影响就会累积。
- 连接超时、无响应:蜘蛛等待一段时间没拿到数据就断开。页面响应特别慢时,蜘蛛可能抓到一半就放弃,长期如此会明显拉低抓取效率。
- 429 请求过多:服务器主动限流。这通常说明抓取速度超出了你的承受范围,需要检查限流规则是不是把蜘蛛一起挡了。
- 403、连接被拒:多为防护策略、UA 黑名单或 IP 封禁导致。蜘蛛看到的是拒绝访问,处理方式和服务器故障并不相同。
哪些故障其实是误伤
日志里大量 403 或超时,未必是服务器坏了。常见原因有:CDN 或 WAF 把搜索引擎的 UA 当成攻击流量拦掉;机房对某些 IP 段做了限制;站点在夜间跑全量备份或数据导出,把带宽占满,蜘蛛正好撞上。这些情况在服务器监控上看可能一切正常,只有从蜘蛛的视角看才是一片失败。
排查抓取失败,别只看服务器自己的监控面板。要按蜘蛛的 UA 和 IP 取一段日志,看它实际收到的是什么响应。
一条可用的排查顺序
- 从日志里筛出搜索引擎 UA 的请求,统计 5xx、超时、403 各自的占比。
- 随机挑几个失败的 URL,用普通浏览器和模拟蜘蛛两种方式各访问一次,看结果是否一致。一致则偏服务器问题,不一致多半是防护侧拦截。
- 确认失败是集中在某个目录、某类页面,还是全站都有。集中在局部,通常和那段代码或那块数据有关。
- 看失败的时间分布。如果集中在固定时段,优先怀疑定时任务、备份或流量高峰。
- 修复后观察回访。蜘蛛不会立刻恢复原来的频率,通常需要一段时间才回到正常水平。
降低失败率的几个动作
- 给动态页面和查询接口加缓存,减少数据库压力,这是最直接的一步。
- 在防护规则里为已知的搜索引擎 IP 段或已验证的 UA 放行,别让 WAF 一刀切。
- 把重任务(备份、数据导出、全站重建)挪到抓取低谷时段。
- 页面本身要能快速返回首字节,别把主要内容压在需要长时间计算的接口后面。
- 如果确实需要临时下线,用 503 配合 Retry-After 头,比直接返回 404 或 500 表达得更清楚。
总结一句:偶发的 5xx 和超时,多数情况下不会立刻撼动收录,但它会消耗蜘蛛对你站点的信任。把失败率压在一个较低的水平,比事后补救掉收录要省事得多。