画像最適化

SEOとパフォーマンスのために画像を最適化する方法を解説します。WebPやAVIFなどの最新形式、圧縮、正しい寸法、遅延読み込みを使って、Core Web VitalsとLCPを改善します。

初回公開:2026年7月2日 · 最終更新:2026年8月11日 · Advanced
言語

画像最適化はランキングのレバーではなく、速度のための取り組みです。WebPやAVIF、圧縮、正しいサイズでバイト数を減らしLCPを改善しますが、形式そのものに直接のランキング上昇効果はありません。最も価値の高いルールはLCP画像(通常はヒーロー)を決して遅延読み込みしないことです。そこには loading="eager" と fetchpriority="high" を付けます。ネイティブの loading="lazy" は初期ビューポートの外の画像向けで、固定した「画面下」ライン向けではありません。圧縮の正しい品質値は画像ごとにテストし、正しいサイズはレンダリングされるコンテナーサイズ×デバイスピクセル比で決めます。これらでCore Web Vitalsの合格、ランキング変更、トラフィック増加は保証されないため、LCPとCLSを前後で測定してください。

TL;DR — 画像最適化は、直接的なランキング要因ではなく、ページ速度とCore Web Vitalsのための取り組みです。形式(WebP、AVIF)はバイト数を減らしますが、SEO上の上昇効果はありません。Muellerも3通りの言い方でそう述べています。圧縮率だけでなく、透明度、アニメーション、現在のブラウザー対応状況も考慮してください。最も価値の高いルールは、LCP画像(通常はヒーロー)を決して遅延読み込みしないことです。最適化しようとしている指標そのものが遅れます。loading="eager"fetchpriority="high" を付けますが、優先度ヒントが効くのは発見や取得タイミングがボトルネックの場合だけで、すべてのLCP問題を解決するわけではありません。ネイティブの loading="lazy" は初期ビューポートの外にある画像向けで、固定した「画面下何ピクセル」という線に使うものではありません。圧縮に普遍的な「正しい」品質値はありません。画像の種類ごとにテストしてください。正しい寸法は、レンダリングされるコンテナーサイズ × デバイスピクセル比です。コンテナーサイズ自体がレスポンシブレイアウトで変わるので、<picture> のフォールバックとともに srcset/sizes の範囲を配信します(誤った sizes 値は、気付かないまま大きすぎる画像をダウンロードさせます)。Web上で最も一般的なLCP要素は画像なので、この記事はWeb Performanceにもまたがります。しかし、これらの方法でCore Web Vitalsの合格、ランキング変更、トラフィック増加が保証されるわけではありません。前後を測定してください。

画像最適化が目指すもの(最初に神話を正す)

まず最大の神話を片付けましょう。画像形式は速度のレバーであって、ランキングのレバーではありません。 WebPやAVIFに変換しても順位上昇は得られません。得られるのは小さなファイルで、それが速いページにつながり、Core Web Vitalsに影響します。検索システムが使うのはそこです。この連鎖は実在しますが間接的であり、「次世代形式のほうが上位表示される」と短絡するのが競合ガイドの多くの誤りです。

Googleのドキュメントは、画像が速度に重要な理由を率直に説明しています。画像は*“often the largest contributor to overall page size, which can make pages slow and expensive to load,”* (翻訳)「ページ全体のサイズに最も大きく寄与することが多く、ページの読み込みを遅く、高コストにする」ものです。助言は*“apply the latest image optimization and responsive image techniques to provide a high quality and fast user experience”* (翻訳)「最新の画像最適化とレスポンシブ画像技術を適用して、高品質で速いユーザー体験を提供する」ことです。 Google Search Centralが引用のアンカーに使う表現は、「画像はページ全体のサイズに最も大きく寄与することが多い」です。 Google Search Central — Images ここでの枠組みは、ファイル形式へのランキング報酬ではなく、速いユーザー体験です。

Evidence for this claim Images are often a major contributor to page weight, and Google recommends responsive image and optimization techniques for a fast user experience. Scope: Google Search image guidance about performance; no claim that a particular format directly improves rankings. Confidence: high · Verified: Google Search Central: Google Images SEO

