抓取量突然下降,很多人第一反应是内容或内链出了问题。但在翻内链和 Sitemap 之前,先确认一件事:蜘蛛的请求到底有没有被服务器正常接住。如果请求来了却在中途被拦下,后面所有关于 URL 发现、抓取路径的分析都会跑偏。
先分清“被挡”和“被慢”
这两种情形的日志表现不一样。被挡,是请求到达边缘节点或源站后没有返回正常内容,常见的是 403、429,或者返回一个体积很小、内容奇怪的页面;被慢,则是响应时间变长、超时增多,蜘蛛拿到的内容是对的,只是节奏被拖住了。前者属于访问控制问题,后者更接近服务器性能问题,处理方向完全不同。
几种常见的拦截形式
- WAF 规则误伤:某些规则会把带大量查询参数的 URL、异常查询串或特定 User-Agent 直接判成攻击行为。
- 频率限制:按 IP 或按 UA 限速。蜘蛛短时间内请求密集时触发限流,返回 429 或直接断开连接。
- 验证码与 JS 挑战:这类页面需要执行脚本或人工交互才能通过。搜索蜘蛛一般不会走完这套流程,只能拿到挑战页,拿不到真正的 HTML。
- UA 或 IP 段封锁:安全策略里简单地把某个 UA 关键词或整段 IP 拉黑,可能把正常蜘蛛一起挡掉。
日志里能看到的信号
把服务器日志或 CDN 边缘日志按 UA 过滤出蜘蛛的请求,重点看几个指标:
- 状态码分布突然向 403、429 集中;
- 返回字节数明显变小,说明拿到的是拦截页而不是正文;
- 同一 IP 或同一 UA 的请求在某个时间点之后整体减少;
- 抓取频率没有异常上升,但被拒绝的比例明显上升。
如果这些信号同时出现,基本可以判断问题在入口层,而不是内容层。
一个可执行的排查顺序
- 先确认蜘蛛身份。真正的搜索蜘蛛可以通过反向 DNS 加正向解析验证,不要只看 UA 字符串。
- 在 WAF 里为已验证的蜘蛛 IP 段加白名单,或把已知蜘蛛 UA 从通用规则中排除。
- 检查限速配置。放开也要逐步来,边调边看服务器负载,而不是一次性全部取消。
- 把验证码和 JS 挑战从蜘蛛需要访问的路径上移开,至少别让首页、栏目页、Sitemap 这些入口文件落在挑战之后。
- 修改后持续观察几天的日志,看拒绝比例是否回落、抓取是否恢复。
别只看源站日志
拦截有可能发生在 CDN 或边缘节点,源站日志里根本看不到这些请求。只看源站,容易误判成“蜘蛛不来了”。排查时尽量拿到边缘层日志;也可以用 curl 带上蜘蛛 UA 访问几个关键 URL,看返回的是正常页面还是拦截页。模拟只能验证响应结果,不能代替对真实抓取日志的观察。
和别的问题区分开
不少抓取异常看起来相似,成因却不同。日志里完全没有蜘蛛请求,问题在 URL 发现或 robots 层面;有请求、状态码也正常、只是内容为空,更接近软 404 或渲染问题;请求正常、内容也对,只是来得少,那要往抓取优先级和站点更新频率上想。先把入口层排掉,后面的判断会省很多事。
抓取量下降时,先确认蜘蛛的请求有没有被服务器接住;接不住的请求,谈不上 URL 发现。