图片优化分析
检查项
Alt文本
- 所有
<img>元素上必须存在(除装饰性图片:role="presentation")。parse_html.py会将此类图片标记为decorative: true;请勿将这些图片标记为缺少alt文本。 - 描述性:描述图片内容,而非“image.jpg”或“photo”
- 在自然的前提下包含相关关键词,不要堆砌关键词
- 长度:10-125个字符
好的示例:
- "Professional plumber repairing kitchen sink faucet"
- "Red 2024 Toyota Camry sedan front view"
- "Team meeting in modern office conference room"
差的示例:
- "image.jpg"(文件名,非描述)
- "plumber plumbing plumber services"(关键词堆砌)
- "Click here"(无描述性)
文件大小
按图片类别的分层阈值:
| 图片类别 | 目标 | 警告 | 严重 |
|---|---|---|---|
| 缩略图 | < 50KB | > 100KB | > 200KB |
| 内容图片 | < 100KB | > 200KB | > 500KB |
| 英雄横幅图片 | < 200KB | > 300KB | > 700KB |
在可能且不损失画质的前提下,建议压缩至目标阈值。
格式
| 格式 | 浏览器支持 | 使用场景 |
|---|---|---|
| WebP | 97%+ | 默认推荐 |
| AVIF | 92%+ | 最佳压缩,较新格式 |
| JPEG | 100% | 照片的回退格式 |
| PNG | 100% | 带透明度的图形 |
| SVG | 100% | 图标、Logo、插图 |
推荐使用WebP/AVIF替代JPEG/PNG。检查是否使用了带有格式回退的 <picture> 元素。
判断实际提供的格式,而非URL扩展名
许多网站当浏览器请求时,会从 .jpg/.png URL 提供 WebP 或 AVIF 格式(如 WordPress 的 WebP 插件 EWWW、ShortPixel、WebP Express 和 Imagify、Cloudflare Polish、图片 CDN)。扩展名并非访问者接收到的格式。运行
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run parse_html.py --url <url> --probe-images --json
,该命令使用浏览器的 Accept 请求头获取每张图片,并为每个图片条目添加以下字段(对于懒加载图片,它会探测 resolved_src(真实来源),因为此时 src 是一个占位符):
| 字段 | 含义 |
|---|---|
served_format | 实际提供的格式(webp、avif、jpeg、png、gif、svg、jxl),根据魔法字节判断,否则为 null |
served_bytes | 实际提供的大小(Content-Length),当服务器省略时返回 null |
negotiated | 当响应包含 Vary: Accept 时为 true,表示格式取决于浏览器 |
probe_error | 无法检查图片的原因(请求失败、URL格式错误、或响应不是可识别的图片,例如 HTML 错误页面或防盗链页面),否则为 null |
- 仅在
served_format/served_bytes的基础上标记“格式错误”和大小节省。一个.jpgURL 但served_format: webp表明已优化:不要建议进行转换。 - 如果设置了
probe_error,则将格式报告为未验证。切勿从扩展名推断格式。 - 在未经确认返回HTTP 200之前,切勿建议替换图片URL(例如
photo.webp)。
推荐的 <picture> 元素模式
使用渐进增强,优先使用最高效的格式:
<picture>
<source srcset="image.avif" type="image/avif">
<source srcset="image.webp" type="image/webp">
<img src="image.jpg" alt="描述性alt文本" width="800" height="600" loading="lazy" decoding="async">
</picture>
浏览器将使用它支持的第一个格式。全球浏览器支持(caniuse.com,2026-09-28检查):AVIF约95.4%,WebP约96.8%。在引用前请重新检查caniuse。
JPEG XL:新兴格式
第三方报告和维基百科描述了一个基于Rust的JPEG XL解码器已在Chrome 145稳定版(2026-02-10)中发布,位于 chrome://flags/#enable-jxl-image-format 标志之后,默认未启用;事实包中未检索到Google官方的确认。由于默认支持未确认,因此目前尚不适用于生产环境的网页交付。继续提供AVIF/WebP并搭配JPEG回退,并持续关注。
响应式图片
- 为多个尺寸设置
srcset属性 - 与布局断点匹配的
sizes属性 - 针对设备像素比选择合适的分辨率
<img
src="image-800.jpg"
srcset="image-400.jpg 400w, image-800.jpg 800w, image-1200.jpg 1200w"
sizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1200px"
alt="Description"
>
懒加载
- 视口以下图片添加
loading="lazy" - 不要对首屏上方/英雄图片使用懒加载(会损害LCP)
- 检查是原生懒加载还是基于JavaScript的懒加载
<!-- 视口以下 - 懒加载 -->
<img src="photo.jpg" loading="lazy" alt="Description">
<!-- 首屏上方 - 即时加载(默认) -->
<img src="hero.jpg" alt="Hero image">
检测到的懒加载方法(lazy_method 字段)
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run parse_html.py 通过每个图片条目上的 lazy_method 字段对每张图片的懒加载机制进行分类。共有五种取值:
lazy_method | 检测到的信号 | 常见技术栈 |
|---|---|---|
native | loading="lazy" HTML属性 | 现代浏览器、纯HTML |
perfmatters | data-perfmatters-src/-srcset 或类名 perfmatters-lazy | WordPress + Perfmatters插件 |
ewww | data-ewww-src / data-eio 或类名 lazyload-eio | WordPress + EWWW Image Optimizer |
js-generic | data-src / data-lazy-src / data-original / data-srcset 或类名 lazyload/lazyloaded/lazy | Lazysizes、vanilla-lazyload、jQuery插件 |
none | 未检测到属性和类名信号 | 页面未对此图片进行懒加载 |
审计图片SEO时,请将 lazy_method 与 loading 一同报告,以便用户了解其网站是否使用了JavaScript驱动的懒加载器(这种情况下原生 loading="lazy" 属性是故意省略的,并非退化)。
LCP图片的 fetchpriority="high"
为英雄/LCP图片添加 fetchpriority="high",以优先在浏览器的网络队列中下载它:
<img src="hero.webp" fetchpriority="high" alt="Hero image description" width="1200" height="630">
关键: 不要对首屏上方/LCP图片使用懒加载。对LCP图片使用 loading="lazy" 会直接损害LCP分数。仅对视口以下图片使用 loading="lazy"。
非LCP图片的 decoding="async"
为非LCP图片添加 decoding="async",以防止图片解码阻塞主线程:
<img src="photo.webp" alt="Description" width="600" height="400" loading="lazy" decoding="async">
CLS预防
- 所有
<img>元素上设置了width和height属性 - 亦可使用
aspect-ratioCSS作为替代 - 标记未设置尺寸的图片
<!-- 良好 - 已设置尺寸 -->
<img src="photo.jpg" width="800" height="600" alt="Description">
<!-- 良好 - 使用CSS宽高比 -->
<img src="photo.jpg" style="aspect-ratio: 4/3" alt="Description">
<!-- 不良 - 无尺寸 -->
<img src="photo.jpg" alt="Description">
文件名
- 描述性:
blue-running-shoes.webp而非IMG_1234.jpg - 使用连字符、小写字母、无特殊字符
- 包含相关关键词
CDN使用
- 检查图片是否通过CDN提供(不同域名、CDN头部信息)
- 对于图片密集型网站推荐使用CDN
- 检查边缘缓存头部信息
输出
图片审计摘要
| 指标 | 状态 | 计数 |
|---|---|---|
| 图片总数 | - | XX |
| 缺少Alt文本 | ❌ | XX |
| 尺寸过大(>200KB) | ⚠️ | XX |
| 格式错误 | ⚠️ | XX |
| 未设置尺寸 | ⚠️ | XX |
| 未懒加载 | ⚠️ | XX |
优先级优化列表
按文件大小影响排序(节省空间最大的优先):
| 图片 | 当前大小 | 格式 | 问题 | 预估节省空间 |
|---|---|---|---|---|
| ... | ... | ... | ... | ... |
建议
- 将X张图片转换为WebP格式(预估节省XX KB)
- 为X张图片添加alt文本
- 为X张图片添加尺寸属性
- 对视口以下的X张图片启用懒加载
- 压缩X张尺寸过大的图片
图片SERP分析
当DataForSEO MCP可用时,使用竞争数据增强图片审计。
/seo images serp <keyword>
将页面内图片与Google SERP中显示的图片结果进行交叉引用。
工作流程:
- 已固定的DataForSEO MCP服务器(2.8.10)没有Google Images SERP工具。
当SERP包含图片元素时,请使用
serp_organic_live_advanced(depth=100)的images元素,并在没有图片SERP数据可用时明确说明。 - 提取:顶级域名、图片类型、alt文本模式
- 输出竞争对手图片SERP格局
输出:
| 排名 | 域名 | 标题/Alt | 图片URL | 页面URL |
|---|---|---|---|---|
| 1 | example.com | "Blue running shoes..." | .../shoes.webp | /products/... |
分析包括:
- 域名主导地位:哪些域名拥有最多的图片位置(按数量排名前10)
- Alt文本模式:排名靠前的图片中常见的标题/alt模式
- 格式分布:排名靠前的结果中WebP、JPEG、PNG的分布情况
- 机会评分:您拥有页面排名但缺乏图片存在感的关键词
如果DataForSEO MCP不可用,请告知用户并建议安装扩展。
图片文件优化
优化图片文件以提升SEO:格式转换、元数据注入、压缩。
/seo images optimize <path>
针对网页和SEO优化图片文件。转换至WebP/AVIF,注入IPTC元数据,压缩,并生成响应式变体。
使用的工具(按优先级排序):
exiftool-- EXIF/IPTC/XMP读写(安装:sudo apt install libimage-exiftool-perl)cwebp-- WebP转换(安装:sudo apt install webp)- ImageMagick
convert-- 格式转换、调整大小(大多数系统已预装) - FFmpeg -- 格式转换的备用方案(预装)
运行前: 使用 which exiftool cwebp convert ffmpeg 检查哪些工具可用。
格式转换
将图片转换为现代格式并保留元数据:
# WebP(推荐默认) - 保留元数据
cwebp -q 82 -metadata all input.jpg -o output.webp
# 通过ImageMagick转换WebP(如果未安装cwebp则为备用方案)
convert input.jpg -quality 82 output.webp
# 通过FFmpeg转换AVIF(编码较慢,压缩最佳)
ffmpeg -i input.jpg -c:v libaom-av1 -crf 30 -still-picture 1 output.avif
# 响应式变体(400w、800w、1200w)
convert input.jpg -resize 400x -quality 82 image-400.webp
convert input.jpg -resize 800x -quality 82 image-800.webp
convert input.jpg -resize 1200x -quality 82 image-1200.webp
元数据注入(适用于Google图片展示的IPTC)
Google图片会在搜索结果中显示IPTC创作者、署名行和版权信息。这不是排名因素,但能改善Google图片展示和品牌归属。
使用exiftool(推荐):
# 读取所有元数据
exiftool image.jpg
# 为Google图片富结果注入IPTC + XMP元数据
exiftool \
-IPTC:ObjectName="产品照片描述" \
-IPTC:Caption-Abstract="详细的图片描述" \
-IPTC:By-line="品牌名称摄影" \
-IPTC:Credit="品牌名称" \
-IPTC:CopyrightNotice="版权所有2026 品牌名称" \
-IPTC:Source="brandname.com" \
-XMP:Title="产品照片描述" \
-XMP:Description="详细的图片描述" \
-XMP:Creator="品牌名称摄影" \
-XMP:Rights="版权所有2026 品牌名称" \
image.jpg
# 批量注入到目录下的所有图片
exiftool -overwrite_original \
-IPTC:By-line="品牌名称" \
-IPTC:CopyrightNotice="版权所有2026 品牌名称" \
*.jpg *.webp *.png
使用ImageMagick(备用方案):
identify -verbose image.jpg | head -50
convert input.jpg \
-set comment "产品照片描述" \
-set IPTC:2:80 "品牌名称摄影" \
-set IPTC:2:116 "版权所有2026 品牌名称" \
output.jpg
注意:WebP原生支持EXIF和XMP,但不原生支持IPTC。对于WebP文件,请使用XMP字段替代IPTC。exiftool会自动处理此转换。
AI生成图片:DigitalSourceType(Merchant Center要求)
对于由生成式AI生成的产品图片,Google Merchant Center 要求填写IPTC DigitalSourceType: TrainedAlgorithmicMedia 元数据。这是运营策略要求,而非排名因素:缺少此标签的AI生成图片源可能会被拒绝。
主要来源(Merchant Center AI生成内容政策): https://support.google.com/merchants/answer/14743464 (ai-optimization-guide 未记录 DigitalSourceType/IPTC/Merchant 标签。)
审计命令:
# 审计目录下的IPTC标签(统计:缺失、AI生成、相机拍摄等)
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run iptc_ai_label.py audit ./images/ --json
# 审计单张图片
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run iptc_ai_label.py audit ./hero.webp --json
# 向图片注入AI标签
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run iptc_ai_label.py inject ./ai-hero.webp \
--source-type trainedAlgorithmicMedia
# 其他词汇值:
# compositeSynthetic (相机拍摄+AI元素的混合)
# algorithmicMedia (纯粹由算法创建,不来自采样训练数据)
# compositeWithTrainedAlgorithmicMedia(例如,在真实媒体上进行AI内绘/外绘)
# digitalCapture (完全由相机拍摄的照片)
原始的exiftool等效命令(用于临时使用):
# 手动注入
exiftool \
-XMP-iptcExt:DigitalSourceType="https://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia" \
ai-generated-product.jpg
# 审计:查找目录中缺少标签的图片
exiftool -if 'not $XMP-iptcExt:DigitalSourceType' \
-filename -DigitalSourceType *.jpg *.webp *.png
Google提取的IPTC DigitalSourceType 值:
trainedAlgorithmicMedia:完全由AI生成(对扩散模型生成的产品图片使用此值)compositeSynthetic:混合了相机拍摄和AI生成元素algorithmicMedia:纯粹由算法创建,不来自采样训练数据





