蜘蛛池跑了一段时间,日志里却始终看不到搜索蜘蛛的身影,很多人第一反应是内容或者链接的问题。但在排查顺序上,还有一个更前置、也更容易被忽略的环节: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 提交有了意义;至于最终会不会被索引,还要看内容本身、站点整体质量和搜索算法自己的判断。