入口页走 HTTPS 现在几乎是默认选项,很多人在部署时点了一次“申请证书”,之后就不再管。但搜索引擎蜘蛛抓取时,TLS 握手与证书校验是必经环节,这一步失败,后面的 HTML、链接、canonical 全都无从谈起。
蜘蛛抓一个 HTTPS 页面,中间发生了什么
简化看,一次抓取大致经过:DNS 解析、TCP 连接、TLS 握手与证书校验、发送 HTTP 请求、接收响应。前面几步都在应用层之外,出问题时页面代码里往往看不出任何异常。
和浏览器相比,蜘蛛的容错通常更保守:浏览器可以提示用户继续访问,蜘蛛不会。证书有问题,它一般就是直接放弃这次抓取。
几处容易被忽略的细节
证书链不完整
服务器只返回站点证书、没带上中间证书,是相当常见的问题。部分客户端能靠缓存或其他途径补齐,但抓取端通常是全新环境,缺少中间证书时握手就可能失败。检查时要确认返回的是完整链,而不只是最上面那一张证书。
域名不匹配与证书覆盖范围
蜘蛛池往往要维护一批入口域名。如果证书只签了主域,而实际入口用的是子域或另一个域名,就会触发名称不匹配。泛域名证书能覆盖同一级子域,但覆盖不了完全不同的域名,这在批量部署时最容易出错。
过期与自动续期失败
自动续期脚本依赖 DNS 或文件校验,一旦解析被改动、目录权限变化、或者服务器时间不准,续期就会静默失败。证书过期当天,入口页通常表现为整站不可抓取,而不是少数页面异常。
HTTPS 页面里的 HTTP 资源
混合内容对蜘蛛的影响不如对浏览器那么直接,但会影响页面的完整渲染和部分资源加载。如果入口页依赖某个用 HTTP 加载的脚本才输出链接,那么这些链接可能根本不会出现在渲染结果里。
HSTS 与跳转链条
开启 HSTS 之后客户端会强制使用 HTTPS,这本身没问题,但要注意别把 http 到 https 的跳转写成一长串:http 跳 https、再补尾斜杠、再跳一次。每次跳转都是一次额外请求,链路越长,被中途放弃的概率越高。
抓取异常时的排查顺序
- 先用命令行工具直接请求入口 URL,看 TLS 握手是否正常、证书链是否完整。
- 确认请求的域名与证书里的名称是否完全一致,包括是否带 www。
- 检查证书剩余有效期与最近一次续期记录。
- 如果入口前有 CDN,分别检查边缘证书与回源链路,两者可能用了不同证书。
- 最后回到访问日志,看蜘蛛请求是否在 TLS 阶段就被中断。
一些落地建议
- 部署时使用包含中间证书的完整链文件,而不是只上传站点证书。
- 给续期留出提前量,并设置到期提醒,不要只依赖自动脚本。
- 统一 http 到 https 的跳转规则,尽量一次到位,减少链式跳转。
- 多个入口域名分别确认证书覆盖范围,避免“一个证书打天下”的惯性做法。
- 入口页尽量使用同站资源,减少跨协议引用带来的不确定性。
证书问题不会因为页面内容写得好而被忽略。握手阶段失败的页面,在蜘蛛那里约等于不存在。
把证书当成抓取链路的一部分来维护,而不是一次性的上线动作,入口页的可用性会稳定不少。至于能否被收录、收录快不快,仍取决于搜索引擎自身的判断,证书只是先把“能不能被访问”这一关过掉。