做蜘蛛池时,很多人会盯着入口页的 HTML、链接和状态码,却忽略了一个更靠前的环节:请求还没到服务器,就被 CDN 或 WAF 拦掉了。入口页在浏览器里能正常打开,不代表蜘蛛也能拿到同样的响应。如果日志里长期看不到蜘蛛,或者回源日志里只有少量请求,值得先查一查这一层。
蜘蛛在 CDN/WAF 层可能遇到什么
CDN 和 WAF 的默认策略通常是防恶意流量,而不是为搜索引擎蜘蛛让路。常见拦截包括:
- UA 黑名单:有些安全规则会把包含“spider”“bot”“crawler”的 UA 直接拦截。正规蜘蛛的 UA 里恰好有这些词,容易被误伤。
- IP 信誉库:蜘蛛出口 IP 如果被标记为“数据中心”或“代理”,可能触发验证。部分 CDN 会直接返回 403 或 429。
- 速率限制:入口页链接多、蜘蛛短时间集中抓取,可能被当成 CC 攻击。表现是前几个请求正常,后面开始超时或 429。
- JS 挑战与验证码:开启浏览器完整性检查后,蜘蛛不会执行 JS,拿不到挑战结果,页面就停在验证页。
- 缓存规则冲突:CDN 缓存了错误响应,后续蜘蛛请求直接命中 403 或 5xx,源站甚至收不到请求。
怎么判断是这一层的问题
不要只看页面能不能打开。可以用几个动作交叉验证:
- 用 curl 带上常见蜘蛛 UA 访问入口页,看返回状态码和响应体。再用普通浏览器 UA 访问同一个 URL,对比差异。
- 查看 CDN 或 WAF 的请求日志,过滤蜘蛛 UA 和已知蜘蛛 IP 段,看是否出现 403、429、503 或挑战页面。
- 检查回源日志。如果 CDN 日志有请求、源站日志没有,说明请求在边缘节点就被处理掉了。
- 看响应头里的 server、cf-ray、x-cache 等字段,判断请求经过了哪一层,以及缓存状态。
几个容易误伤的配置
下面这些设置本身不算错,但用在蜘蛛池入口页上要格外小心:
- 把“spider”加入 WAF 黑名单关键词,理由是“防采集”。这会把正规蜘蛛一起挡掉。
- 速率限制按 IP 算得很低,入口页链接一多,蜘蛛连续请求就被限流。
- 强制开启 JS 挑战,但入口页没有做服务端渲染,蜘蛛只能看到空页面或验证页。
- 只允许特定地区 IP 访问,而蜘蛛出口 IP 不在允许范围内。
- HTTPS 证书链不完整,蜘蛛在 TLS 握手阶段就失败,日志里可能连 HTTP 状态码都没有。
放行蜘蛛的稳妥做法
比较稳妥的思路是“先识别,再放行,别只认 UA”。
- 维护已知蜘蛛的 IP 段白名单。搜索引擎官方通常会公布出口 IP 列表,定期核对更新。
- 对入口页路径单独设置策略,降低或关闭 JS 挑战、验证码和严格速率限制。
- 不要仅凭 UA 放行,因为 UA 可以伪造;也不要仅凭 IP 拒绝,因为 IP 段会调整。
- 保留 CDN 日志和源站日志,方便出现抓取异常时对比。日志保留时间尽量覆盖一个抓取周期。
- 如果用了多级 CDN 或反代,确认每一层都放行了蜘蛛,避免只放行最外层。
CDN/WAF 放行只是让蜘蛛能到达入口页,它不解决 URL 发现效率,也不等于目标页会被收录。发现链路通了之后,内容质量、站点结构和目标页本身的问题仍然要单独处理。
如果你发现蜘蛛池入口页“浏览器能开、蜘蛛不来”,不妨先按上面的顺序查一遍链路。很多时候问题不在模板和链接,而在请求还没到源站就被拦下了。