.png?q=75&fm=webp)
画像の読み込みが遅い!画像の表示速度を改善するための最適化の方法
画像の読み込みが遅い原因は、ファイルサイズの肥大化、次世代フォーマット未対応、遅延読み込み未実装など様々です。
本記事では、画像が重くなる5大原因から、すぐに実践できる15の速度改善テクニックまで徹底解説。
PageSpeed Insightsスコアを劇的に向上させ、コンバージョン率アップを実現する方法をお伝えします。
画像読み込みが遅い原因5つを解説
まずは、画像の読み込みが遅くなる原因を解説していきます。
画像ファイルサイズが大きすぎる
画像読み込みが遅い最大の原因は、ファイルサイズの肥大化です。
デジカメやスマートフォンで撮影した高解像度画像(4K・8K)をそのままアップロードすると、1枚で5MB以上になることも珍しくありません。
Webサイトでは、ヒーロー画像で100-200KB、コンテンツ画像で50-100KB、サムネイルで20-50KBが推奨サイズです。
500KBの画像と50KBの画像では、読み込み時間に約10倍の差が生まれます。
特に圧縮処理を行っていない画像は、不要なメタデータも含まれており無駄なデータ量が多くなります。
モバイル環境では通信速度の制限もあるため、大きすぎる画像は致命的です。
次世代フォーマット(WebP/AVIF)未対応
従来のJPEGやPNG形式のままでは、画像の読み込み速度に大きなハンデを抱えています。
WebP形式はGoogleが開発した次世代画像フォーマットで、JPEGより25-34%、PNGより26%もファイルサイズを削減できます。
さらに新しいAVIF形式は、WebPよりもさらに20-30%軽量化が可能です。
これらの次世代フォーマットは、高画質を維持しながら圧縮率が高く、透過やアニメーションにも対応しています。
主要ブラウザの対応率は99%と高く、導入しない理由はありません。
しかし多くのサイトが依然としてJPEG/PNG形式を使用しており、本来削減できるはずの数百KB単位のデータ量を無駄に転送しています。
画像の遅延読み込み(Lazy Load)未実装
遅延読み込み(Lazy Load)が実装されていないと、ページ内のすべての画像を一度に読み込もうとするため、初期表示が大幅に遅れます。
現代のWebサイトには平均90個以上の画像が使われており、それらを同時にダウンロードすればネットワーク帯域を圧迫し、ユーザーが最初に見る画面(ファーストビュー)の表示が遅延します。
遅延読み込みは、画面に表示される部分の画像だけを優先的に読み込み、スクロールして画面に入ってきたタイミングで残りの画像を読み込む技術です。
これにより初期表示速度が50-70%改善されるケースもあります。
CDN・キャッシュ未設定
CDN(コンテンツ配信ネットワーク)やブラウザキャッシュが未設定だと、毎回サーバーから画像を読み込むため、無駄な通信が発生します。
特に地理的に離れたサーバーからの配信では、物理的な距離によるネットワーク遅延が顕著になります。
CDNは世界中に分散したサーバーから、ユーザーに最も近い場所のサーバー経由で画像を配信する仕組みで、読み込み速度が30-50%改善されます。
また、ブラウザキャッシュを適切に設定すれば、一度読み込んだ画像をユーザーのブラウザに保存し、再訪問時は瞬時に表示できます。
しかし多くのサイトでは.htaccessファイルやCache-Controlヘッダーの設定が不十分で、画像を毎回ダウンロードさせています。
CloudflareやjsDelivrなどの無料CDNサービスも充実しており、設定も30分程度で完了します。サーバー負荷軽減にも繋がる重要な施策です。
参考:CDNとは?
画像サイズ(width/height)が指定されていない
HTMLの<img>タグにwidth・height属性が指定されていないと、ブラウザは画像の読み込みが完了するまで表示領域を確保できず、レイアウトシフト(CLS)が発生します。
これはページ読み込み中にコンテンツが上下に動く現象で、ユーザー体験を著しく損ないます。
GoogleのCore Web Vitalsでは、CLSスコアが検索順位に直接影響するため、SEO的にも重大な問題です。
画像サイズを事前に指定しておけば、ブラウザは画像データが届く前にスペースを確保でき、レイアウトが安定します。
また、画像の読み込み優先順位も最適化され、結果的に体感速度が向上します。
画像の速度改善テクニック
画像の表示速度を改善するためのテクニックを具体的に解説していきます。
画像圧縮で容量を削減する方法
画像圧縮は最も即効性の高い速度改善テクニックです。
ウェブ上で使用する際は、圧縮した状態の画像を使用することで、読み込み速度が格段に上がります。
画質を保ったまま容量を70-80%削減でき、無料ツールで簡単に実施できます。
iloveimgなどのような画像圧縮ツールを使えばドラッグ&ドロップだけで簡単に圧縮が可能です。
他にもTinyPNGやIMGUMA(あっしゅくま)といった画像圧縮ツールがあるので用途にあったツールで圧縮しましょう。
特に高画質の画像などは効果を発揮してくれます。
適切な画像サイズにリサイズする
画像サイズのリサイズは、表示に必要な大きさに合わせて画像の解像度を調整することです。
4000×3000pxの画像を800×600pxで表示する場合、不要な3200pxのデータを転送している状態になります。
デバイス別の推奨サイズは、PCのメインビジュアルで横幅1920px、スマートフォンは750pxが基本です。
このサイズ以上の画像は、無駄に大きな容量となり読み込み速度を遅くする要因になります。
サイズの大きい画像は、適切なサイズにリサイズしてから使用するようにしましょう。
パソコン上で画像を開き、編集でサイズ変更をするだけでリサイズが可能です。
画像にwidth/height属性を指定する
width/height属性の指定は、レイアウトシフト(CLS)を防ぎ、Core Web Vitalsスコアを改善する重要な施策です。
属性が未指定だと、ブラウザは画像読み込み完了まで表示領域を確保できず、コンテンツが上下にガタつきます。
対策は簡単で、下記のように実際の画像サイズを指定するだけです。
レイアウトシフト(CLS)を防ぐ
<!-- 悪い例 -->
<img src="image.jpg" alt="サンプル">
<!-- 良い例 -->
<img src="image.jpg"
width="800"
height="600"
alt="サンプル">上記の方法、またはレスポンシブ画像の対応でも問題ありません。
レスポンシブ画像の対応
レスポンシブ画像は、デバイスや画面サイズに応じて最適な画像を自動配信する技術です。
スマホユーザーにPC用の大きな画像を送信するのは帯域の無駄遣いです。
HTML5のsrcset属性とsizes属性を使えば、ブラウザが自動的に最適な画像を選択します。
例えば下記のように指定すると、画面幅に応じて適切なサイズが読み込まれます。
<img srcset="image-small.jpg 750w,
image-medium.jpg 1024w,
image-large.jpg 1920w"
sizes="(max-width: 768px) 100vw,
(max-width: 1024px) 50vw,
33vw"
src="image-large.jpg" alt="説明文">さらに高度な制御には<picture>要素を使用し、スマホには縦長画像、PCには横長画像といったアートディレクションも可能です。
この実装により、モバイルでは50-70%の容量削減が実現できます。
デバイスごとに3-4種類の画像サイズを用意することで、全ユーザーに最速の表示体験を提供できます。
参考:レスポンシブ画像とは?
次世代フォーマットWebP/AVIFへ変換
WebP/AVIF変換は、画質を保ちながら大幅な軽量化を実現する速度改善策です。
JPGやGIFからフォーマットを変更するだけで、容量も減り読み込みも早くなります。
変換方法はオンラインツールやプラグインなどで変換が可能です。
オンラインツールであれば、convertioなどといったサイトに変換したい画像をアップすれば変換できます。
重要なのはフォールバック実装で、古いブラウザ用にJPEG/PNGも用意します。
フォールバック実装
<picture>
<source srcset="image.avif" type="image/avif">
<source srcset="image.webp" type="image/webp">
<img src="image.jpg" alt="説明文">
</picture>
<picture>要素を使い、<source srcset="image.webp" type="image/webp">と<img src="image.jpg">を組み合わせれば、対応ブラウザはWebPを、非対応ブラウザはJPEGを自動表示します。
遅延読み込み(Lazy Load)を実装する
遅延読み込み(Lazy Load)は、画面外の画像読み込みを後回しにし、スクロールで表示範囲に入ったタイミングで読み込む技術です。
最も簡単な実装方法は、HTML5標準のloading="lazy"属性を<img>タグに追加するだけです。
loading="lazy"属性の活用例
<img src="image.jpg" loading="lazy" alt="遅延読み込み対応画像">より高度な制御にはIntersection Observer APIを使ったJavaScript実装がおすすめです。
JavaScriptライブラリの導入
Intersection Observer APIを使った実装
const images = document.querySelectorAll('img[data-src]');
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
observer.unobserve(img);
}
});
});
images.forEach(img => observer.observe(img));
重要な注意点は、ファーストビュー(最初に見える部分)の画像には適用しないことです。
ヒーロー画像やメインビジュアルを遅延読み込みすると、逆に表示が遅くなりユーザー体験を損ないます。
適切に実装すれば初期表示時間が短縮され、モバイル環境での体感速度が劇的に向上します。
CDN(コンテンツ配信ネットワーク)を導入する
CDN導入は思ったより簡単で、無料サービスなら30分程度で完了します。
最も人気のCloudflareでの手順を紹介します。
- 公式サイトでアカウント作成(無料プラン選択)
- サイトのドメインを登録
- 表示されるネームサーバー情報を、ドメイン管理会社(お名前.comなど)の設定画面でDNSレコードに登録
- Cloudflareの管理画面で「速度」タブから画像最適化をオンにする
- キャッシュ設定で「すべてキャッシュ」を選択
これだけで世界200以上の拠点から高速配信が始まります。
WordPress向けなら、プラグイン「WP Cloudflare Super Page Cache」を導入すればさらに簡単です。
設定後は必ずPageSpeed Insightsで効果を測定しましょう。
ブラウザキャッシュを最適化する
ブラウザキャッシュは、一度読み込んだ画像をユーザーのブラウザに保存し、再訪問時に瞬時に表示する仕組みです。
適切に設定すれば、2回目以降の訪問では画像を全く読み込まず、表示速度が劇的に向上します。
設定方法は、サーバーの.htaccessファイルに以下のコードを追加します
.htaccess設定例
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
</IfModule>これで画像が1年間キャッシュされます。
またはCache-Controlヘッダーで指定する方法もあります。
Cache-Control ヘッダー設定
Cache-Control: public, max-age=31536000, immutable効果測定はChromeのデベロッパーツールで「Network」タブを開き、再読み込み時に「(disk cache)」と表示されれば成功です。
初回訪問と再訪問で読み込み時間に5-10倍の差が生まれます。
画像のpreload/prefetchを活用
preload/prefetchは、重要な画像を優先的に読み込ませる高度なテクニックです。
preloadは「このページで確実に必要な画像」を先読みする指示で、ヒーロー画像やメインビジュアルに最適です。
<head>内に記述すれば、他のリソースより優先的にダウンロードされます。
重要画像の先読み
<link rel="preload" as="image" href="hero-image.webp" type="image/webp">prefetchは「次のページで使う可能性が高い画像」を空き時間に先読みする機能で、ECサイトの商品詳細ページなどで効果的です。
ただし、無駄に多く指定してしまうとレンダリングにも影響するため、優先する画像に絞ることをお勧めします。
使い分けの原則
- preload:確実に必要な画像(ヒーロー画像など)
- prefetch:次ページで使う可能性が高い画像
画像速度改善でよくある失敗と解決策
Q1: WebPに変換したのに速度が改善しない
ブラウザのフォールバック設定が不完全で、古いブラウザでWebPが表示できず、結局JPEG/PNGを読み込んでいるケースが多数です。
またCDNキャッシュに古い画像が残っている可能性もあります。
<picture>要素で適切に実装します
<picture>
<source srcset="image.webp" type="image/webp">
<img src="image.jpg" alt="説明">
</picture>CDNを使用している場合は、Cloudflareなどの管理画面から「キャッシュをパージ」を実行し、ブラウザもスーパーリロード(Ctrl+Shift+R)でキャッシュクリアします。
Q2: 遅延読み込みでSEOに悪影響?
Googleクローラーが遅延読み込みされた画像を認識できず、画像検索にインデックスされないケースです。
古い実装方法(data-src属性のみ)が原因の場合が多いです。
解決策
HTML5標準のloading="lazy"属性を使用すれば、Googleは完全対応しています。
構造化データ(Schema.org)で画像URLを明示的に記載することも有効です。
また、ファーストビューの画像には遅延読み込みを適用しないことが鉄則です。
ヒーロー画像やメインビジュアルは通常読み込みにすることで、LCPスコアも改善されます。
Q3: 画像圧縮で画質が劣化した
圧縮率を上げすぎると、特に人物の顔やテキストが含まれる画像でノイズやブロックノイズが目立ちます。
JPEG品質30-50は過剰圧縮です。
解決策
圧縮率80-90%(JPEG品質60-80)が画質とファイルサイズの最適バランスです。
用途別の基準は以下の通り
- 商品画像・人物写真
- 背景画像・装飾画像
- アイコン・図解
Squooshのようなツールで圧縮前後を比較しながら調整し、A/Bテストで実際のユーザー反応を確認することも重要です。
Q4: プラグイン導入後にサイトが重くなった
画像最適化プラグインを複数同時導入すると、処理が重複して逆に遅くなります。
「EWWW + Autoptimize + Smush」のような多重導入は要注意です。
解決策
プラグインは最小限にが鉄則です。
画像最適化は1つ(EWWW推奨)、キャッシュも1つ(WP RocketまたはW3 Total Cache)に絞ります。
既存プラグインの競合を確認するには「P3 Plugin Profiler」で各プラグインの負荷を測定します。重いプラグインを特定したら、無効化して代替手段を検討しましょう。
Q5: モバイルだけ速度が改善されない
レスポンシブ画像が未実装で、スマホにもPC用の大きな画像を配信しているケースです。
解決策
srcset属性でデバイス別画像を用意します。
WordPressなら自動生成されますが、手動アップロード画像は要確認です。
モバイルファースト設計で、スマホ用画像(横幅750-1500px)を優先的に作成し、PageSpeed InsightsもモバイルとPCで個別測定します。
AMPページの導入も検討価値があります。
画像の表示速度改善まとめ
画像の読み込みが遅いことは、ユーザーを逃し、売上を失う大きな機会損失です。
しかし本記事で紹介した改善策は、どれも特別な知識がなくても実践できるものばかりです。
一つずつ改善していけば、必ず結果はついてきます。
表示速度が1秒速くなれば、コンバージョン率は2%向上します。
あなたのサイトで速度改善の第一歩を踏み出しましょう!
