URL 发现正常,不代表抓取通道畅通
Sitemap 提交了,内链也加了,日志里能看到蜘蛛访问首页或 sitemap,但目标 URL 始终没有抓取记录。这种情况下,问题往往不在 URL 发现,而在抓取请求进入服务器之前就被拦下了。CDN、WAF、云防火墙、限速插件都可能成为这道闸门。
蜘蛛发起请求时,和普通用户浏览器没有本质区别:同样经过 DNS、CDN 节点、WAF 规则、源站防火墙。如果其中某一层返回 403、406、429、503,或者直接断开连接,蜘蛛拿不到内容,也就不会继续深入抓取。
常见的误拦方式
- User-Agent 黑名单过宽:规则里写了包含“bot”“spider”“crawler”就拦截,结果把正常搜索引擎蜘蛛也挡在外面。蜘蛛池工具常伪造 UA,但搜索引擎蜘蛛也有固定 UA,不能一概而论。
- IP 段未放行:WAF 只允许已知 IP 访问,但搜索引擎蜘蛛的出口 IP 会变化或未被及时更新。旧 IP 段失效后,新请求会被当成异常流量。
- 频率限制过低:CDN 或防火墙按 IP 限速,蜘蛛短时间内抓取多个 URL 时触发 429。抓取队列会因此降低频率,严重时停止访问该目录。
- 地域封禁:只允许国内 IP 访问,而蜘蛛节点在海外,或者反过来。地域规则命中后直接返回 403,日志里看不到源站记录。
- JS 挑战与验证码:WAF 对疑似机器人返回挑战页,蜘蛛无法执行 JS,只能拿到空页面或跳转页,URL 后续抓取路径就断了。
怎么判断是误拦而不是其他问题
先看 CDN 和 WAF 日志,而不是只看源站日志。源站日志没有记录,不代表蜘蛛没来,可能请求在边缘节点就被处理掉了。重点看状态码分布:如果某个目录集中出现 403、429、503,且 UA 是搜索引擎蜘蛛,就要怀疑规则误拦。
再看响应内容。用站长工具或日志里的 UA、IP 做一次模拟请求,观察返回的是正常 HTML、验证码页、空响应还是跳转。如果模拟请求能拿到内容,但蜘蛛抓取记录仍然缺失,可能是 IP 或 UA 组合被单独限制。
不要只用浏览器打开页面来判断。浏览器带 Cookie、执行 JS、走本地网络,和蜘蛛的请求环境差别很大。
调整配置时的顺序
- 先把搜索引擎蜘蛛的官方 UA 和 IP 段加入白名单,优先于其他限速和黑名单规则。
- 检查 WAF 规则中是否有“包含 bot 即拦截”这类宽泛条件,改成精确匹配或只拦已知恶意特征。
- 对已验证的蜘蛛 IP 放宽频率限制,但保留异常突增的监控,避免影响正常防护。
- 如果使用 JS 挑战,给搜索引擎蜘蛛单独放行,不要让它们走验证码流程。
- 调整后观察 3 到 7 天日志,确认目标 URL 是否出现抓取记录,状态码是否回到 200。
验证与复盘
改完规则后,不要只看首页。选几个之前被拦的深层 URL,结合 CDN 日志和源站日志,确认请求完整到达源站并返回正常内容。如果仍然失败,逐层排查:DNS 解析、CDN 回源、WAF 规则、源站防火墙、应用层限速。
另外,蜘蛛池或第三方抓取工具产生的流量可能触发防护规则,这本身不一定是误拦。区分方法是看 UA、IP 和请求路径是否符合搜索引擎公开信息。如果大部分异常请求来自非官方 IP,就不应该为了放行蜘蛛而关闭整体防护。
最后,把这次调整记录到运维文档里,包括规则名称、修改时间、验证 URL 和结果。下次抓取频次下降时,可以按同样顺序快速定位,而不是从内容层面反复猜测。