入口页能不能被蜘蛛抓到,很多时候不是内容问题,而是连接阶段就已经断了。HTTPS 站点的抓取比 HTTP 多了一层 TLS 握手,这一层出问题,蜘蛛连 HTML 都看不到,后面的锚文本、更新频率、内链安排全都无从谈起。
为什么握手失败等于入口页不存在
蜘蛛发起请求的流程大致是:解析域名、建立 TCP 连接、完成 TLS 握手、发送 HTTP 请求、接收响应。前两步通常正常,第三、四步才是 HTTPS 站点最容易出问题的地方。握手不成功,蜘蛛拿不到任何 HTTP 状态码,日志里往往只留下一条连接中断的记录,看起来像“没来过”,实际上是被挡在门外。
三类最常见的问题
证书链不完整
服务器只返回站点证书、不返回中间证书,是自建和反向代理场景里很常见的情况。浏览器有时会自行补全中间证书,或者直接允许访问,但蜘蛛的客户端通常不做这种处理。判断方法很简单:用 openssl s_client -connect 域名:443 -servername 域名 看返回的证书链是否完整,如果只有一张叶证书,就该把中间证书补上。
SNI 与 IP 直连
同一台 IP 上挂了多个 HTTPS 域名时,服务器要靠 SNI 判断返回哪张证书。如果虚拟主机、CDN 或负载均衡没有正确配置 SNI 回退,访问就会拿到默认证书,出现域名不匹配。反过来,用 IP 直接访问测试,也可能因为不带 SNI 而看到错误结果。测试时最好带上 -servername 参数,模拟真实域名的访问路径。
证书过期与域名不匹配
过期证书在某些客户端上会被直接拒绝,在另一些客户端上只是警告后继续。为了让结果可预期,入口页的证书应当提前续期,并且覆盖蜘蛛实际使用的域名形式——带 www 与不带 www、主域名与入口域名,如果都对外暴露,最好都纳入证书。
协议版本与加密套件的取舍
把 TLS 1.0/1.1 关掉、只留 TLS 1.2 及以上是普遍做法,但要注意部分老旧客户端可能只支持旧协议。如果同时面向用户和蜘蛛,可以先观察访问日志里的握手失败比例,再决定是否收紧。加密套件同理,过度精简有时会让某些客户端协商失败,留一组兼容性好的套件通常更稳妥。
握手之后的两个易踩点
- 混合内容:HTTPS 页面里引用 http 的图片、脚本或样式,浏览器会拦截;蜘蛛虽然一般不受影响,但页面渲染不完整,对判断内容质量不利。
- 跳转链:http 到 https 之间反复跳、或者跳转后再跳一次,会拉长抓取路径。入口页最好一次跳到位,并保持目标地址稳定。
上线前的自查顺序
- 用带 SNI 的方式测试证书链是否完整。
- 确认证书覆盖所有对外使用的域名形式,并检查有效期。
- 检查协议版本与加密套件是否过于激进。
- 验证 http 到 https 的跳转是否只有一跳,且返回码正确。
- 确认页面内不再引用 http 资源。
- 抓取一次日志,看是否有握手失败的记录。
把连接层做稳,是入口页最基础也最容易被忽略的一步。它不能保证蜘蛛一定抓取,但可以避免蜘蛛根本进不来。
整体来看,HTTPS 相关问题的排查成本不高,收益却很直接:少一次握手失败,就多一次让蜘蛛看到入口页的机会。建议把证书到期时间、协议配置纳入日常巡检,而不是等抓取量异常时才回头找原因。