站点启用Brotli压缩后,要确认AI爬虫(如Googlebot、Bingbot等)是否支持解压,最直接的方法是检查爬虫发送的HTTP请求头中是否包含Accept-Encoding: br。如果包含,说明该爬虫声明支持;如果不含,则后续响应中不应返回Brotli压缩内容,否则爬虫可能无法正常解析。你可以通过服务器日志、线上抓包或使用curl模拟爬虫User-Agent来验证。下面具体展开几种操作方式和主流爬虫的实际支持情况,以及遇到不支持的爬虫时的降级方案。

如何查看爬虫请求头中的Accept-Encoding字段

当爬虫访问你站点时,会在请求头中携带它支持的压缩算法。在服务器端(如Nginx、Apache、CDN)可以记录或实时查看这个字段。如果没有开启日志记录,可以使用curl命令行模拟爬虫的User-Agent发送请求,例如:curl -I -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://你的域名。在返回的响应头中,如果看到Content-Encoding: br,说明服务器对这次请求返回了Brotli压缩内容,同时意味着爬虫必须支持解压才能正确读取。但更关键的还是看请求头中的接受声明。

主流AI爬虫对Brotli的支持现状

根据Google和Bing的官方文档,Googlebot和Bingbot均已支持Brotli解压。Google官方在2020年就已宣布支持,Bing也在后续版本中加入。但其他AI驱动的爬虫(如某些SEO分析工具、私有采集器)未必都支持。你可以通过检查爬虫的User-Agent和请求头来判断。如果不确定,建议在测试环境下先对特定爬虫返回Brotli内容,观察其是否正常抓取(例如通过日志查看该爬虫后续是否请求了更多页面,或者通过搜索引擎的抓取统计工具查看)。这里不列出具体版本号,因为版本可能变动,核验路径是查阅各自官方的开发者文档。

通过服务器日志或CDN分析确认实际解码情况

仅仅依靠请求头声明不够严谨——有些爬虫声明了支持但实际解压失败。更可靠的方法是观察服务器返回Content-Encoding: br后,该爬虫是否继续正常抓取。在Nginx日志中,你可以将请求头中的User-Agent和响应状态码一起记录;CDN平台(如Cloudflare、Akamai)也会提供日志分析功能,可以筛选出特定爬虫的请求,检查缓存命中情况和压缩方式。如果发现爬虫在收到Brotli响应后频繁出现4xx或连接重置,很可能就是不兼容。这时需要降级处理。

配置内容协商:让不支持Brotli的爬虫也能正常抓取

服务器应当根据客户端声明的Accept-Encoding来决定使用哪种压缩算法。现代Web服务器(如Nginx、Apache)默认已经做了内容协商。在Nginx中,你可以检查gzip_typesbrotli_types配置是否覆盖了所有内容类型。对于不支持Brotli的爬虫,服务器会自动回退到gzip或不做压缩。建议保留gzip作为后备,因为几乎所有爬虫都支持gzip。你还可以在CDN层面设置按User-Agent区分压缩策略,但这通常不需要。核心原则:不要仅对不支持Brotli的爬虫强制返回br,否则会导致抓取异常。可以通过A/B测试一小部分爬虫流量来验证降级逻辑是否工作。

完整验证步骤清单与常见误区

  1. 检查请求头:用curl模拟爬虫User-Agent,查看请求头中是否包含Accept-Encoding: br。如果不含,说明该爬虫不支持。
  2. 检查响应头:确保服务器只对声明了br支持的客户端返回Content-Encoding: br。可以设置日志输出请求头和响应头对比。
  3. 爬取测试:在搜索引擎的抓取工具(如Google Search Console的“检查网址”)中,输入页面URL,查看抓取详情里显示的响应头。若显示br且状态正常,则支持。
  4. 监控异常:启用后观察一段时间,看是否有特定爬虫的抓取量骤降或错误率上升,这可能是不兼容的征兆。
  5. 常见误区:不是所有声称“AI爬虫”的工具都支持Brotli;不要只依赖请求头,需要实际验证解码结果;不要同时开启Brotli和gzip的强制覆盖,应尊重客户端的协商。