很多站点在入口页部署 HTTPS 之后,会默认“加密了就更安全,蜘蛛应该也能抓”。实际上,搜索引擎蜘蛛在发起请求前要先完成 TLS 握手,证书只要有一点异常,抓取就可能直接中断。这个过程不像 404 或 500 那样会在日志里留下明显的状态码,所以常被忽略。
蜘蛛遇到证书问题时会发生什么
当证书校验不通过,蜘蛛通常不会像浏览器那样弹出警告让用户选择“继续访问”。多数情况下,它会在握手阶段放弃,或者把该 URL 标记为抓取失败,后续再试几次仍然失败,就可能降低对整站的抓取频率。表现往往是:入口页在浏览器里能打开,但在蜘蛛日志里请求量极低,甚至查不到记录。
常见的几类证书问题
证书过期或未及时续期
免费证书通常 90 天有效,付费证书也多为一年。如果自动续期任务失败,或者换了服务器后忘了部署新证书,就会出现过期窗口。不同蜘蛛对过期证书的容忍度不一样,有的会直接拒绝,有的可能放过,但整体上属于高风险项。
证书链不完整
这是很常见但不容易发现的问题。服务器只发送了站点证书,没有带上中间证书,部分客户端能靠缓存补全,蜘蛛却可能校验失败。用在线检测工具查看证书链是否完整,比只看浏览器地址栏的锁标志更可靠。
域名不匹配
如果入口页使用了多个域名或泛解析,要确认证书的 SAN 里是否包含蜘蛛实际访问的那个主机名。常见的情况是:主域名有证书,但 www 子域或某个入口页域名没有覆盖,蜘蛛访问到没有证书的域名时就会失败。
SNI 与 IP 直连
同一 IP 上放了多个 HTTPS 站点时,服务器依赖 SNI 来区分证书。如果客户端不支持 SNI,或者蜘蛛直接通过 IP 访问,就可能拿到默认站点的证书,导致域名不匹配。入口页尽量保证每个域名都能用自己的证书正常响应。
混合内容与 HSTS
页面主体是 HTTPS,但里面还引用了 HTTP 的图片、脚本或样式,浏览器会提示混合内容,蜘蛛也可能因为资源加载失败而拿不到完整页面。启用 HSTS 之后,HTTP 会被强制跳转,配置不当还可能形成跳转循环。
怎么排查
- 用 curl -Iv https://域名 或在线证书检测工具,确认证书有效期、链是否完整、SAN 是否覆盖当前域名。
- 分别用带 www 和不带 www、以及各个入口页域名测试,看看是否存在证书不匹配的情况。
- 查看服务器日志里蜘蛛 UA 的请求,确认是否有 TLS 握手失败的记录。
- 检查页面源码中的资源引用,把残留的 HTTP 地址改成 HTTPS 或相对协议地址。
- 如果用了 CDN,确认回源证书和边缘证书都正常,且 CDN 没有把蜘蛛请求挡在证书校验之前。
日常维护建议
- 给证书续期设置监控和提醒,不要只依赖自动续期脚本。
- 新增入口页域名时,同步检查证书是否覆盖,再开始放量。
- 换服务器、换 CDN 之后,重新跑一遍证书检测流程。
- 把证书检查纳入入口页上线的固定步骤,和检查状态码、robots.txt 放在一起。
证书问题不会天天出现,但一旦出现,往往影响的是整批入口页的抓取。把它当成上线前的例行检查项,比事后从日志里倒查要省事得多。