搜索抓取

搜索蜘蛛抓取:WAF 与安全策略误拦蜘蛛请求的入口可达性核对

抓取量下滑时,问题常出在站点前面的安全层。本文区分硬拦截与返回 200 的空壳挑战页两种表现,梳理 UA 黑名单、CC 防护、地域封锁等常见误拦来源,给出从访问日志到 WAF 命中记录的核对顺序,以及按 IP 段放行的长期维护思路。

搜索抓取

搜索蜘蛛抓取:WAF 与安全策略误拦蜘蛛请求的入口可达性核对

抓取入口不可达的原因,很多时候不在 DNS、证书或 robots 文件,而在站点前面那一层安全策略。云 WAF、CC 防护、IP 频率限制、地域封锁,任何一条规则命中搜索蜘蛛的请求,都可能在服务器日志里留下一个 403,或者在统计面板上表现为抓取量突然下滑,而站点本身并没有做任何改动。

先分清两种拦截表现

一种是硬拦截:返回 403、406 或 503,蜘蛛直接拿不到内容。另一种更隐蔽:返回 200,但正文是一个 JavaScript 挑战页或验证码页,蜘蛛解析后得到的是一段空壳内容,长期可能被当作低质量页面处理。排查时要先把这两种情况分开,因为成因和处理方式完全不同。

常见的误拦来源

  • UA 黑名单正则过宽:为了挡采集程序,规则写成包含 bot、spider、crawl 等关键词就拦,结果把正常搜索蜘蛛一并挡掉。
  • CC 防护与频率限制:蜘蛛在短时间内对同一列表页或分页发出较多请求,触发阈值后整段来源 IP 被临时限速。
  • 地域与海外 IP 封锁:蜘蛛节点分布广泛,只放行本地访问会拦掉相当一部分抓取来源。
  • JS 挑战与验证中间页:开启全站挑战后,蜘蛛无法执行脚本,拿到的是占位 HTML。
  • CDN 与源站策略不一致:CDN 层放行,源站 WAF 仍拦截,日志上看起来像随机失败。

核对顺序建议

  1. 从访问日志中筛出蜘蛛 UA 的请求,按状态码和响应体大小分组,先确认是硬拦截还是空壳页。
  2. 把被拦请求的时间、路径、来源 IP 与 WAF 拦截日志对齐,找到具体命中的规则名称。
  3. 用相同 URL 分别带蜘蛛 UA、普通 UA 和不带 UA 发请求,对比状态码与正文差异。
  4. 检查响应中是否包含跳转脚本或 meta refresh,确认是否存在挑战页中间层。
  5. 放行时优先按 IP 段或反向解析校验,而不是只匹配 UA 字符串。
  6. 放行后只改这一项,观察一到两周的抓取量与状态码分布,再决定是否继续调整其他策略。

几个容易踩的坑

第一,只白名单 UA 字符串并不稳妥,UA 可以伪造,也可能被后续规则覆盖,结合来源 IP 段做双向校验更可靠。第二,如果把拦截响应的状态码写成 503,蜘蛛会判断为临时不可用,从而拉长回访间隔,短期抓取量下降往往比返回 403 更明显。第三,限速规则常常作用于整个网段,蜘蛛请求分散在多个节点上,可能只有一部分节点被限制,日志看起来是随机失败,容易被误判成服务器性能问题。

排查入口不可达时,先看安全层的命中记录,再去看服务器负载,顺序反了会浪费很多时间。

把放行策略做成长期机制

建议把蜘蛛放行规则单独成组,和面向普通用户的防护规则分开维护;每次调整安全策略时,把搜索抓取的状态码分布加入观察指标;对关键栏目页和分页做定期抽查,确认返回的是正文而不是挑战页。这些动作的目的是保证入口可达、内容可解析,抓取节奏与收录结果仍受多种因素共同影响,无法靠单一配置决定。