这个坑值得记一笔。图片站把 jpg 批量转成 webp,Nginx 1.24 的 mime.types 里没有 webp 映射,响应头是 application/octet-stream。浏览器能显示,Google 图片搜索收录量两周掉了六成。试过重新生成缩略图,没用。
刚开始盯着「对象存储回源时覆盖了源站的 Content-Type」,折腾了半个多小时,排掉了。
这类报错背后常见的原因有几处,逐个排除就行。Content-Type 不是 image/webp,图片搜索会把它当二进制文件;mime.types 版本太旧,没有 webp 与 avif 的类型映射;页面里 img 的 src 指向 .webp,但服务器按下载处理并加了 attachment。
上来先看单张图的响应头
curl -sI https://www.example.com/img/photo.webp | grep -i content-type
随后确认 mime.types 有没有映射
grep -i webp /etc/nginx/mime.types
补上类型并重载
printf 'image/webp webp;\n' >> /etc/nginx/mime.types && nginx -s reload
批量抽查图片状态
for f in $(ls /var/www/html/img/*.webp | head -5); do curl -sI https://www.example.com/img/$(basename $f) | grep -i content-type; done
排查用的命令都是临时敲的,没有写成脚本,事后才整理。
改完先别撤,确认这几项。图片响应头变成 image/webp,图片搜索的抓取量一周内回到转换前水平,索引里的缩略图也恢复显示。
改成 avif 时同样要加 image/avif,格式换一次就得查一次类型表,这个坑会反复出现。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
