搜索抓取

蜘蛛被挡在门外:WAF、频控与 UA 校验的误伤排查

蜘蛛抓取量下滑,问题未必在内容或内链,也可能是站点的安全策略把蜘蛛拦在了门外。本文说明 WAF、频控和 UA 校验为什么会误伤搜索抓取,如何从日志里的 403、429 以及「返回 200 的挑战页」识别这类问题,并给出按 IP 段加白、单独限速、放行 robots.txt 与 Sitemap 等实操思路。

搜索抓取

蜘蛛被挡在门外:WAF、频控与 UA 校验的误伤排查

蜘蛛抓不到页面,很多站长第一反应是内容或链接的问题,于是去改内链、重新提交 Sitemap。但有一类情况常被忽略:蜘蛛根本没走到应用层,或者走到了却被站点的安全策略拦在门口。这类问题在日志里往往表现为一段时间内某个搜索引擎 UA 的请求大量返回 403、429,随后整站的抓取量跟着下滑。

安全策略为什么会误伤蜘蛛

WAF、CDN 和主机面板的防护规则,判断逻辑大多基于请求特征,而不是「来的是谁」。常见的判断维度有三类:一是请求频率,单位时间内的请求数超过阈值就拦;二是请求特征,比如 UA 字符串、请求头缺失、访问路径的规律性;三是行为模式,比如短时间内遍历大量相似 URL。

问题在于,搜索引擎蜘蛛恰好同时符合这几条:它会并发请求、会按一定规律遍历 URL、请求头相对固定。如果防护规则只做粗粒度匹配,很容易把正常抓取当成异常流量处理。

几种常见的误伤形态

直接返回 403 或 429

这是最直接的一种。蜘蛛拿到 403,会认为该 URL 不可访问,短期内不再重试;拿到 429 则会理解为服务器要求降速,通常会降低抓取频率,但如果持续返回,抓取量会明显收缩。两种情况下,站点看起来「一切正常」,实际已经丢掉了大量抓取机会。

返回正常状态码,但内容是挑战页

更隐蔽的一种:防护层返回 200,页面里却是 JS 挑战、验证码或「正在检查浏览器」的提示。蜘蛛看到的是一个几乎没有正文的页面,既抓不到内容,也发现不了新链接。日志里状态码一切正常,很难一眼看出来。

UA 校验过严

有的站点为了防采集,直接按 UA 做白名单或黑名单。规则写得不严谨时,可能出现桌面蜘蛛放行、移动蜘蛛被拦,或者旧版本 UA 被拦、新版本也被拦的情况。表现是同一批 URL,两套 UA 的抓取结果差异很大。

  • 按 UA 字符串做模糊匹配,命中率低,误伤概率高
  • 按 IP 做频控,但没有给搜索引擎预留额度
  • 防护规则对整站生效,连 robots.txt 和 Sitemap 文件本身也被拦

怎么确认是不是被挡了

  1. 先在服务器日志里按蜘蛛 UA 过滤,看响应码分布。正常抓取应以 200 为主,如果 403、429、503 占比明显,基本可以确认问题出在防护层。
  2. 检查 robots.txt 和 Sitemap 文件是否也能被正常访问。如果连这两个文件都被拦截,蜘蛛对整个站点的理解都会受影响。
  3. 用带蜘蛛 UA 的请求做一次模拟访问,观察是否返回挑战页。注意这只能做粗略判断,真实身份校验还要看 IP 段和反向解析。
  4. 对照搜索平台的抓取统计与抓取错误报告,看异常是否集中在某个时间段或某个目录下。

放行蜘蛛的几个做法

放行不等于关掉防护,关键是把「搜索引擎蜘蛛」和「普通自动化流量」分开处理。

  • 按 IP 段加白名单。主流搜索引擎都会公布爬虫 IP 段,结合反向 DNS 校验,比单纯看 UA 可靠得多。UA 可以伪造,IP 段和解析记录不容易。
  • 给蜘蛛单独限速。不要让它和普通用户共用同一个频率阈值,否则高峰期蜘蛛就是第一批被限流的对象。
  • 不要对已知蜘蛛启用 JS 挑战和验证码。蜘蛛不执行这类交互,结果就是拿到一个空页面。
  • 把 robots.txt、Sitemap 和索引文件放进放行名单。这些文件体积小、请求少,不应该被安全策略影响。
  • 调整后观察一段时间。抓取频率的恢复通常比下降慢,不会立刻回到原来的水平。
安全策略和搜索抓取并不是对立的。真正需要防的是高频、无规律、伪装身份的流量,而搜索引擎蜘蛛的请求特征是有公开规律可循的。把规则写细一点,比一刀切更省事。

小结

抓取量下降时,除了检查内容、内链和 Sitemap,也值得花十分钟看看服务器日志里的响应码。如果蜘蛛 UA 对应的是成片的 403、429,那么问题不在页面本身,而在门口。先把这条路径理顺,再谈 URL 发现和抓取深度才有意义。