seo-images-media について
seo-images-media は、画像の説明、寸法、形式、埋め込み動画のメタデータを確認する SEO 監査スキルです。アクセシビリティやメディアマークアップの問題を見つけ、ページの文脈で裏付けられる範囲で代替テキストや修正を提案します。
主な機能
- 01画像の代替テキストの有無と品質を確認
- 02寸法がない画像を検出
- 03旧形式の画像を確認
- 04VideoObject スキーマのない動画を検出
- 05文脈に沿った代替テキストの提案
活用シーン
- 01代替テキストがないコンテンツ画像の特定
- 02表示寸法が確保されていない画像の特定
- 03埋め込み動画の構造化データの監査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hainrixz/ claude-seo-ai --skill seo-images-mediaインストール後、Claude Code で/seo-images-mediaを入力して読み込まれたか確認します。
詳細
seo-images-media (M9)
アクセシブルで十分に説明されたメディアは、ランキングシステムと AI 抽出ツールの両方に読み取られます。画像の主要な意味的な手掛かりとなるのは alt テキストです。参照先:references/schema-tier1.md(VideoObject の行)。
入力
ディスパッチエンベロープで指定された PageSnapshot を使用します。<run_dir>/pages/<slug>.json から parsed を読み取ります(images[] の alt_present/sized/lazy、iframes、jsonld[])。改変されていない証拠を確認するには、pages/<slug>.html を Grep します。サイトのアーティファクトは <run_dir>/site/{robots.json,sitemaps.json,discovery.json} にあります。audit.mjs がすでに出力した決定論的な検出結果は <run_dir>/findings.deterministic.json に記載されています。これらの ID は再出力せず、モデルの判定による検出結果のみを追加してください。スナップショットがなく、URL/パスを直接指定して呼び出された場合は、まず node "${CLAUDE_PLUGIN_ROOT}/scripts/snapshot.mjs" <target> --out "${CLAUDE_PLUGIN_DATA}/runs" を実行し、出力されたスナップショットのパスを使用してください。
監査
PageSnapshot を使用して作業します(render.used が none でなければ parsed_rendered、そうでなければ parsed)。
- alt の有無:コンテンツ用の
<img>すべてにalt属性があることを確認します。装飾画像(alt=""とrole="presentation"の組み合わせは適切であり、検出結果には該当しません)と、alt自体がない場合(不合格)を区別します。 - alt の品質:コンテンツ画像の alt が空でないこと、ファイル名(
IMG_2031.jpg)ではないこと、異なる画像間で一字一句同じものが重複していないこと、キーワードを詰め込んでいないこと(カンマ区切りのキーワードリストはアンチパターンです)を確認します。alt は、周囲のコンテンツに即した説明的なものにしてください。目安の長さは約 80~140 文字です。具体性を保ちつつ、スクリーンリーダーや AI によって途中で切り詰められない長さにします。 - 寸法:レイアウトシフトを防ぐため、
<img>にwidthとheightを設定するか、CSS でアスペクト比を確保します(レイアウトシフトは Core Web Vitals の指標の一つです。CWV の測定自体は perf モジュールに任せます)。 - 形式:より小さいバイト数で配信できる最新形式(WebP/AVIF)やレスポンシブな
<picture>/srcsetを利用できるにもかかわらず、従来のjpg/pngが使われている場合は、指摘します。 - 動画:埋め込み動画(
<video>、YouTube/Vimeo の iframe)にVideoObjectJSON-LD がない場合は、M5 と連携します。必須/推奨のプロパティはreferences/schema-tier1.mdを参照してください。
修正
- 自動修正(
fixable: auto):ソースアセットの固有寸法から<img>にwidth/heightを追加します(決定論的、追加のみ、検証可能)。fix用の差分として出力されます。 - 提案(
fixable: proposed):画像と、周囲の見出し/キャプション/段落から推測した文脈に即した alt テキストを生成します。各案の適用には、人による個別の承認が必要です(alt は編集上の判断を伴います)。画像に何が写っているかを、ページの文脈で裏付けられる範囲を超えて決して捏造しないでください。文脈が不十分な場合は、明確に印を付けたTODO: describe imageのプレースホルダーを残すか、ユーザーに確認してください。 - 参考情報(
fixable: advisory):形式のアップグレード(WebP/AVIF、srcset)。このツールはバイナリをトランスコードできないため、これらを書き込むことはありません。推奨のみ行います。
検証
- メソッド
dom_assert:スナップショットを再解析し、条件(alt が空でない、widthとheightがある、ファイル名ではない、など)を検証します。 - 寸法の確認にリモートアセットの固有サイズが必要で、利用可能な取得手段がない場合、ステータスは
passではなくneeds_apiになります。
検出結果
schema/finding.schema.json に従って検出結果を出力します。軸は both、モジュール全体の重大度は 3 です。重大度ポリシー:5 は、サイト/テンプレートのスコープで適格性を失わせる壊滅的な事実に限ります。4 は重大、3 は中程度、2 は軽微、1 はごく軽微、0 は情報提供です。また、アクティブなカテゴリで established の重大度 5 の fail のみがスコアの上限を設定できます(references/scoring-model.md)。M9 に重大度 4 に達するものはありません。
M9.alt.missing—alt属性のないコンテンツ用の<img>。statusfail、fixable: proposed、confidenceestablished。evidence.observedには該当する<img>タグを引用します。M9.img.no_dimensions—width/heightのない<img>。statuswarn、fixable: auto、confidencedirectional(CLS への関連)。M9.video.missing_videoobject— VideoObject スキーマのない埋め込み動画。statuswarn、fixable: proposed、confidenceestablished。 各検出結果では、evidence.observedにページからの引用を含めます。verification.reproduceは実行可能な形式にします。例:node "${CLAUDE_PLUGIN_ROOT}/scripts/parse-html.mjs" --snapshot <pages/<slug>.json>(または--url <u>)を実行し、imagesブロック(missing_alt、empty_alt、missing_dimensions)を確認します。expected_impactは範囲と信頼度タグを付けて示します(単独の % 表記は不可)。
誠実さ
- 代替テキストはアクセシビリティと画像/AI による理解に役立ちます。ランキング向上は
directionalとして扱い、確実な効果として保証しないでください。代替テキストを書き換えればトラフィックが増えると約束してはいけません。 - キーワードを詰め込んだ代替テキストは有害であり、役に立ちません。問題として指摘し、生成してはいけません。
- WebP/AVIF はバイト数を削減します(実際のパフォーマンス要因です)が、フォーマットだけでランキングが上がることは、文書化された要因ではありません。
advisory/lowの大きさにとどめてください。