很多站长排查抓取问题时,会把注意力放在 Sitemap、内链和响应时间上,却忽略了一个更前置的环节:请求根本没到站点程序,就被 WAF、限速或防火墙拦掉了。蜘蛛拿到的是 403 或 429,而你在应用日志里什么都看不到。
被拦截时的典型表现
- 服务器访问日志里,来自已知爬虫的请求大量返回 403、429,或者干脆没有记录,只在 WAF 日志中出现;
- 某个时间点起抓取频次断崖式下降,但站点内容和内链结构并没有改动;
- 抓取统计与自家日志对不上,Sitemap 长时间停留在“已提交未抓取”;
- 只有带参数的 URL 被拦,首页和静态页正常,这类情况通常是规则命中了查询字符串。
误伤一般来自这几个地方
WAF 的通用规则集
多数 WAF 默认规则会拦截含 SQL 关键字、脚本片段、超长参数或特殊字符的请求。而站点的筛选参数、搜索页 URL、老版本 CMS 的路径里,恰好可能包含这些字符串,蜘蛛抓到这些 URL 时就会被一并拒掉。
频率限制与 CC 防护
蜘蛛抓取本身就是短时间内的大量请求。如果限速策略只按 IP 计数、不区分来源,专业爬虫很容易被当成攻击流量。反过来,有些站点为了“防采集”把阈值调得极低,正常访客滑动列表也会触发拦截。
User-Agent 黑名单
UA 字符串可以被任意伪造,用黑名单去拦爬虫既拦不住恶意采集,又容易误伤:部分防护产品的 UA 库更新不及时,会把新版爬虫标识当成可疑对象。而用 UA 做白名单同样不可靠,攻击者复制字符串就能绕过。
先确认是不是真蜘蛛,再谈放行
不要只看 UA。更稳妥的做法是核对请求来源 IP 是否属于搜索引擎官方公布的 IP 段,或者对 IP 做反向 DNS 查询,确认主机名归属后再正向解析回去,两者能对上才可信。同时把 WAF 日志、服务器访问日志和抓取统计数据放在一起对照,看被拦的路径是否集中在某几类 URL 上。
放行之前先验证身份,放行之后保留其他防护——按 UA 白名单开口子,等于给所有伪造者开门。
放行时要注意的几件事
- 按官方 IP 段放行,而不是按 UA 字符串放行,并定期更新 IP 段列表,搜索引擎偶尔会调整出口地址。
- 对已验证的爬虫单独设置限速阈值,与普通访客、可疑流量分开计数,避免一锅端。
- 只对确认为误伤的规则做例外,不要为了让蜘蛛通过而整体关闭 WAF。
- 保留 403、429 的日志记录,出问题时才能回溯是哪条规则先动的。
放行之后观察什么
调整后不要马上认为问题解决。接下来几周留意三个信号:访问日志中爬虫请求的状态码分布是否回到以 200 为主;抓取总量是否逐步回升而不是一次性暴涨;Sitemap 与重点目录的抓取频次是否恢复。如果抓取量回来了,但深层页面仍然很少被访问,那问题可能已经不在防护层,而要回到内链结构和抓取路径上继续排查。
站点防护和蜘蛛抓取并非天然对立。把验证做扎实、把放行范围收窄到可确认的身份上,既能挡住恶意流量,也不会把自己的抓取通道一起堵掉。