画像最適化分析
チェック項目
代替テキスト
- すべての
<img>要素に存在すること(role="presentation"を持つ装飾画像は除く)。parse_html.pyはこれらの画像にdecorative: trueをマークするので、それらに対して代替テキスト欠落を報告しないでください。 - 説明的であること:「image.jpg」や「photo」ではなく、画像の内容を説明していること。
- 自然な形で関連キーワードを含み、キーワードの詰め込み過ぎではないこと。
- 長さ:10〜125文字。
良い例:
- 「キッチンの蛇口を修理するプロの配管工」
- 「赤色の2024年型トヨタカムリセダン 前面」
- 「モダンなオフィスの会議室でのチームミーティング」
悪い例:
- 「image.jpg」(ファイル名であり、説明ではない)
- 「配管工 配管 配管サービス」(キーワードの詰め込み)
- 「こちらをクリック」(説明的ではない)
ファイルサイズ
画像カテゴリ別の段階的閾値:
| 画像カテゴリ | 目標 | 警告 | 重大 |
|---|---|---|---|
| サムネイル | < 50KB | > 100KB | > 200KB |
| コンテンツ画像 | < 100KB | > 200KB | > 500KB |
| ヒーロー/バナー画像 | < 200KB | > 300KB | > 700KB |
品質を損なわずに可能な限り、目標閾値への圧縮を推奨します。
フォーマット
| フォーマット | ブラウザサポート率 | ユースケース |
|---|---|---|
| WebP | 97%以上 | デフォルトで推奨 |
| AVIF | 92%以上 | 最高の圧縮率、より新しい |
| JPEG | 100% | 写真のフォールバック |
| PNG | 100% | 透明度が必要なグラフィック |
| SVG | 100% | アイコン、ロゴ、イラスト |
JPEG/PNGよりもWebP/AVIFを推奨します。フォーマットのフォールバックを持つ <picture> 要素を確認してください。
配信されているフォーマットを判定し、URLの拡張子に惑わされないこと
多くのサイト(WordPressのEWWW、ShortPixel、WebP Express、ImagifyなどのWebPプラグイン、Cloudflare Polish、画像CDN)は、ブラウザが要求した場合に .jpg や .png のURLからWebPやAVIFを配信します。拡張子は訪問者が実際に受け取るフォーマットではありません。以下を実行してください。
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run parse_html.py --url <url> --probe-images --json
このコマンドは、ブラウザの Accept ヘッダーを使って各画像を取得し、すべての画像エントリに以下のフィールドを追加します(遅延読み込み画像の場合は、src がプレースホルダーであるため、実際のソースである resolved_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からのみ行ってください。.jpgのURLで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="説明的な代替テキスト" width="800" height="600" loading="lazy" decoding="async">
</picture>
ブラウザは最初にサポートされているフォーマットを使用します。グローバルブラウザサポート率(caniuse.com、2026年9月28日確認):AVIF約95.4%、WebP約96.8%。引用する前にcaniuseを再確認してください。
JPEG XL: 新しいフォーマット
サードパーティのレポートとWikipediaによると、RustベースのJPEG XLデコーダーがChrome 145安定版(2026年2月10日)に chrome://flags/#enable-jxl-image-format フラグの背後で出荷されましたが、デフォルトでは有効になっていません。Googleが所有する確認はファクトパックでは取得されていません。デフォルトのサポートが確認されていないため、プロダクションでのWeb配信にはまだ実用的ではありません。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="説明"
>
遅延読み込み
- スクロールして見える領域より下の画像には
loading="lazy" - スクロールして見える領域より上の画像やヒーロー画像は遅延読み込みしないでください(LCPに悪影響を与えます)
- ネイティブの遅延読み込みとJavaScriptベースの遅延読み込みを確認
<!-- 画面外 - 遅延読み込み -->
<img src="photo.jpg" loading="lazy" alt="説明">
<!-- 画面内 - 通常読み込み(デフォルト) -->
<img src="hero.jpg" alt="ヒーロー画像">
検出された遅延読み込み方法(lazy_method フィールド)
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run parse_html.py は、各画像エントリの lazy_method フィールドを通じて、画像の遅延読み込みメカニズムを分類します。5つの値があります:
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を監査する際には、loading と一緒に lazy_method を報告し、ユーザーが自分のサイトがJS駆動の遅延読み込みを使用しているかどうかを認識できるようにします(その場合、ネイティブの loading="lazy" 属性は意図的に存在しません。これは問題ではありません)。
LCP画像の fetchpriority="high"
ヒーロー/LCP画像に fetchpriority="high" を追加して、ブラウザのネットワークキューでのダウンロードを優先させます:
<img src="hero.webp" fetchpriority="high" alt="ヒーロー画像の説明" width="1200" height="630">
重要: スクロールして見える領域より上/LCP画像は遅延読み込みしないでください。LCP画像に loading="lazy" を使用すると、LCPスコアに直接悪影響を与えます。loading="lazy" はスクロールして見える領域より下の画像のみに留めてください。
LCP以外の画像の decoding="async"
LCP以外の画像に decoding="async" を追加して、画像のデコードがメインスレッドをブロックするのを防ぎます:
<img src="photo.webp" alt="説明" width="600" height="400" loading="lazy" decoding="async">
CLS(レイアウトシフト)対策
- すべての
<img>要素にwidthとheight属性が設定されていること - 代替としてCSSの
aspect-ratio - 寸法が設定されていない画像をフラグ
<!-- 良い - 寸法が設定されている -->
<img src="photo.jpg" width="800" height="600" alt="説明">
<!-- 良い - CSSのアスペクト比 -->
<img src="photo.jpg" style="aspect-ratio: 4/3" alt="説明">
<!-- 悪い - 寸法なし -->
<img src="photo.jpg" alt="説明">
ファイル名
- 説明的であること:
blue-running-shoes.webpであり、IMG_1234.jpgではない - ハイフン区切り、小文字、特殊文字なし
- 関連キーワードを含むこと
CDNの使用
- 画像がCDNから配信されているか確認(異なるドメイン、CDNヘッダー)
- 画像が多いサイトにはCDNを推奨
- エッジキャッシュヘッダーを確認
出力
画像監査サマリー
| メトリクス | ステータス | 件数 |
|---|---|---|
| 画像合計 | - | XX |
| 代替テキスト欠落 | ❌ | XX |
| サイズ超過 (>200KB) | ⚠️ | XX |
| 間違ったフォーマット | ⚠️ | XX |
| 寸法なし | ⚠️ | XX |
| 遅延読み込みなし | ⚠️ | XX |
優先最適化リスト
ファイルサイズの影響でソート(削減効果が大きい順):
| 画像 | 現在のサイズ | フォーマット | 問題 | 推定削減効果 |
|---|---|---|---|---|
| ... | ... | ... | ... | ... |
推奨事項
- X個の画像をWebP形式に変換(推定XX KBの削減)
- X個の画像に代替テキストを追加
- X個の画像に寸法を追加
- 画面外のX個の画像で遅延読み込みを有効化
- X個のサイズ超過画像を圧縮
画像SERP分析
DataForSEO MCPが利用可能な場合、競合データで画像監査を強化します。
/seo images serp <keyword>
ページ上の画像をGoogle SERPに表示される画像結果と相互参照します。
ワークフロー:
- 固定されたDataForSEO MCPサーバー(2.8.10)にはGoogle画像SERPツールはありません。SERPに画像要素がある場合は
serp_organic_live_advanced(depth=100)のimages要素を使用し、画像SERPデータがない場合はその旨を明確に伝えます。 - 上位ドメイン、画像タイプ、代替テキストパターンを抽出
- 競合の画像SERPの状況を出力
出力:
| 順位 | ドメイン | タイトル/代替テキスト | 画像URL | ページURL |
|---|---|---|---|---|
| 1 | example.com | 「ブルーランニングシューズ...」 | .../shoes.webp | /products/... |
分析内容:
- ドメイン優位性: どのサイトが最も多くの画像ポジションを獲得しているか(上位10件を件数順に表示)
- 代替テキストパターン: 上位ランキング画像の一般的なタイトル/代替テキストパターン
- フォーマット分布: 上位結果におけるWebP vs JPEG vs PNG
- 機会スコア: ページランキングはあるが画像表示がないキーワード
DataForSEO MCPが利用できない場合は、ユーザーにその旨を伝え、拡張機能のインストールを提案します。
画像ファイル最適化
SEOのための画像ファイル最適化:フォーマット変換、メタデータ注入、圧縮。
/seo images optimize <path>
Webと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 Creator、Credit Line、Copyrightが表示されます。これはランキング要因ではありませんが、Google画像表示とブランド帰属の改善に役立ちます。
exiftoolを使用する場合(推奨):
# すべてのメタデータを読み取る
exiftool image.jpg
# Google画像検索のリッチリザルトのためにIPTC + XMPメタデータを注入
exiftool \
-IPTC:ObjectName="プロダクトフォトの説明" \
-IPTC:Caption-Abstract="詳細な画像説明" \
-IPTC:By-line="ブランド名 フォトグラフィー" \
-IPTC:Credit="ブランド名" \
-IPTC:CopyrightNotice="Copyright 2026 ブランド名" \
-IPTC:Source="brandname.com" \
-XMP:Title="プロダクトフォトの説明" \
-XMP:Description="詳細な画像説明" \
-XMP:Creator="ブランド名 フォトグラフィー" \
-XMP:Rights="Copyright 2026 ブランド名" \
image.jpg
# ディレクトリ内のすべての画像に一括注入
exiftool -overwrite_original \
-IPTC:By-line="ブランド名" \
-IPTC:CopyrightNotice="Copyright 2026 ブランド名" \
*.jpg *.webp *.png
ImageMagickを使用する場合(フォールバック):
identify -verbose image.jpg | head -50
convert input.jpg \
-set comment "プロダクトフォトの説明" \
-set IPTC:2:80 "ブランド名 フォトグラフィー" \
-set IPTC:2:116 "Copyright 2026 ブランド名" \
output.jpg
注意: WebPはEXIFとXMPをサポートしていますが、IPTCはネイティブにサポートしていません。WebPファイルの場合は、IPTCの代わりにXMPフィールドを使用してください。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ラベルを監査(カウント: missing, ai, capturedなど)
"${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: アルゴリズムのみで作成、サンプルから作成されたものではない





