蜘蛛池知识

蜘蛛池入口页被 WAF 误拦:判断、放行与复核

蜘蛛池入口页上了 CDN 或 WAF 之后抓取量突然下滑,很多时候不是内容出了问题,而是蜘蛛请求在边缘就被拦住了。本文讲怎么从防护日志与源站日志的差异、响应码分布判断是否误拦,为什么应该按官方 IP 段而不是 UA 放行,放行时速率和缓存要怎么单独配置,以及放行后需要复核的几项指标,减少一边放行一边继续流失抓取的情况。

蜘蛛池知识

蜘蛛池入口页被 WAF 误拦:判断、放行与复核

为什么蜘蛛会被拦在入口页之外

蜘蛛池入口页刚上线时抓取正常,某天换了 CDN 厂商、加了 WAF,或者服务器迁到云防护后面,抓取量就掉了。很多人第一反应是内容被降权,其实更常见的情况是请求根本没到达源站——防护层在边缘就把蜘蛛拒了。对搜索引擎蜘蛛来说,它看到的只是一次 403、一次 503,或者一个需要执行 JavaScript 才能通过的验证页面,除了重试之外没有别的反馈。

  • UA 黑名单误伤:不少防护默认规则会把带 spider 字样的 UA 当成扫描器。
  • IP 信誉库把机房 IP 段整体标记为高风险。
  • 单 IP 请求频率触发限流。
  • 对所有访客开启了 JS 挑战或验证码。
  • 只放行部分地区的访问,蜘蛛出口不在其中。
  • 防护层把错误的 403 响应缓存了下来。

怎么判断是误拦,而不是内容问题

先看响应码和日志

把 CDN 或 WAF 的访问日志和源站的访问日志放在一起比对,是最直接的办法。如果防护日志里能看到蜘蛛 UA 或官方 IP 段的请求,而源站日志里对应的记录是空的,说明请求在边缘就被处理掉了,压根没落到源站。再对照响应码:连续大量 403、406、429、503,或者返回 200 但内容是一段挑战脚本,都指向拦截。

用官方渠道交叉验证

各搜索引擎的站长平台一般都有抓取诊断或抓取测试工具,可以模拟蜘蛛从外部发起请求。如果工具里显示抓取失败、超时或被拒绝,而你在本地浏览器访问同一个 URL 一切正常,基本可以确认防护层按来源做了区分。同时核对蜘蛛的真实 IP 段——查一下该搜索引擎官方公布的 IP 列表,拿它跟防护日志里的来源 IP 对一遍,还能顺带区分真蜘蛛和伪造 UA 的采集器。

放行时按什么维度更靠谱

优先按 IP 段,而不是 UA

UA 是最容易伪造的字段,只按 UA 放行,等于同时给一批伪装的采集程序开了门。相对稳妥的做法是把官方公布的蜘蛛 IP 段加进白名单,并且定期更新——搜索引擎的 IP 段会变。如果防护支持,再叠加一次反向 DNS 校验,确认来源 IP 确实归属于对应搜索引擎。放行范围尽量收窄到入口页所在的域或目录,不要顺手把整站都放开。

速率限制和缓存要单独设置

放行不等于放任。给白名单单独设一档速率上限,既能保证抓取通道顺畅,也不至于让防护彻底失效。另外注意缓存策略:如果防护层把 403 或挑战页缓存了,即使后面放行,返回的仍是旧响应。放行之后清理一次相关缓存,并确认蜘蛛请求不会被强制跳转到某个验证页面。

放行之前先记录当前的抓取量和响应码分布,否则放行后拿不到可以对比的基线数据。

放行之后要复核什么

  1. 蜘蛛请求是否落到源站:看源站日志里来自官方 IP 段的请求量有没有回升,而不只是看防护层的请求数。
  2. 响应码分布:403、503 是否下降,200 的比例是否上升;如果 200 上升但抓取量没变,可能是速率限制还在起作用。
  3. 抓取到的内容是否正常:确认蜘蛛拿到的是完整 HTML,而不是骨架屏、跳转页或空内容,启用了前端渲染的入口页尤其要检查。
  4. 有没有伪造流量混入:放行后如果日志里出现大量非官方 IP 段、UA 却写着蜘蛛名字的请求,说明白名单开得太宽,需要收回。

几个容易踩的坑

  • 只按 UA 放行,结果把伪装采集器一起放进来。
  • 规则只写在外层 CDN,内层 WAF 或源站的规则没同步,请求到中间又被拦一次。
  • 换了 CDN 或 WAF 厂商之后没有重新核对白名单,旧规则不在新平台上。
  • 为了蜘蛛关掉验证码或 JS 挑战,顺手把整站的防护都降级了。
  • 只看“抓取量”不看“落到源站的量”,把防护层的命中当成有效抓取。

防护和抓取不是非此即彼。把白名单、速率、缓存这三件事分开配置,再留一份可对比的基线数据,大多数误拦都能在几天内定位清楚。至于抓取量恢复之后能不能转化为收录,那是另一个环节的事,蜘蛛池本身能解决的只是“被看见”这一段。