/posts/webp-ai-vary
GEO优化

给页面加WebP后AI抓取率掉了两成,查下来是Vary头没配对

技术宅阿杰 18 0 9

上周帮客户把列表页图片全换成 WebP,Lighthouse 从 68 蹦到 92,本来挺高兴。结果这周对抓取日志,AI 爬虫的抓取频次掉了 21%,访问深度也从平均 3.4 页压到 1.9 页。

我先怀疑是 CDN 缓存。把回源日志拉出来按 UA 分组,AI 爬虫那一栏 304 命中率只有 41%,正常浏览器是 87%。再查响应头,问题出来了——图片资源响应里 Vary 只带了 Accept-Encoding,没带 Accept。

我们做图片格式协商的逻辑是:服务端读 Accept 头里有没有 image/webp,有就返 WebP,没有就回退 JPEG。但 CDN 边缘节点按 Vary 做缓存键,Vary 里没有 Accept,节点就把第一个请求的结果缓存住了。如果第一个请求来自不支持 WebP 的老爬虫,后面所有请求都吃 JPEG;反过来也一样。缓存键和内容协商维度对不上,响应就不可预测。

更麻烦的是回退路径。有 12% 的请求返回的是 406 Not Acceptable——Accept 头里带 image/webp 但没带 */*,源站严格匹配就拒了。按 RFC 7231,Accept 不匹配应当回退到默认表示,不该返回 406。AI 爬虫对 4xx 的反应比传统蜘蛛敏感得多,连续两个 406 之后,那个路径基本就不来了。

补了两个配置:一是 Vary: Accept, Accept-Encoding 两个维度都加上;二是源站改成宽松匹配,Accept 里没有明确拒绝 WebP 就返 WebP,兜底 */*。改完观察三天,抓取频次回到基线 96%,访问深度 3.1 页。

顺带说个容易漏的:Link 头里的 preload 如果指向 WebP,而客户端 Accept 不支持,浏览器会白下一次再回退,LCP 反而恶化。要么用 imagesrcset 做类型协商,要么干脆别 preload 图片。

你们那边做图片格式协商的时候,Vary 是挂在 CDN 规则里还是源站配置里?有没有碰到过 AI 爬虫因为 406 或者缓存键错位直接降频的情况?

登录后可以为帖子点赞,但本帖内容对所有人开放阅读。

社区回应

0 Replies

还没有回应,抢一个沙发。

登录后可以回应和点赞,但本帖内容对所有人开放阅读。