讨论蜘蛛池时,大多数注意力都放在入口页的标题、链接和内容上,却容易忽略一个更靠前的环节:蜘蛛在读到第一个 HTML 字符之前,得先把域名解析成 IP、建立 TCP 连接、完成 TLS 握手。这几步里任何一步出问题,后面的内容优化都无从谈起。
蜘蛛访问一个 URL 的完整链路
顺序大致是:查本地 DNS 缓存,向递归解析服务器请求,拿到 A 记录或 CNAME 指向的 IP,建立 TCP 连接,完成 TLS 握手,发送 HTTP 请求,最后才拿到响应。入口页常见的“抓取失败”,有相当一部分发生在前半步,也就是解析与握手阶段,而不是内容本身。
DNS 解析:蜘蛛最终落在哪台机器
入口页的域名可以是一条 A 记录直连某台服务器,也可以用 CNAME 指向 CDN 或其他调度层。两种方式对蜘蛛的影响不一样:直连时,访问稳定性取决于那台机器;走 CDN 时,蜘蛛访问的可能是离它最近的一个边缘节点。
- TTL 过长:更换服务器 IP 之后,蜘蛛和各地解析服务器还可能长时间访问旧地址,表现为日志里旧 IP 仍有请求,新机器却安静。
- TTL 过短:解析请求频繁,遇到解析服务不稳定时,反而更容易拿到失败结果。
- 泛解析滥用:把大量域名用泛解析指向同一台机器,虽然省事,但域名的解析特征会很一致,不利于把入口站做出差异。
CDN 与 WAF:是加速还是拦门
CDN 本身不是问题,问题在于默认配置。部分防护策略会针对高频访问、可疑 UA 或异常请求头返回验证页、302 跳转或 403。蜘蛛拿到这些响应,通常不会去执行验证脚本,只会记下一次失败。
如果入口站开了 CDN,建议检查:回源地址是否正确、缓存规则是否把动态入口页也缓存了、防护等级是否误伤了正常抓取。可以先用站长平台的抓取测试或模拟请求,看看返回的是内容页还是拦截页。
HTTPS 证书:握手阶段的隐形门槛
证书问题通常表现为“浏览器能打开,但蜘蛛抓不到”。常见原因有三类:
- 证书域名与实际访问的域名不匹配,尤其是泛域名证书未覆盖多级子域时。
- 证书已过期,或者只更新了部分节点,CDN 边缘节点还在用旧证书。
- 证书链不完整,缺少中间证书。桌面浏览器往往能自行补全,但其他客户端可能直接握手失败。
几个常见的误区
- 认为域名能 ping 通就没问题,忽略了 HTTP 层返回的状态码。
- 换服务器时只改 A 记录,忘了同步证书和回源配置。
- 把抓取失败一概归因于内容质量或权重,没有先看链路层日志。
- 用多个域名指向同一台机器,却没做任何访问入口上的区分。
排查时的建议顺序
- 先用命令行工具请求入口页,确认状态码、响应头和证书信息。
- 对比不同地区、不同解析结果的返回是否一致。
- 检查服务器访问日志,按状态码分类看蜘蛛请求的分布。
- 更换 IP 或节点前,提前把 TTL 调低,切换完成后再调回。
- 把 DNS、证书、CDN 配置的变更记录留档,方便出问题时回溯。
蜘蛛看不到的页面,等于不存在。入口页的第一道门不是内容,是解析与握手。
这些配置本身不复杂,但一旦被忽略,很容易让人把排查方向搞反:明明问题在 DNS 或证书,却在反复调整入口页的文案和链接。