记录一下那天晚上的排查过程。图片站上线自动转 avif,同一个 URL 按 Accept 头返回不同格式,Content-Type 是 image/avif。三周后百度图片搜索的收录从 3.2 万掉到 200 多张,日志里图片请求的状态码全是 200。
刚开始盯着「原图被转码后删除 avif 失败时没有回退」,折腾了半个多小时,排掉了。
这类报错背后常见的原因有几处,逐个排除就行。图片索引对 avif 的支持不完整 抓到的内容解析不了。少数情况下是同一 URL 按 Accept 协商格式 缓存命中率下降。
不容易想到的是,图片 sitemap 只列了 avif 地址。
先看图片响应头和实际格式
curl -sI https://www.example.com/img/1.jpg | grep -i content-type
保留 jpg 原图并改成格式回退
<picture><source srcset="/img/1.avif" type="image/avif"><img src="/img/1.jpg" alt="nginx 配置示例"></picture>
接着让图片 sitemap 指向 jpg 地址
curl -s https://www.example.com/image-sitemap.xml | head -5
等前面都确认过,再按格式统计抓取量
grep -c 'GET /img/.*\.avif' access.log
怎么算真的好了,看的是同一批现象。图片 sitemap 里的 jpg 地址重新被抓,四周后图片搜索收录回到万级。
容易忽略的是,格式协商适合用户端,不适合爬虫端,给图片索引留一份稳定的 jpg 更省事。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