画像SEO全体の何を、なぜ行うか — altテキスト、ファイル名、画像サイトマップ、構造化データ、画像検索ランキング — は、親記事であるImage SEOハブの役割です。この記事は形式、圧縮、サイズ、読み込み戦略という、標準となる方法を扱います。

誰もが破るルールから始める:LCP画像は決して遅延読み込みしない

このページから1つだけ持ち帰るなら、これにしてください。**Largest Contentful Paint(LCP)要素は、読み込み時にビューポートへ描画される最大のものです。web.devによれば、それは”either an image or a web font,” (翻訳)「画像またはWebフォントのいずれか」です。 このルールは、LCP画像を決して遅延読み込みしないことです。 Optimize LCP 多くのページでは、ヒーロー、注目画像、商品画像などの画像です。web.devはGoogleが何かを表現するときと同じくらい率直に、次のルールを示しています。

“Never lazy-load your LCP image, as that will always lead to unnecessary resource load delay, and will have a negative impact on LCP.” (翻訳)「LCP画像を決して遅延読み込みしないでください。そうしないと必ず不要なリソース読み込み遅延が生じ、LCPに悪影響を与えます。」

Evidence for this claim Lazy-loading an LCP image adds resource load delay; web.dev recommends loading it eagerly and considering high fetch priority. Scope: web.dev guidance for image-based LCP elements. Confidence: high · Verified: web.dev: Optimize LCP

これは、「とにかく遅延読み込みを使う」という助言が完全に見落としているニュアンスです。遅延読み込みは画面下の画像には有効です。LCP画像に適用すると、改善しようとしている指標を自分で遅らせます。web.devの遅延読み込みガイドも、反対側から同じことを言っています。“Don’t lazy-load images that are likely to be in-viewport when the page loads, especially LCP images” (翻訳)「ページ読み込み時にビューポート内にある可能性が高い画像、特にLCP画像は遅延読み込みしないでください」(Browser-level lazy loading)。

私自身のAhrefsのLCP記事でも同じ主張をしています。最大の要素は*「通常は注目画像、あるいは <h1> タグになる」ので、修正方法はそこから決まります。「画像が不要なら、最も効果的な解決策は単純に削除することです。必要なら、できるだけ小さく保てるようサイズと品質を最適化することを勧めます」「すぐに必要ない画像は遅延読み込みする」*べきですが、その裏返しは、理由があるので大文字で示す厳格なルールです。「画面上部の画像を遅延読み込みしないでください!」

LCP画像に fetchpriority="high" を付ける

ヒーローを遅延読み込みしないことは必要ですが、十分ではありません。LCP画像をできるだけ早く読み込ませるには、ブラウザーに優先度をヒントとして伝えます。web.devより:

“You can hint to the browser as to which resources are most important using the fetchpriority attribute… It’s a good idea to set fetchpriority=\"high\" on an <img> element if you think it’s likely to be your page’s LCP element.” (翻訳)fetchpriority 属性を使って、どのリソースが最も重要かをブラウザーに示せます。ページのLCP要素になりそうな <img> 要素には fetchpriority=\"high\" を設定するとよいでしょう。」

<img src="/hero.webp" alt="…" fetchpriority="high" width="1200" height="675">

LCPについての記事では、fetchpriority="high" を*「<img> または <link> タグで使え、ブラウザーに画像を早く取得させる」*ものとして説明し、メインHTMLが届く前に取得を始める補完策としてEarly Hints103レスポンス)と組み合わせています。したがってLCPの手順は、早期読み込み + fetchpriority="high"(スタックが対応していればEarly Hints)です。ページの他の画像は遅延読み込みできます。

fetchpriority とpreloadは、保証された修正策ではなく、ボトルネックに応じたツールとして扱ってください。LCP画像の発見や取得が遅い場合には役立ちますが、サーバーの応答が遅い場合、画像より前にレンダリングをブロックするリソースがある場合、またはファイル自体が本当に大きすぎる場合には何もしません。優先度ヒントだけで数値が動くと考える前に、実際のボトルネックを確認してください(PageSpeed InsightsやLighthouseはLCPをサブパートに分解します)。

ネイティブの loading="lazy" — 無料で簡単、画面下では正しい

