搜索抓取

当蜘蛛被 WAF 拦住:URL 能发现,抓取却进不来

URL 发现和抓取是两回事。CDN、WAF、防火墙、限速规则如果误拦搜索引擎蜘蛛,Sitemap 和日志里能看到入口,实际抓取却会变成 403、503 或空响应。本文从日志特征、常见误拦配置和验证方法入手,梳理排查顺序。

搜索抓取

当蜘蛛被 WAF 拦住:URL 能发现,抓取却进不来

URL 发现正常,不代表抓取通道畅通

Sitemap 提交了,内链也加了,日志里能看到蜘蛛访问首页或 sitemap,但目标 URL 始终没有抓取记录。这种情况下,问题往往不在 URL 发现,而在抓取请求进入服务器之前就被拦下了。CDN、WAF、云防火墙、限速插件都可能成为这道闸门。

蜘蛛发起请求时,和普通用户浏览器没有本质区别:同样经过 DNS、CDN 节点、WAF 规则、源站防火墙。如果其中某一层返回 403、406、429、503,或者直接断开连接,蜘蛛拿不到内容,也就不会继续深入抓取。

常见的误拦方式

  • User-Agent 黑名单过宽:规则里写了包含“bot”“spider”“crawler”就拦截,结果把正常搜索引擎蜘蛛也挡在外面。蜘蛛池工具常伪造 UA,但搜索引擎蜘蛛也有固定 UA,不能一概而论。
  • IP 段未放行:WAF 只允许已知 IP 访问,但搜索引擎蜘蛛的出口 IP 会变化或未被及时更新。旧 IP 段失效后,新请求会被当成异常流量。
  • 频率限制过低:CDN 或防火墙按 IP 限速,蜘蛛短时间内抓取多个 URL 时触发 429。抓取队列会因此降低频率,严重时停止访问该目录。
  • 地域封禁:只允许国内 IP 访问,而蜘蛛节点在海外,或者反过来。地域规则命中后直接返回 403,日志里看不到源站记录。
  • JS 挑战与验证码:WAF 对疑似机器人返回挑战页,蜘蛛无法执行 JS,只能拿到空页面或跳转页,URL 后续抓取路径就断了。

怎么判断是误拦而不是其他问题

先看 CDN 和 WAF 日志,而不是只看源站日志。源站日志没有记录,不代表蜘蛛没来,可能请求在边缘节点就被处理掉了。重点看状态码分布:如果某个目录集中出现 403、429、503,且 UA 是搜索引擎蜘蛛,就要怀疑规则误拦。

再看响应内容。用站长工具或日志里的 UA、IP 做一次模拟请求,观察返回的是正常 HTML、验证码页、空响应还是跳转。如果模拟请求能拿到内容,但蜘蛛抓取记录仍然缺失,可能是 IP 或 UA 组合被单独限制。

不要只用浏览器打开页面来判断。浏览器带 Cookie、执行 JS、走本地网络,和蜘蛛的请求环境差别很大。

调整配置时的顺序

  1. 先把搜索引擎蜘蛛的官方 UA 和 IP 段加入白名单,优先于其他限速和黑名单规则。
  2. 检查 WAF 规则中是否有“包含 bot 即拦截”这类宽泛条件,改成精确匹配或只拦已知恶意特征。
  3. 对已验证的蜘蛛 IP 放宽频率限制,但保留异常突增的监控,避免影响正常防护。
  4. 如果使用 JS 挑战,给搜索引擎蜘蛛单独放行,不要让它们走验证码流程。
  5. 调整后观察 3 到 7 天日志,确认目标 URL 是否出现抓取记录,状态码是否回到 200。

验证与复盘

改完规则后,不要只看首页。选几个之前被拦的深层 URL,结合 CDN 日志和源站日志,确认请求完整到达源站并返回正常内容。如果仍然失败,逐层排查:DNS 解析、CDN 回源、WAF 规则、源站防火墙、应用层限速。

另外,蜘蛛池或第三方抓取工具产生的流量可能触发防护规则,这本身不一定是误拦。区分方法是看 UA、IP 和请求路径是否符合搜索引擎公开信息。如果大部分异常请求来自非官方 IP,就不应该为了放行蜘蛛而关闭整体防护。

最后,把这次调整记录到运维文档里,包括规则名称、修改时间、验证 URL 和结果。下次抓取频次下降时,可以按同样顺序快速定位,而不是从内容层面反复猜测。