换到新的云 WAF 后,Bing 和百度的抓取量一起掉,日志里同一个 URL 用户访问返回 200,蜘蛛访问返回 202 加一段挑战脚本,sitemap 抓取也报 202。
把日志和配置对完,能解释这个现象的基本就这几处。WAF 对没有浏览器指纹的请求一律下发 JS 挑战;爬虫 IP 段没进白名单,规则按人机识别统一处理;挑战页回 202 而不是 403,蜘蛛会当成软性拦截反复重试;静态资源也在防护范围内,CSS 和图片同样被挑战。
上来先用不同 UA 复现状态码差异
curl -sI -A 'Baiduspider' https://www.example.com/ | head -3
随后查 WAF 日志里命中的规则
curl -s -H 'Authorization: Bearer $TOKEN' 'https://api.waf.example.com/logs?host=www.example.com&limit=20'
接着把官方爬虫段加入白名单
curl -X POST https://api.waf.example.com/whitelist -d '{"ip":"66.249.64.0/19","action":"allow"}'
剩下的就是对静态资源关闭人机校验
location ~* \.(css|js|jpg|png)$ { waf_off; }
中间停过一次,把已经改的东西回滚干净,再重新来一遍。
改完先别撤,确认这几项。蜘蛛 UA 请求返回 200 且不再出现挑战脚本,sitemap 抓取状态恢复,两周后抓取量回到拦截前。
补一句。202 比 403 更隐蔽,站点看着正常,蜘蛛却永远拿不到正文,排查时要按 UA 分别取首屏。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
