目标 URL 能不能被发现,取决于搜索蜘蛛能不能顺利拿到入口页里的链接。如果入口页前面挡了一层 WAF、人机校验或验证码,蜘蛛拿到的往往不是链接列表,而是一张挑战页。下面按现象、原因、排查、处理四步说清楚。
被拦之后,搜索蜘蛛通常看到什么
- 直接 403 / 406 / 503:请求在边缘就被拒绝,源站日志里根本没有这条记录。
- 返回 200 但正文是验证页:状态码正常,内容却是“请完成验证”或一段脚本,没有目标链接。
- 302 跳到校验地址:蜘蛛跟过去之后,仍然拿不到入口页的实际内容。
- 连接被重置或长时间无响应:抓取超时,同样不会产生新的 URL 发现。
为什么验证码页会直接终止发现
搜索蜘蛛执行 JavaScript 的能力有限,更不会去做滑块、点选、短信验证这类交互。挑战页即使返回 200,正文里没有 a 标签,发现链条就断了。
更麻烦的是,抓取预算不是无限的。入口页反复给出无意义的响应,蜘蛛可能降低这个目录甚至整个域名的抓取频次,连带影响其他正常页面的更新检查。
注意:给搜索蜘蛛放行不等于关掉 WAF。合理的做法是识别出真实蜘蛛流量并单独放行,而不是把整站防护整体调弱。
从日志判断到底是拦截还是限速
先把边缘(CDN / WAF)日志和源站日志对齐看,两边对不上,说明请求根本没到源站。
- 看状态码分布:入口页 URL 上是否集中出现 403、406、429、503。
- 看响应体大小:正常入口页体积相对固定,挑战页往往明显偏小,或者大小固定且内容重复。
- 看 robots.txt:如果连 robots.txt 的抓取都失败,说明拦截在域名级别,不只是入口页的问题。
- 看频次曲线:是否在抓取量升到某个阈值之后才开始出现拦截,这是限速而非规则拦截的典型特征。
- 验证身份:用反向 DNS 或官方公布的 IP 段核对,不要只看 User-Agent,UA 很容易被伪装。
几种常见误解
- “返回 200 就没事”:状态码只说明请求被接受,不代表正文里有链接。
- “换个 UA 就能过”:多数校验看的是 IP、行为特征和 Cookie,改 UA 反而更容易被判定为异常。
- “偶尔拦一次无所谓”:如果拦截发生在入口页这个关键节点,一次失败就少一次发现机会。
处理思路
- 把已验证的搜索蜘蛛 IP 段加入白名单,并保留反向 DNS 校验,防止被伪造流量钻空子。
- 用限速代替挑战:对爬虫流量做 QPS 限制,返回 429 并给出合理间隔,比弹验证码更利于后续恢复。
- 入口页尽量静态输出,链接直接写在 HTML 里,不要依赖 JS 渲染后再插入。
- 如果入口页本身只是被误判,先改 WAF 规则再谈抓取,不要在拦截状态下继续堆链接。
- 把 sitemap 和 URL 提交接口作为并行渠道,减少对单一入口页的依赖。
恢复期该盯什么
调整规则之后,重点看三件事:入口页对搜索蜘蛛的状态码是否回到 200 并保持稳定、响应体里是否重新出现目标链接、抓取频次是否在几天内逐步回升。如果只有频次回升而正文仍为空,说明拿到的可能是边缘缓存下来的挑战页,需要清理缓存后再观察。
整体上,入口页被拦截属于发现链条的硬中断,靠换 UA 或反复提交收效有限。先把可用性修好,再去谈 URL 发现效率,顺序反了只会浪费精力。