抓取入口不可达的原因,很多时候不在 DNS、证书或 robots 文件,而在站点前面那一层安全策略。云 WAF、CC 防护、IP 频率限制、地域封锁,任何一条规则命中搜索蜘蛛的请求,都可能在服务器日志里留下一个 403,或者在统计面板上表现为抓取量突然下滑,而站点本身并没有做任何改动。
先分清两种拦截表现
一种是硬拦截:返回 403、406 或 503,蜘蛛直接拿不到内容。另一种更隐蔽:返回 200,但正文是一个 JavaScript 挑战页或验证码页,蜘蛛解析后得到的是一段空壳内容,长期可能被当作低质量页面处理。排查时要先把这两种情况分开,因为成因和处理方式完全不同。
常见的误拦来源
- UA 黑名单正则过宽:为了挡采集程序,规则写成包含 bot、spider、crawl 等关键词就拦,结果把正常搜索蜘蛛一并挡掉。
- CC 防护与频率限制:蜘蛛在短时间内对同一列表页或分页发出较多请求,触发阈值后整段来源 IP 被临时限速。
- 地域与海外 IP 封锁:蜘蛛节点分布广泛,只放行本地访问会拦掉相当一部分抓取来源。
- JS 挑战与验证中间页:开启全站挑战后,蜘蛛无法执行脚本,拿到的是占位 HTML。
- CDN 与源站策略不一致:CDN 层放行,源站 WAF 仍拦截,日志上看起来像随机失败。
核对顺序建议
- 从访问日志中筛出蜘蛛 UA 的请求,按状态码和响应体大小分组,先确认是硬拦截还是空壳页。
- 把被拦请求的时间、路径、来源 IP 与 WAF 拦截日志对齐,找到具体命中的规则名称。
- 用相同 URL 分别带蜘蛛 UA、普通 UA 和不带 UA 发请求,对比状态码与正文差异。
- 检查响应中是否包含跳转脚本或 meta refresh,确认是否存在挑战页中间层。
- 放行时优先按 IP 段或反向解析校验,而不是只匹配 UA 字符串。
- 放行后只改这一项,观察一到两周的抓取量与状态码分布,再决定是否继续调整其他策略。
几个容易踩的坑
第一,只白名单 UA 字符串并不稳妥,UA 可以伪造,也可能被后续规则覆盖,结合来源 IP 段做双向校验更可靠。第二,如果把拦截响应的状态码写成 503,蜘蛛会判断为临时不可用,从而拉长回访间隔,短期抓取量下降往往比返回 403 更明显。第三,限速规则常常作用于整个网段,蜘蛛请求分散在多个节点上,可能只有一部分节点被限制,日志看起来是随机失败,容易被误判成服务器性能问题。
排查入口不可达时,先看安全层的命中记录,再去看服务器负载,顺序反了会浪费很多时间。
把放行策略做成长期机制
建议把蜘蛛放行规则单独成组,和面向普通用户的防护规则分开维护;每次调整安全策略时,把搜索抓取的状态码分布加入观察指标;对关键栏目页和分页做定期抽查,确认返回的是正文而不是挑战页。这些动作的目的是保证入口可达、内容可解析,抓取节奏与收录结果仍受多种因素共同影响,无法靠单一配置决定。