入口頁能不能被蜘蛛抓到,很多时候不是内容問题,而是连接阶段就已经断了。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 相關問题的排查成本不高,收益却很直接:少一次握手失敗,就多一次让蜘蛛看到入口頁的机會。建议把證书到期時間、协议配置纳入日常巡检,而不是等抓取量異常时才回头找原因。