给入口页挂上 CDN 或 WAF,原本是为了挡掉扫描、采集和恶意请求。但这类防护的判断逻辑是“像不像正常用户”,而搜索引擎蜘蛛的行为和真人差别很大:它请求密集、并发高、不执行某些脚本、也不会去点验证码。配置稍微偏一点,防护拦下的第一批流量里就可能有蜘蛛。
哪些防护设置最容易误伤蜘蛛
UA 与 IP 双向校验过严
有些站点为了防伪蜘蛛,会同时校验 UA 和来源 IP。这个思路本身没错,但 IP 段是会调整的,写死的白名单过一段时间就可能失效;反过来,如果只看 UA,又等于放行了所有自称 Googlebot 的请求。比较稳妥的做法是以官方公布或长期维护的 IP 段为准,并且定期更新,而不是长期依赖手工整理的临时列表。
频率限制与 CC 防护阈值过低
蜘蛛抓取入口页时往往在短时间内集中请求,尤其是入口页数量多、链接层级浅的时候。如果 CC 防护按“单 IP 每分钟请求数”来限流,蜘蛛很容易触发阈值,之后拿到的就是 403 或 429。这类拦截在日志里通常表现为一批状态码异常、时间集中的请求,而不是零散分布。
JS 挑战、验证码与强制跳转
部分防护会先用一段 JS 计算出 Cookie 再放行。主流搜索引擎蜘蛛大多不执行这段脚本,于是每次请求都会被重新挑战,最后干脆放弃。验证码同理。这类设置开启后,抓取量下降往往不是内容问题,而是入口页对蜘蛛变成了“无法通过的门”。
IP 信誉库与地区封禁
共用的 IP 段里如果有其他站点做过异常行为,整段 IP 可能被标记。蜘蛛的出口 IP 通常来自数据中心,天然更容易落在高风险分类里。地区封禁也会误伤:搜索引擎的抓取节点分布在不同区域,封掉某些地区,等于封掉一部分抓取来源。
怎么判断蜘蛛是不是被挡住了
- 对比回源日志和 CDN 边缘日志:边缘日志里请求很多、回源却很少,说明流量在防护层就被处理掉了。
- 看状态码分布:403、429、503 集中出现,且 UA 是蜘蛛,就要怀疑防护规则。
- 用官方提供的抓取测试工具发起一次真实抓取,观察返回的是正常页面还是挑战页。
- 临时把防护等级调低一段时间,观察抓取量是否有明显变化,再决定是否调整规则。
放行与排查可以先做的几件事
- 用官方 IP 段做白名单,而不是只用 UA 字符串判断。
- 给蜘蛛单独设一条规则:不限频、不挑战 JS、不弹验证码。
- 把静态资源和入口页 HTML 分开处理,入口页不要跟着图片、脚本一起排队。
- 记录被拦请求的 UA、IP 与状态码,方便后续复盘是误伤还是真恶意。
- 调整规则后不要立刻下结论,抓取恢复通常需要几天时间观察。
防护和抓取不是二选一。多数情况下,只要把蜘蛛识别和普通访客识别分开,两边的目标都能兼顾,真正需要取舍的场景并不多。
需要提醒的是,放行蜘蛛并不等于抓取量一定上升,入口页的内容质量、链接结构和服务器响应速度同样在起作用。防护只是把门打开,蜘蛛愿不愿意进来、进来之后走多远,还要看入口页本身。