抓取日志里出现成片的失败记录时,很多人的第一反应是内容质量、robots 规则或者内链结构。但有一类失败发生在页面内容之前——蜘蛛还没拿到任何 HTML,连接就已经断掉了。这类问题从页面层面怎么查都查不出来,只能从域名解析、证书和服务器响应时间这三层入手。
DNS:解析不到,后面全是空谈
蜘蛛访问的第一步是把域名解析成 IP。如果解析环节出了问题,后面的抓取、渲染、解析链接都不会发生,日志里往往连一条请求记录都没有,只看到抓取失败或超时。
- 不同地区、不同递归解析器返回的 IP 不一致,部分线路指向已经下线的旧服务器。
- CNAME 指向的 CDN 或托管域名已经失效,但主域名的 NS 记录没有同步更新。
- 权威 NS 变更后 TTL 设置过长,旧记录还在各地缓存中生效。
- 只配置了 IPv4,而蜘蛛优先尝试 IPv6,连接直接失败。
核对方法并不复杂:用几个公共 DNS 分别查询同一域名,比较返回的 A 记录和 AAAA 记录是否一致;再把服务器访问日志按时间拉出来,看这个时间段内是否真的存在来自搜索蜘蛛的请求。如果 DNS 正常但日志里一条都没有,问题可能出在更前面的链路上。
TLS 与证书链:浏览器能过,蜘蛛未必
证书链不完整是个容易被忽略的点。桌面浏览器遇到缺失的中间证书时,往往能自行补全,所以人工打开页面一切正常,但抓取程序不会做这种补全,握手就会失败。
- 中间证书没有随站点证书一起下发,部分客户端无法构建完整信任链。
- 证书覆盖的域名与蜘蛛实际访问的域名不匹配,例如只签了裸域却访问了 www。
- 证书已过期或即将过期,自动化监控没触发告警。
- 服务器只接受较新的 TLS 版本或加密套件,老版本抓取程序无法协商。
- SNI 未正确配置,同一 IP 上多个站点之间互相串了证书。
判断方法:用命令行工具模拟一次完整握手,观察是否提示证书链不完整或无法验证。人工浏览器访问成功,不代表抓取程序也能成功。
首字节时间:慢到超时,也算失败
还有一种情况是连接建立了,证书也没问题,但服务器迟迟不返回第一个字节。抓取程序通常有等待上限,超过就记为超时或失败,蜘蛛会带着这一页空手离开。
- 页面完全动态生成,每次都走一遍数据库慢查询。
- 模板中同步调用了第三方接口,对方响应慢会拖住整个页面。
- 图片或附件在请求时实时压缩、裁剪,占用大量处理时间。
- 缓存层配置不当,命中率低,回源请求集中压在数据库上。
- 日志写入、统计上报等操作放在请求主流程里,随流量增长逐渐拖慢响应。
排查时不要只看平均值,重点看 P95 和 P99 响应时间,再对照抓取日志里失败记录集中的时间段。如果失败集中在某个时段,而那个时段服务器响应时间明显拉长,方向就比较明确了。
防火墙、WAF 与访问策略
如果服务器日志里能看到请求,但状态码是 403、406 或者 429,那问题就在应用层之前的安全策略上。
- 安全组或防火墙是否屏蔽了搜索蜘蛛常用的 IP 段。
- WAF 是否因为频率、UA 特征或请求参数把正常抓取判成了异常流量。
- 站点是否设置了地域限制,导致部分来源的抓取请求被拒绝。
- 是否有基于 UA 的黑白名单规则,规则本身写错方向。
把搜索蜘蛛的 UA 加进白名单只是第一步,更稳妥的做法是结合反向解析确认来源。否则任何程序都可以伪装成蜘蛛,白名单反而成了漏洞。
建议的排查顺序
- 先确认 DNS 解析在多地是否一致、是否可用。
- 再模拟一次完整 TLS 握手,看证书链和协议版本。
- 然后测量首字节时间,结合服务器监控定位耗时环节。
- 最后检查防火墙与 WAF 规则,确认请求有没有被拦在应用之外。
- 每一步都用服务器日志与抓取日志交叉对照,避免凭印象下结论。
站点的可用性是抓取的前提。内容再好、内链再清晰,蜘蛛连不上或者等不到响应,这一页对它来说就是不存在的。把这几层网络与响应问题先排干净,后面讨论抓取路径和 URL 发现才有意义。