初期ビューポートにないすべての画像では、ネイティブの遅延読み込みがパフォーマンス改善の最も簡単な方法です。web.devは、*「loading 属性を使えば、独自の遅延読み込みコードや別のJavaScriptライブラリを書かずに画像を遅延読み込みできます」*と説明しています。

<img src="/below-the-fold.webp" alt="…" loading="lazy" width="800" height="600">

安全に使うためのポイントは2つです。

  • 固定した「画面下」ラインではなく、初期ビューポートを基準にする。 「画面下」は固定ピクセル数ではなく、ビューポートのサイズとレイアウトで変わります。実際の判定は、ページが最初に描画されたとき画像が見える可能性が高いかどうかです。そうした画像、特にLCP画像には loading="eager"(デフォルト)を使い、lazy は使いません。
  • JSのハックよりネイティブ属性を優先する。 実際のURLを data-src に隠し、src を一度も公開しないJavaScript遅延ローダーは、まったくインデックスされないリスクがあります。ネイティブの loading="lazy"(または適切なIntersectionObserver)なら、クローラーから src が見えます。親記事のImage SEOハブで、このインデックス上の注意点を詳しく説明しています。

最新形式:WebPとAVIF、JPEG/PNGの比較

形式は神話を正すうえで最も重要な部分なので、それぞれがもたらすものを正確に見ましょう。得られるのはランキングではなく、バイト数の削減です。

  • WebP“often has better compression than JPEG, PNG, or GIF, offering both lossy and lossless compression” (翻訳)「JPEG、PNG、GIFより圧縮率が高いことが多く、非可逆圧縮と可逆圧縮の両方を提供する」。 アンカーされる表現は WebP often has better compression (翻訳)「WebPは圧縮率が高いことが多い」です。 web.dev — Image performance JPEGよりおおむね25–35 %小さく、ほぼすべてのブラウザーが対応しています。現在の写真向け安全なデフォルトです。
  • AVIF“supports both lossy and lossless compression, and tests have shown greater than 50% savings when compared to JPEG in some cases.” (翻訳)「非可逆圧縮と可逆圧縮の両方に対応し、場合によってはJPEGと比べて50 %を超える削減がテストで示されている」。圧縮は最上級ですが対応の普遍性はやや低いため、WebPまたはJPEGのフォールバックと組み合わせます。
  • JPEG — 写真向けの普遍的なフォールバックです。
  • PNG — 透明度や輪郭の鋭いグラフィックが必要な場合に使います。
  • SVG — ロゴやアイコン向けです。ベクターなので無限に拡大縮小でき、非常に小さくなります。

どの形式を選ぶかは、最も強く圧縮できるかだけでなく、画像が何をする必要があるかにも左右されます。透明度、アニメーション、ブラウザーやツールがその組み合わせをどれだけ一貫してサポートするかは、上記の生のサイズ削減とともに判断材料になります。特にアニメーションを使う場合は、形式をデフォルトに決める前に、必要な機能の現在の対応状況を確認してください。

Google Searchは、<img>src で参照される*「BMP、GIF、JPEG、PNG、WebP、SVG、AVIF」*に対応しています。<picture> を使い、最新形式を適切なフォールバック付きで配信します。

<picture>
  <source srcset="/photo.avif" type="image/avif">
  <source srcset="/photo.webp" type="image/webp">
  <img src="/photo.jpg" alt="…" width="1200" height="800" loading="lazy">
</picture>

最後の <img src> が安全網です。古いブラウザーやクローラーはそこへフォールバックし、Googleが実際にインデックスするURLもそこです。

形式はランキングに影響するか?(いいえ — Muellerが3通りで説明)

これは、テーマ全体を通して引き出す価値のある、唯一の神話解体の筋道です。時期の異なる3つのJohn Muellerの発言は、すべて同じ結論に至ります。形式はクロールやインデックスの仕組みとページ重量には影響するが、ランキングに直接影響しないということです。

  1. AVIFにSEO上の上昇効果はない。 GoogleがAVIFのネイティブ対応を追加した後、Muellerは、対応している他形式よりAVIFを使っても*「SEO上の上昇効果」*はないと確認しました(SE Roundtable coverage)。
  2. WebPは「問題ない」。 「WebP画像は画像検索に問題ありません」 — 重要なのは「より良い」ではなく「問題ない」という表現です(SE Roundtable coverage)。
  3. WebPのインデックス上の癖は形式固有ではない。 WebPファイルがGSCで「クロール済み — 現在インデックス未登録」と表示されたとき、Muellerの指摘は、画像ファイルはHTMLページとしてインデックスされず、その現象がWebPに限られるとは考えていない、というものでした(SEJ coverage)。
