站点日志里突然出现一批握手失败或连接中断的记录,很多人会直接归到“服务器不稳定”上,但真正的原因可能是证书链、协议版本,或者页面里混用了 HTTP 资源。这类问题不涉及内容质量,却会让抓取请求在拿到 HTML 之前就断开,入口自然也无法被发现和跟进。
一、抓取中断的常见表现
- 同一批 URL 反复出现 0 状态码、连接重置或超时,而不是明确的 4xx、5xx。
- 整体抓取频率在某一天之后明显下降,但站点内容并没有大的改动。
- 不同环境结果不一致:浏览器打开正常,抓取端却拿不到响应。
- 部分来源 IP 段正常、部分失败,CDN 各节点表现有差异。
- Sitemap 提交后,对应 URL 长时间没有出现在访问日志里。
二、先分清是握手层还是内容层
握手层:证书链与协议版本
服务器只下发叶子证书、缺少中间证书时,浏览器往往能通过证书里的补全地址自动拉取,抓取程序不一定有同样的行为。协议版本过低(仅保留 TLS 1.0、1.1)或加密套件过于陈旧,也可能在协商阶段就被拒绝,表现为连接直接中断。
内容层:混合内容与资源阻塞
HTTPS 页面里如果混用了 HTTP 的图片、脚本或样式,浏览器会拦截或降级处理。若首屏链接是由这些脚本注入的,抓取端渲染时可能完全看不到入口,页面在日志里“被抓过”,但链接没有被继续发现。
三、可执行的排查步骤
- 用 openssl s_client -connect 域名:443 -servername 域名 查看返回的证书链,确认是否包含中间证书,以及顺序是否正确。
- 用 curl -vI 观察握手过程,记录实际协商到的 TLS 版本、是否发生到 HTTP 的跳转。
- 把抓取日志按状态码、耗时和来源 IP 分组,找出只在特定环境失败的记录,而不是笼统地看总量。
- 检查页面源码中以 http:// 开头的资源引用,重点看脚本和样式,因为链接常由它们生成。
- 对比 Sitemap 中已提交但从未出现在日志里的 URL 比例,判断是入口问题还是传输问题。
四、修复与回归观察
- 在服务器配置中补全中间证书,按叶子、中间、根的顺序拼接,避免只部署单张证书。
- 关闭过旧的协议版本,保留 TLS 1.2 及以上,同时确认加密套件没有被过度裁剪。
- 把页面内的资源引用统一为 https,或使用协议相对写法,减少混用带来的拦截。
- CDN 场景下逐节点验证,避免只测源站就认为问题已经解决。
- 改动之后按天观察握手失败数量、首次被抓 URL 数,以及原本失败的路径是否开始出现请求。
证书与协议属于基础设施层面,修好之后一般不需要重新提交 URL,但入口恢复需要时间。建议以周为单位观察趋势,而不是当天就下结论。
五、和内链、Sitemap 的关系
Sitemap 与内链解决的是“哪里可能有入口”,握手与资源加载决定的是“能不能走到”。如果传输这一层不通,Sitemap 再完整也只会变成一串抓取失败记录,内链结构也无从验证。反过来,当抓取恢复后,可以用内链确认关键页面是否能在两三跳内到达,再用 Sitemap 补齐那些确实缺少入口的页面,两条线配合起来看,排查方向会清晰很多。