给站点做了安全加固之后,抓取量不升反降,是很多运营者会遇到的情况。日志里看不到明显的 5xx,页面本身也没报错,但搜索引擎蜘蛛的访问记录就是越来越少。排查到最后,问题常常出在 WAF、CDN 或者自建反爬策略上——它们把正常抓取和恶意爬虫一起挡在了门外。
这类故障的特点是安静。没有告警,没有错误日志,只有抓取频次在悄悄下滑,等发现新内容很久没被处理时,可能已经过去几周了。
蜘蛛被拦住的几种常见形态
WAF 规则误伤
安全产品的默认规则集通常包含大量“疑似扫描”特征,比如请求参数里带特殊字符、短时间内重复请求同一路径、UA 中含爬虫字样。搜索引擎蜘蛛的抓取行为恰好会命中其中一些特征:它会连续请求大量 URL,也会带一些看起来很“机器”的查询串。如果规则没有针对官方蜘蛛做例外,就容易被当成攻击流量拦截。
CDN 的人机校验
部分 CDN 开启了 JS 挑战或验证码挑战,正常浏览器能通过,但搜索引擎蜘蛛不会执行这类挑战,结果就是收到 403,或者拿到一个需要跳转的中间页。表现上,蜘蛛看到的是一个空壳,真正的页面内容拿不到。
频率限制与临时封禁
为了防刷,不少站点按 IP 或 UA 做了 QPS 限制。低频抓取时看不出问题,一旦站点更新量大、蜘蛛集中抓取,就会触发限流。轻则返回 429,重则把整个 IP 段临时封禁一段时间。更麻烦的是,蜘蛛在被限流后往往会自行降低抓取频次,之后再想提上来并不容易。
一份可执行的自查清单
- 查看服务器访问日志,确认最近一段时间是否还有来自主流蜘蛛 UA 的请求;如果一条都没有,先怀疑入口被拦。
- 用官方工具发起一次真实抓取,比如搜索资源平台提供的抓取诊断,看返回的状态码和抓取到的 HTML 内容。
- 对比直连源站和经过 CDN 之后的响应,确认两者返回的内容一致。
- 检查 WAF 的拦截记录,看是否有匹配到蜘蛛 UA 或蜘蛛 IP 段的规则命中。
- 检查 CDN 配置里是否启用了人机校验、Bot 管理或强制跳转,确认其策略对已知搜索引擎蜘蛛放行。
- 检查限流阈值,评估站点在更新高峰期可能产生的并发请求量,是否低于蜘蛛的正常抓取强度。
- 检查 robots.txt、防火墙白名单和 CDN 白名单是否在不同层级上互相覆盖。
怎么确认蜘蛛确实是“真”的
光看 UA 是不够的,UA 可以随意伪造,只按 UA 放行等于给所有伪装爬虫开了门。比较稳妥的做法是做反向 DNS 验证:对请求 IP 做反向解析,确认域名属于搜索引擎官方,再正向解析回同一个 IP。主流搜索引擎都公布了各自的 IP 段和验证方式,可以做成定时任务自动核对。
白名单不是一次配置就完事。搜索引擎的 IP 段会新增和调整,写死的 IP 列表过一段时间就可能失效,或者把已经回收的地址继续放行。
放行时容易忽略的几个细节
- 放行位置要正确。如果站点前面有 CDN,源站看到的往往是 CDN 回源 IP,在源站放行蜘蛛 IP 段没有意义,需要把规则加在 CDN 或 WAF 那一层。
- 区分抓取与回源。CDN 缓存命中率高的时候,蜘蛛的请求根本不会到源站,日志里看不到记录不代表没抓,要结合 CDN 日志一起看。
- 保留必要的拦截。放行不等于全开,针对异常请求路径、明显恶意的参数仍然要拦,只是别把蜘蛛的正常请求一起放进去。
- 改完要复测。规则调整后重新用官方工具抓一次,并观察几天日志里的抓取频次是否回升,不要只改不验。
安全防护和抓取通路并不是二选一。多数情况下,问题只是白名单没配、规则没做例外,或者改配置时忘了同步。把上面这几项做成固定的检查动作,每次上 WAF、上 CDN、调整限流之后都过一遍,就能省掉不少“蜘蛛怎么突然不见了”的排查时间。