图片站给每张图的引用地址加了 utm_source=weibo 之类的渠道参数,用于统计外链来源,图片 sitemap 里同一张图出现了十几个版本,索引里图片条目虚高到十万。

真正麻烦的地方在于,几个原因的现象几乎一样。渠道参数加在了图片 URL 上,同一资源对应多个地址;sitemap 生成时直接取数据库里的原始引用地址;CDN 不对参数做归一,每个组合都独立缓存;外链图片没有做 301 到无参地址。

上来先统计同一图片的地址变体数量

grep -o 'img/1024[^" ]*' access.log | sort | uniq -c | sort -rn | head

sitemap 只输出去掉参数的原始地址

python build_image_sitemap.py --strip-query

给带参图片地址做 301 归一

if ($arg_utm_source) { return 301 https://static.example.com$uri; }

等前面都确认过,再确认 CDN 缓存键忽略 utm 参数

curl -sI 'https://static.example.com/img/1024.jpg?utm_source=weibo' | grep -i 'x-cache'

别只看报错消失,验证要多做一步。带参图片地址统一 301 到无参版本,sitemap 里每张图只出现一次,图片收录条目回落到真实数量。

补一句。统计参数应该加在落地页而不是资源地址上,图片一旦带上渠道参数,索引里就会出现成倍的重复条目。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189