これらの担当者発言は、深いリンクが可能な一次ページではなく、オフィスアワーやソーシャル投稿を扱ったSE RoundtableとSearch Engine Journalの二次報道から逐語引用しています。親記事のImage SEOハブで使っている引用と同じで、ここでも一貫性を保っています。SEJの記事はMuellerの発言を逐語引用するのではなく、言い換え・要約しています。

圧縮と品質:「正しい」設定は1つではない

画像ガイドで最もよくある悪い助言は、「80 %に圧縮する」という1つの箇条書きです。web.devは、そのような魔法の数値はないと明確にしています。

“When compressing, there isn’t a universal setting suitable for all cases. The recommended approach would be to experiment with different compression levels until you find a good compromise between image quality and file size.” (翻訳)「圧縮時に、すべてのケースに適した普遍的な設定はありません。画像品質とファイルサイズのよい妥協点が見つかるまで、異なる圧縮レベルを試す方法が推奨されます。」

実際には、画像の種類ごとにテストします。 写真は強い非可逆圧縮にもよく耐えますが、グラフィック、ロゴ、文字入りのスクリーンショットはすぐにアーティファクトが現れ、可逆圧縮または高い品質設定を必要とすることが多いです。1つのスライダーを信じる代わりに、同じ画像を2〜3段階の品質で書き出し、実際の表示サイズで見比べます。元画像と見分けられない最小のものが、画像ごとの答えです。これは「TinyPNGに通して祈る」方法ではなく、実際のワークフローです。

正しい寸法:コンテナーサイズ × デバイスピクセル比

「とにかく小さくする」がルールではありません。レンダリングサイズ × デバイスピクセル比(DPR)に合わせることがルールです。web.devより:

“An image displayed in a 500 pixel by 500 pixel container would be optimally sized at 500 pixels by 500 pixels.” (翻訳)「500ピクセル×500ピクセルのコンテナーに表示される画像は、500ピクセル×500ピクセルが最適なサイズです。」

“If the device has a DPR of 2 and the image is displayed in a 500 pixel by 500 pixel container, then a square 1000 pixel image… is now the optimal size.” (翻訳)「デバイスのDPRが2で、画像が500ピクセル×500ピクセルのコンテナーに表示される場合、1,000ピクセル四方の画像が最適なサイズになります。」

つまり、2×(Retinaクラス)のディスプレイ上の500×500コンテナーには、1 000×1 000のソースが必要です。それより大きくすると目に見える効果なしにバイト数を浪費し、小さくすると高DPR画面でぼやけます。そのため、srcset + sizes を使ってサイズの範囲を配信し、ブラウザーに選ばせます。

<img
  src="/photo-800.webp"
  srcset="/photo-400.webp 400w, /photo-800.webp 800w, /photo-1600.webp 1600w"
  sizes="(max-width: 600px) 100vw, 500px"
  alt="…" width="800" height="600" loading="lazy">

ブラウザーはコンテナーの幅(sizes)と自身のDPRを読み取り、srcset から適切な候補を選びます。これは上記のDPR計算をレスポンシブ配信にしたものです。Googleはレスポンシブ画像に <picture> または srcset を推奨し、“always specify a fallback URL using the src attribute.” (翻訳)src 属性を使ってフォールバックURLを必ず指定する」と述べています。

sizes を間違えても警告は出ません。宣言した値が画像の実際の表示幅と一致しない場合(レイアウトやCSS変更後によく起こります)、ブラウザーはそれを知る方法がなく、与えられた不正確な数値に基づいて候補を選びます。通常はレイアウトが必要とするより大きなファイルをダウンロードし、上記の形式・圧縮の作業を気付かないうちに台無しにします。確実に検出するには、DevToolsのNetworkパネルを開き、画像リクエストを見つけ、配信ファイルの寸法とコンテナーの実際の表示幅を比較します。

