入口頁走 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 的跳轉規則,尽量一次到位,减少鏈式跳轉。
- 多個入口域名分別確認證书覆盖范围,避免“一個證书打天下”的惯性做法。
- 入口頁尽量使用同站资源,减少跨协议引用带来的不确定性。
證书問题不會因為頁面内容寫得好而被忽略。握手阶段失敗的頁面,在蜘蛛那里约等于不存在。
把證书当成抓取鏈路的一部分来维護,而不是一次性的上线動作,入口頁的可用性會稳定不少。至于能否被收錄、收錄快不快,仍取决于搜尋引擎自身的判断,證书只是先把“能不能被訪問”這一關過掉。