HTTPS 已经是多数站点的默认状态,但证书和页面里的资源引用并不是装好一次就一劳永逸。证书会在某天悄悄过期,模板改版时也可能把 http:// 的资源地址重新带回来。这两类问题不会影响你在后台看到的内容,却会直接影响访客的第一印象,以及蜘蛛抓取到的页面质量。
证书本身要看的几个点
先别只看地址栏有没有锁。至少要确认四项:
- 有效期:剩余天数是多少,自动续期是否真的在跑。很多事故不是没有续期脚本,而是脚本默默失败了好几个月,没人看它的日志。
- 域名覆盖:证书是否同时覆盖带 www 和不带 www 的写法,以及需要用到的子域名。只签了一个名字,另一个名字访问时就会报错。
- 证书链完整:中间证书缺失时,现代浏览器可能自动补齐,但部分抓取工具和老旧客户端会直接判定不可信。可以在终端用 openssl 连接站点,确认返回的证书链是否完整。
- 协议与加密套件:关掉过旧的 TLS 版本是对的,但也要确认没有把仍在使用的客户端挡在门外,改动后最好换几种客户端各测一遍。
混合内容:锁还在,页面里却留着 http
混合内容指的是 https 页面里引用了 http:// 开头的资源。图片、脚本、样式表、字体都可能出现,常见来源是旧模板、第三方统计代码、图床或 CDN 里写死的地址。
浏览器对它的处理并不一致:图片这类被动内容通常被拦截或降级加载,脚本和样式表这类主动内容则会被直接阻止。结果是页面看起来加载了一半,或者样式明显错乱,而服务器日志里一切正常。
怎么把它们找出来
- 打开浏览器开发者工具,看控制台里的 Mixed Content 提示,同时看网络面板中状态异常的请求。
- 把 https 页面的源码保存下来,搜索 http:// 字符串,重点检查图片、脚本、样式和字体的引用地址。
- 如果是模板或内容系统,优先改模板里的资源地址,改成相对写法或直接写 https,而不是逐个页面手工修。
这件事和抓取的关系
证书出错或资源大面积加载失败时,蜘蛛看到的页面和你看到的并不一样。证书链异常可能让连接直接建立失败,混合内容被拦截则可能让关键内容不进入渲染结果。对 URL 发现来说,更麻烦的情况是内链所在的脚本被阻塞,页面上的链接根本没有机会被解析出来。
把“浏览器能打开”当成“没问题”,是这类故障最容易踩的坑:人工访问往往有缓存和浏览器补全帮忙,只有关闭缓存、换网络、换客户端,才能看到真实状态。
把检查变成例行工作
证书和混合内容都属于平时不出声、出事就很明显的项目,适合放进固定节奏:
- 到期前 30 天、14 天、7 天各安排一次提醒,提醒发给具体的人,而不是丢进一个没人看的群。
- 自动续期之后做一次实际访问验证,确认到期时间或证书指纹确实变了。
- 模板、CDN、统计代码发生调整后,抽查几个代表性页面,看是否又混进 http:// 资源。
- 带 www、不带 www、主要子域各测一遍,覆盖证书里写到的所有名字。
- 如果启用了 HSTS,改动协议配置前先想清楚回退的成本。
自查清单
- 证书剩余有效期与自动续期状态是否确认过。
- 证书是否覆盖所有对外使用的域名写法。
- 证书链是否完整,抓取工具能否正常建立连接。
- https 页面里是否还有 http:// 的图片、脚本、样式和字体。
- 是否有一个通知渠道,在证书异常或 HTTPS 不可用时能及时告警。
这些检查花不了多少时间,但能避开一类很尴尬的故障:访客点进来先看到安全警告,蜘蛛抓到的是一份不完整的页面。