先把当时的情况摆出来。图片 CDN 开了自动格式转换,浏览器请求 .jpg 时按 Accept 头返回 WebP。图片 sitemap 里仍写 .jpg,蜘蛛抓到的却是 WebP 字节,图片搜索里这批图显示不出来,收录量掉了四成。

排查方向其实有限,先把可能性排一排。CDN 按 Accept 头改写响应体,URL 后缀与实际格式不符。另一种情况是Content-Type 跟着变成 image/webp,与 sitemap 声明冲突。

不容易想到的是,sitemap 生成时读磁盘文件名,不看线上响应。还有一种情况,图片地址带版本参数,CDN 缓存了两种格式。

先用蜘蛛 UA 看实际返回的格式

curl -sI -A 'Baiduspider' https://www.example.com/uploads/a.jpg | grep -i content-type

然后对比带 WebP Accept 头的结果

curl -sI -H 'Accept: image/webp' https://www.example.com/uploads/a.jpg | grep -i content-type

随后确认响应里有没有 Vary 头

curl -sI -A 'Baiduspider' https://www.example.com/uploads/a.jpg | grep -i vary

剩下的就是核对 sitemap 里的扩展名

curl -s https://www.example.com/image-sitemap.xml | head -20

别只看报错消失,验证要多做一步。蜘蛛拿到的 Content-Type 与 sitemap 后缀一致,图片搜索收录在一个月内恢复到 9000 张。

提醒一点。格式转换对速度有好处,但 sitemap 和响应头必须说同一件事,否则等于自相矛盾。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189