上の500×500の例は説明用であり、サイト全体にハードコードする数値ではありません。同じヒーロー画像でも、モバイルとデスクトップでは異なる幅で表示されます。つまり「コンテナーサイズ」はレスポンシブレイアウトに合わせて動き、固定ではありません。だからこそ、1つの「最適」サイズを書き出して終わりにせず、srcset の範囲を配信します。

これらすべてがCore Web Vitalsにつながる理由

上で説明したすべての技術をつなぐ軸はLCPです。画像はWeb上で最も一般的なLCP要素であり、LCPは3つのCore Web Vitalsの1つです。Googleの目標は、モバイルとデスクトップのページ読み込みの75パーセンタイルで、“LCP should occur within 2.5 seconds” (翻訳)「LCPは2.5秒以内に発生すべき」ことです。 ページのアンカー表現は、「Core Web VitalsはすべてのWebページに適用されるWeb Vitalsの一部」です。 web.dev — Vitals Core Web Vitalsは*“apply to all web pages, should be measured by all site owners, and will be surfaced across all Google tools.”* (翻訳)「すべてのWebページに適用され、すべてのサイト所有者が測定すべきもので、Googleのすべてのツールに表示される」ものです。

したがって画像最適化は個別のランキング要因ではなく、検索システムが使うページ体験シグナル(Core Web Vitals)への寄与要因です。この区別が正確な枠組みであり、この記事がImage SEOクラスターとWeb Performanceクラスターの両方に属する理由です。指標そのものを詳しく知りたい場合は、Web PerformanceのCore Web VitalsLCPを参照してください。

もう1つ、率直に述べておくべき注意があります。このページの修正で何かが保証されるわけではありません。画像のバイト数はLCPを構成する可能性のある要素の1つにすぎません。web.dev自身のLCPサブパートの内訳には、サーバー応答時間や画像より前にあるレンダリングブロックリソースなどが含まれ、形式や圧縮では触れられません。画像の寸法もCLSへの入力の1つであって、特定スコアの保証ではありません。ヒーロー画像を小さくすると測定可能な改善があるかもしれず、何も変わらないかもしれず、別のものが本当のボトルネックなら数値がほとんど動かないかもしれません。画像最適化だけでCore Web Vitalsの合格、ランキング変更、トラフィック増加、コンバージョン増加、AI検索での引用が保証されることもありません。それらは画像バイト数以上の要素に依存します。画像の修正は完了事項ではなく仮説として扱い、ラボとフィールドの両方でLCPとCLSを前後に測定してください。「最適化が効いた」という思い込みではなく、データに何かが動いたかを判断させます。

よくある実装上の落とし穴

  • CSSの背景画像はインデックスされない。 開発者がレイアウトの都合で <img>background-image に置き換えることがあります。Googleは*「<picture> 要素の子要素など、他の要素の子であっても、<img> 要素の src 属性にある画像を見つけられる」一方、「CSS画像はインデックスしない」*と説明しています。画像検索に載せたいなら、<img> に置いてください。(これはパフォーマンスに近い話ですが、よくある間違いなので取り上げます。)
  • パフォーマンス/SEOの「刷新」で既存ファイルを一括リネームしない。 Muellerは、Googleのシステムがリネームした画像を再処理するには*「非常に長い時間」*がかかり、すでに文脈がよければ効果は小さいと述べています。詳しくは親記事のImage SEOハブを参照してください。
  • width/heightがない。 画像の読み込み前にブラウザーがスペースを確保できるよう、固有の widthheight(またはCSSの aspect-ratio)を必ず設定します。これは画像によるレイアウトシフトを減らしますが、CLSを構成する複数の入力の1つであり、特定スコアの保証ではありません。

簡単な手順

  • ヒーロー / LCP画像:最新形式、適切なサイズ、loading="eager"fetchpriority="high"
  • 画面下にあるものすべて:loading="lazy"
  • <picture>src フォールバック付きでWebP/AVIFを配信する。
  • コンテナー × DPRに合わせ、sizes 付きの srcset 範囲を配信する。
  • 画像の種類ごとに圧縮する。2〜3段階の品質をテストし、1つのスライダーを信じない。
  • width/height を必ず設定する。

画像SEOの残り — altテキスト、ファイル名、画像サイトマップ、構造化データ、画像検索ランキング — については、Image SEOハブに戻ってください。

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.