蜘蛛池跑了一段時間,日誌里却始终看不到搜尋蜘蛛的身影,很多人第一反應是内容或者連結的問题。但在排查顺序上,還有一個更前置、也更容易被忽略的环节:TLS 握手。如果爬虫在建立连接阶段就失敗,它连入口頁的 HTML 都拿不到,後面所有的連結布局、锚文本安排都無從谈起。
搜尋引擎蜘蛛不會点“繼續訪問”
普通用戶遇到證书警告,可以点一下“高級”再繼續;搜尋蜘蛛没有這個按钮。绝大多數搜尋引擎爬虫對 HTTPS 證书的校驗是嚴格的:證书過期、域名不匹配、自簽名、證书鏈不完整,通常都會直接放弃抓取,而且未必留下一條正常的 GET 记錄——日誌里可能只有握手失敗的痕迹,甚至什么都没有。
對于批量建站、域名频繁更換的蜘蛛池来说,下面這几類問题尤其常见:
- 證书過期:自動續期脚本挂了,或者某個域名已经不用了没人管,到期後入口頁對外就變成不可抓取。
- 域名不匹配:證书只簽了 www 版本,但池子里投放的是裸域,或者反過来。
- 證书鏈不完整:服務器只下發了站点證书,没有附带中間證书。部分浏览器會自動补齐,爬虫不一定。
- 自簽名或来源可疑的證书:為了省事自己簽的證书,在爬虫眼里和無效證书没有区別。
- 多域名共用一張證书:SAN 列表里漏掉了新加入池子的域名。
證书鏈、SNI 與老爬虫
證书鏈不完整是容易被漏掉的一種:你在浏览器里訪問一切正常,因為浏览器能沿着系統根證书去找中間證书;而部分爬虫只會用服務器返回的那條鏈,缺一环就判定失敗。這種情况的典型特征是——同一台服務器上,有的 UA 能抓到,有的抓不到。
SNI 也類似。同一個 IP 上挂了几十個域名时,服務器需要靠 SNI 决定返回哪張證书。如果爬虫来自較老的版本、不發送 SNI,服務器可能返回預設證书,于是域名不匹配。這類問题在小規模站点上很少遇到,在蜘蛛池這種一 IP 多域名的场景里反而集中出現。
跳轉鏈與混合内容
http 到 https 的跳轉、裸域到 www 的跳轉,如果串成三四层,對入口頁来说是纯粹的消耗。爬虫一次抓取愿意花的時間有限,预算花在跳轉上,真正需要被發現的 URL 就少了一分机會。
- 確認 http 版本只做一次 301,直连最终地址。
- 確認 https 下裸域與 www 只保留一個規范版本,另一個直接跳轉過去。
- 頁面里引用的图片、脚本、样式如果還是 http,属于混合内容,部分环境會阻断加载;纯文字連結影响較小,但仍然是不必要的噪音。
协议版本與服務器侧拦截
有些“抓不到”其實發生在更底层:服務器禁用了較老的 TLS 版本,或者只啟用了很小众的加密套件,爬虫协商不上;有的 WAF 會在 TLS 层做拦截和限速,表現和證书問题非常像。使用 CDN 时還要留意回源證书,回源失敗时對外表現可能是 5xx,也可能干脆超时。
動手排查的顺序
- 用命令行带 -I 或 -v 請求入口頁,看是否出現證书相關报错。
- 用 openssl s_client 检查證书鏈是否完整、有效期還剩多久、覆盖了哪些域名。
- 數一數跳轉层數,確認最终落地的地址是唯一的規范地址。
- 翻訪問日誌,看有没有 TLS 握手失敗、连接被重置這類非 HTTP 层面的记錄。
- 在搜尋平台的抓取诊断工具里提交入口頁,看返回的是 DNS 错誤、连接错誤還是抓取错誤。
批量域名场景下,建议把證书到期時間统一收進一張表,到期前 15 到 30 天触發提醒,比事後一處處排查省事得多。
證书和 TLS 属于基础设施:正常时没人會注意,出問题时同 IP、同證书覆盖的 URL 會一起失效。蜘蛛池這種批量域名的用法,尤其需要统一的巡检和到期提醒。
最後补一句定位:這類排查解决的是“能不能被抓到”的問题,和收錄、排名不是一回事。入口頁能被稳定地拿到,只是让後續的連結發現和 URL 提交有了意义;至于最终會不會被索引,還要看内容本身、站点整体质量和搜尋算法自己的判断。