搜索抓取

蜘蛛抓取遇到 5xx 与超时:从日志到服务器的一轮排查

蜘蛛抓取时遇到 5xx、超时或连接重置,会直接影响后续抓取节奏。本文按状态码区分故障类型,给出从日志分组、CDN 回源到后端资源的排查顺序,并说明维护、过载和限流场景下怎样返回更清晰的状态,让服务器先稳定下来。

搜索抓取

蜘蛛抓取遇到 5xx 与超时:从日志到服务器的一轮排查

蜘蛛来抓页面时,如果服务器频繁返回 5xx、连接超时或直接断开,站点的 URL 发现和抓取节奏都会受到影响。它不像内容质量问题那样立刻体现在排名上,但会让蜘蛛在后续一段时间里降低访问频率,甚至暂时跳过部分路径。排查这类问题,重点不是“让蜘蛛多来”,而是先让服务器稳定回应。

先分清是哪种“抓取失败”

日志里同一段失败记录,背后的原因可能完全不同。按响应类型分开看,排查会快很多。

  • 500 Internal Server Error:程序报错、数据库连接失败、模板渲染异常。通常只影响部分 URL,但如果是公共组件出问题,可能成片出现。
  • 502 Bad Gateway / 504 Gateway Timeout:常见于 CDN 回源、Nginx 到后端应用之间。后端进程卡住、超时设置过短或过长,都可能触发。
  • 503 Service Unavailable:服务器主动表示暂时不可用。用于维护、过载保护时,最好配合 Retry-After 告知多久后再来。
  • 连接超时、连接重置:TCP 层就没完成,蜘蛛拿不到 HTTP 状态码。防火墙、安全组、WAF 误拦、服务器负载过高都可能导致。
  • 429 Too Many Requests:站点主动限流。它不等于宕机,但配置过严会让蜘蛛在正常抓取时也被挡住。

蜘蛛侧会怎样反应

不同搜索引擎的重试策略不完全一样,但通常有几类表现:对同一个 URL 短时间内重试;把该 URL 的再次抓取时间往后推;如果同一目录或同一主机下连续失败,降低整站抓取频率。这些反应是自动的,站点无法通过提交 Sitemap 立刻扭转。因此看到抓取量下降时,先确认服务器错误率,而不是急着加内链或改 Sitemap。

站点侧排查顺序

建议从日志开始,按“状态码—路径—时间—服务器节点”四个维度交叉看。

  1. 按状态码分组:统计蜘蛛 UA 下的 5xx、超时、429 占比。如果 5xx 集中在少数路径,先查对应功能;如果全站均匀出现,优先查服务器和网络层。
  2. 按时间对齐:错误是否集中在某个时段?比如备份任务、定时脚本、流量高峰。把抓取失败时间和服务器监控曲线放在一起看。
  3. 按路径分类:动态搜索页、筛选参数页、大量分页最容易拖慢数据库。若这些路径频繁超时,考虑限制蜘蛛抓取或改为静态缓存。
  4. 检查 CDN 与 WAF:回源超时、缓存绕过、安全规则误判都可能让蜘蛛收到 502 或 403。确认蜘蛛 IP 段是否被误拦,回源超时是否设置合理。
  5. 看后端资源:CPU、内存、数据库连接数、慢查询、PHP/Java 进程数。很多“蜘蛛抓取导致宕机”的案例,实际是单次请求成本太高,并发一上来就排队。

临时止血与长期修复

如果正在故障中,先保证返回明确状态。维护时用 503 加 Retry-After,比返回 200 的空页面或 404 更清晰。过载时对普通用户和蜘蛛都做合理限流,但不要把整个 IP 段一封了之。

长期修复通常落在几件事上:给高成本页面加缓存或静态化;把数据库慢查询优化掉;为蜘蛛单独设置合理的超时和并发;在监控里加入按状态码和按 UA 的告警。服务器稳定后,蜘蛛的抓取频率会逐步恢复,不需要用额外手段去“催”。

抓取问题里,服务器稳定性往往比链接结构更基础。链接决定蜘蛛能走到哪里,服务器决定它能不能走完。

几个容易踩的坑

  • 把 403 当 503 用。403 表示禁止访问,持续出现会让蜘蛛认为该路径不可抓,而不是“稍后再来”。
  • 故障期间反复提交 Sitemap。蜘蛛不会因为提交就忽略服务器错误,反而可能增加无效请求。
  • 只在 robots.txt 里封禁出问题的目录,却不修服务器。封禁只是减少抓取,不解决后端超时。
  • 忽略耗时字段。同样是 200,响应时间从 200ms 涨到 5s,蜘蛛的抓取效率也会明显下降。

处理蜘蛛抓取失败,思路可以简单一点:先看日志确认错误类型,再定位是网络、CDN、应用还是数据库,最后用缓存、限流和监控把问题收住。站点能稳定返回,URL 发现和抓取才有继续优化的空间。