记录一下那天晚上的排查过程。站点 www.example.com 和 example.com 都做了 A 记录,证书是单域名证书,蜘蛛抓裸域时报 ERR_CERT_COMMON_NAME_INVALID,GSC 里两个资源各收录一部分,权重被拆开。

真正麻烦的地方在于,几个原因的现象几乎一样。证书只签了 www 一个 SAN,裸域不在覆盖范围。另一种情况是裸域没有做 301 到 www,两个主机名都在对外提供页面。

少数情况下是HSTS 已开启,浏览器和蜘蛛都不会忽略证书错误继续访问。

动手时先确认两个主机名的证书覆盖范围

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -text | grep -A1 "Subject Alternative Name"

签一张覆盖两个名字的证书

certbot certonly --nginx -d example.com -d www.example.com

末了把裸域统一跳到 www

server { server_name example.com; return 301 https://www.example.com$request_uri; }

当时还开着另一个排查窗口,两边日志对照着看才定位到。

怎么算真的好了,看的是同一批现象。两个主机名都能握手成功,openssl 输出里 SAN 同时包含两项,裸域请求返回 301,GSC 的 SSL 报错归零。

提醒一点。先用 curl -I 看跳转再签证书,顺序反了会因为验证文件也走跳转而多绕一圈。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189