常见问题

入口页被 CDN 或 WAF 拦住:搜索蜘蛛看到的内容可能和你不一样

入口页在浏览器里一切正常,搜索蜘蛛却抓不到目标链接,问题常出在 CDN、WAF 或缓存这一层。本文说明误拦的常见表现、如何通过源站日志与中间层日志定位原因,以及放行规则、缓存策略调整时需要注意的几点。

常见问题

入口页被 CDN 或 WAF 拦住:搜索蜘蛛看到的内容可能和你不一样

做蜘蛛池和站点运营时,经常遇到一种情况:自己用浏览器打开入口页,目标链接整整齐齐;但搜索蜘蛛的抓取日志里,这个页面要么返回 403、503,要么返回一个内容完全不同、里面没有任何目标链接的页面。多数时候问题不在入口页本身,而在它前面那一层——CDN、WAF、防火墙或安全插件。

为什么会出现“你看到 A,蜘蛛看到 B”

CDN 和 WAF 的判断依据通常是 IP 归属、ASN、UA、请求频率、请求头完整度、Cookie 有无等。搜索蜘蛛的 IP 段是公开的,但这些中间层如果规则配得比较粗,很容易把它们当成可疑的自动化流量处理。常见表现包括:

  • 直接返回 403、406 或 503,蜘蛛拿不到任何 HTML;
  • 返回一个人机校验页或等待跳转页,里面没有目标链接;
  • 返回 200,但内容是精简版或缓存旧版本,目标链接被裁掉;
  • 只放行部分 IP 段,其他蜘蛛节点被拦,抓取时有时无。

还有一种情况是回源失败:CDN 缓存里存的是错误页,你本地刷新看到的是新版本,蜘蛛拿到的却是那份旧的缓存副本。

怎么确认是不是中间层的问题

  1. 先看原始服务器日志。如果源站日志里根本没有蜘蛛的请求记录,说明请求在到达源站之前就被拦掉了,问题大概率在 CDN/WAF 这一层。
  2. 对比 CDN 后台的访问日志和源站日志,看两边记录的搜索蜘蛛请求数量是否对得上。
  3. 确认蜘蛛来源的真实性。不要只看 UA,UA 可以随意伪造;用反向解析或官方公布的 IP 段核对来源 IP,再判断是不是被误拦。
  4. 检查缓存策略。入口页这类需要及时反映链接变化的页面,缓存时间过长,就会把旧版本反复喂给蜘蛛。
  5. 用搜索平台自带的抓取测试工具查看“实际返回”的 HTML,而不是你自己浏览器里看到的 HTML。

调整时的几个注意点

  • 别整站无条件放行。按 IP 段放行通常比按 UA 放行更可靠,但建议保留基本的频率限制,别为了放行把防护完全关掉。
  • 给入口页单独设缓存规则。可以短缓存甚至不缓存,其余静态资源照旧处理。
  • 别用 JS 校验后再放行。多数搜索蜘蛛不执行这类校验,结果就是永远看不到内容。
  • 不要对不同来源返回差异过大的页面。即使出于防护目的,也要保证蜘蛛拿到的是包含目标链接的正常页面。
判断标准可以很简单:把蜘蛛当成普通访客对待。它拿到的 HTML,应该和你自己访问时基本一致。

小结

入口页“蜘蛛看不到”,未必是链接写法的问题,先确认请求有没有顺利穿过 CDN、WAF 这一层。排查顺序建议是:源站日志 → 中间层日志 → 缓存版本 → 放行与限速规则。把中间层的误拦和旧缓存处理掉之后,再去看 URL 发现和抓取量的变化,才不容易被错误的排查方向带偏。