常见问题

入口页被 WAF 或 CDN 拦截:搜索蜘蛛还能发现里面的目标链接吗

入口页迟迟不被收录、日志里也见不到搜索蜘蛛,很多时候不是链接结构的问题,而是请求在到达服务器前就被 WAF、CDN 或主机商的防爬规则拦下了。本文说明如何区分 robots 屏蔽、服务器拒绝和拦截规则,怎么核对拦截原因,以及放行后要按什么顺序恢复抓取。

常见问题

入口页被 WAF 或 CDN 拦截:搜索蜘蛛还能发现里面的目标链接吗

蜘蛛池跑了一段时间,入口页却迟迟没有收录,服务器日志上也几乎见不到搜索蜘蛛的访问记录。这种情况未必是链接结构或内容质量的问题,很可能入口页在到达服务器之前,就被 WAF、CDN 或主机商的防爬规则拦住了。蜘蛛连页面都没拿到,里面的目标链接自然无从谈起。

先分清三种“看不到蜘蛛”的原因

同样是日志里没有蜘蛛,背后的机制完全不同,处理方式也不一样:

  • robots.txt 屏蔽:蜘蛛会遵守规则,通常表现为不抓或抓了不索引,日志里可能仍有请求。
  • 服务器直接拒绝:例如 401、403、503,蜘蛛来了但拿不到内容。
  • WAF、CDN 或主机商防爬规则:请求在边缘节点就被拦下,状态码常见 403、405、429、503,服务器源站日志里甚至看不到这条请求。

第三种最容易被忽略,因为你在源站日志里排查了半天,实际拦截发生在更前面的一层。

入口页被拦下后,里面的链接会怎样

  • 还没被发现的目标 URL 会一直停在“未发现”状态,没有任何办法绕过抓取这一关。
  • 曾经被发现过的目标 URL 不会因为入口页被拦就马上消失,但长期抓不到新的入口页,抓取优先级会逐步下降。
  • 如果拦的是整站或整段 IP,蜘蛛的抓取频次会明显降低,恢复之后需要时间重新爬回来。
  • 已经提交的 sitemap 只是声明,不能代替真实抓取,被拦时同样无效。

怎么确认是防爬规则在拦

  1. 在 CDN 或 WAF 后台查看拦截日志,确认拦截原因、命中的规则名、请求 UA 和来源 IP。
  2. 在源站日志里筛 403、429、503 这类状态码,以及带搜索引擎 UA 的请求路径。
  3. 用官方抓取测试工具(例如站点管理员后台的网址检查、抓取测试功能)发起一次实时抓取,看返回码和实际抓到的 HTML。
  4. 用官方公布的蜘蛛 IP 段做反向解析核对,不要只看 User-Agent 字符串。

把这几步做完,基本能确定拦截发生在哪一层。

放行时容易踩的坑

  • 只按 UA 放行:UA 可以伪造,部分规则库默认还会把可疑 UA 一并拦掉,规则容易失效。
  • 直接全站关掉 WAF:短期能通,长期是明显的安全隐患。
  • 只放行首页:入口页往往是批量生成的路径,需要按路径规则或整站维度放行。
  • 放行后不限速:一下子放开全部限制,异常流量和真实蜘蛛混在一起,容易再次触发规则。
  • 漏掉 IPv6 和移动端蜘蛛的 IP 段:放行名单只写了部分网段,抓取依旧时好时坏。

放行之后按什么顺序恢复

  1. 先小范围验证,用无痕浏览器和抓取测试工具各访问一次入口页,确认返回 200 且 HTML 完整。
  2. 重新提交入口页,或者用站内链接、sitemap 再指向它,触发一次新的抓取。
  3. 观察日志里蜘蛛 UA 的返回码和抓取频次,确认没有再次变成 403 或 429。
  4. 入口页稳定被抓过几轮之后,再去看里面的目标 URL 有没有进入“已发现”“已抓取”状态。
  5. 不要把结果当成必然:抓取恢复只是前提,最终能否收录和展示,仍取决于目标页自身的质量与竞争情况。
蜘蛛池解决的是 URL 被发现这一环,而前提是入口页真的能被抓到。被拦在门外的入口页,链接放得再多也没有意义。

实际操作中,建议把“入口页是否被拦截”作为蜘蛛池效果排查的第一步。先确认蜘蛛拿得到页面,再去调链接结构和入口数量,否则很容易在错误的方向上反复折腾。