搜索引擎蜘蛛抓取一个 URL 之前,第一步是向 DNS 查询域名对应的 IP。这一步发生在你的服务器之外,既不会出现在访问日志里,也不受 robots.txt 控制。很多蜘蛛池入口页的「抓取异常」,追到最后其实是解析层的问题。
为什么解析问题最难被发现
服务器日志只记录已经到达的请求。如果蜘蛛在解析阶段就失败了,它根本连不上你的机器,日志里自然一片空白。典型表现是:前几天还稳定的抓取量突然归零,而服务器负载、页面状态看起来一切正常。
常见的几类原因包括:
- 域名到期、欠费或实名信息失效导致解析被暂停;
- NS 服务器不可达,或解析服务商侧出现故障;
- 多台权威 DNS 记录不一致,不同地区查询结果不同;
- 云防火墙或安全组把 DNS 相关端口拦掉。
还有一种情况更隐蔽:解析本身正常,但返回的 IP 指向了一台已经停服的机器,或者指向了默认站点、错误页。蜘蛛能连上,拿到的却不是你想要的内容。
TTL 设多少,取决于你改不改
TTL 决定各地递归 DNS 缓存这条记录多久。设得长,解析稳定、查询压力小,但你要换 IP 时,全网生效要等很久;设得短,切换快,但查询次数变多,极端情况下反而更容易受解析波动影响。
另一个容易踩的细节是单位。多数解析商控制台用秒,也有用分钟甚至小时的,改之前看清单位,避免本想设 10 分钟结果设成了 10 小时。
一个比较稳妥的做法:日常把 TTL 控制在 300~600 秒,需要迁移前 24~48 小时先降到你能接受的最短值,切换完成并观察稳定后再调回去。
多 A 记录与线路解析
给同一个域名配多条 A 记录,本意是做冗余,但如果其中一台机器已经下线或端口不通,蜘蛛有概率被分到坏的那台。普通轮询解析不会自动跳过故障节点,除非你用的是带健康检查的解析服务。
线路解析在国内站点很常见,按运营商或地域返回不同 IP。需要注意的是,爬虫的出口 IP 段未必和你预期的用户分布一致,如果你只优化了某几条线路,抓取节点拿到的可能是最差的那台机器。
AAAA 记录容易被忽略
如果域名配了 IPv6 的 AAAA 记录,而服务器或 CDN 并没有正确监听 IPv6,蜘蛛尝试走 IPv6 时会连接超时,再决定是否回退到 IPv4。回退策略各家爬虫并不一致,有的会直接放弃这次抓取。没有 IPv6 服务能力,就别留 AAAA 记录。
接入前的解析检查清单
- 用 dig 或 nslookup 从多个公共 DNS 分别查询,确认返回结果一致;
- 确认域名有效期、实名状态与解析套餐都正常,没有临近到期;
- 逐台验证每条 A 记录对应的 IP 都能返回正确内容,而不是默认站点或错误页;
- 留意解析服务商的免费版限速或查询配额,入口页多、请求量大的站点尤其要确认;
- 迁移或调整后至少观察 48 小时,把搜索后台的抓取数据和访问日志对照看。
小结
DNS 是蜘蛛池入口页最底层的一环,平时安静,出问题时往往也最彻底。把解析稳定性纳入日常巡检——域名到期时间、TTL 设置、多 A 记录的健康状况、AAAA 记录是否必要——比事后翻日志找原因省事得多。