[WordPress]アイキャッチ画像を最適化してページ表示速度を改善しようとした(LCP)

[WordPress]アイキャッチ画像を最適化してページ表示速度を改善しようとした(LCP)
  • アイキャッチ画像のファイルサイズを小さくしつつ表示サイズを維持することで、WordPressサイトの表示速度を改善できます。
  • 子テーマのfunctions.phpに専用コードを追加すると、LCPの値が16,130ミリ秒から15,380ミリ秒へと少し短縮できました。
  • 理想的な表示速度にはまだ達していないため、サーバー応答時間の改善やLazy Load設定の見直しなど追加対策も必要です。
WordPressのアイキャッチ画像最適化 問題点 LCP値: 16,130ミリ秒 (理想は2,500ms以下) 読み込み遅延が全体の90%以上を占める 大きなアイキャッチ画像 (1920×1080ピクセル) 約1~2MBの画像ファイルがLCPの主要因 LCP = 最大コンテンツの描画時間 解決策 小さいサイズの画像ファイルを読み込む 見た目の表示サイズはそのまま維持する 1920×1080画像 → 1024×576画像に変更 width/height属性は元のサイズで保持 「ファイルサイズと表示サイズを分ける」手法 実装方法 子テーマのfunctions.phpに専用コード追加 WordPressフィルターフックを使用 post_thumbnail_htmlフィルターで画像HTML変更 alt属性やsrcset属性も適切に設定 優先度を設定して他のフィルターと共存 結果と課題 LCP値: 16,130ms → 14,780ms に改善 課題: まだ理想値(2,500ms)には達していない サーバー応答時間の改善も必要 Lazy Load設定の見直しが必要 CDNやキャッシュ設定も検討すべき
sns_share_buttons
\記事が役に立ったらシェアしてね/
【スポンサーリンク】

1. 「最大コンテンツの描画」に時間がかかる?

このサイトのパフォーマンスを PageSpeed Insightsで測定すると、「最大コンテンツの描画」(LCP)という値が16,130ミリ秒もかかっていました。
これは理想的な値の6倍以上です。

「最大コンテンツの描画」に時間がかかる?

ウェブサイトの表示速度は、訪問者の体験や検索エンジンの評価に大きく影響します。
特にスマートフォンでサイトを見る人が増えている今、ページが速く表示されることはとても重要です。

1-1. PageSpeed Insightsで問題を探す

PageSpeed Insightsで調査したところ、次のような結果が表示されました。

「最大コンテンツの描画」(LCP)の値が16,130ミリ秒と非常に長く、特に「読み込み遅延」が90%(14,580ms)を占めていました。
LCP」とは、ページ内で一番大きな要素(多くの場合は画像)が表示されるまでの時間のことです。
理想的には2,500ミリ秒以下が望ましいとされています。

問題となっていたアイキャッチ画像のHTMLは次のようになっていました。

<img width="1920" height="1080" src="https://chiilabo.com/wp-content/uploads/2023/05/image-23-3.jpg" class="attachment-1920x1080 size-1920x1080 eye-catch-image wp-post-image" alt="[Twitter] 「不審なログイン操作がありました」?どうする?" decoding="async" fetchpriority="high" srcset="https://chiilabo.com/wp-content/uploads/2023/05/image-23-3.jpg 1920w, https://chiilabo.com/wp-content/uploads/2023/05/image-23-3-300x169.jpg 300w, https://chiilabo.com/wp-content/uploads/2023/05/image-23-3-1024x576.jpg 1024w, https://chiilabo.com/wp-content/uploads/2023/05/image-23-3-768x432.jpg 768w, https://chiilabo.com/wp-content/uploads/2023/05/image-23-3-1536x864.jpg 1536w" sizes="(max-width: 1920px) 100vw, 1920px">
PageSpeed Insightsで問題を探す

デフォルトで1920×1080ピクセルという大きなサイズの画像(約1〜2MB)を読み込んでいたので、ページの表示を遅くしていた、と考えました。

1-2. 解決策を考える

考えたのは「ファイルサイズと表示サイズを分ける」という方法です。

WordPressアイキャッチ画像の最適化手法 解決策:表示サイズとファイルサイズを分離 1. 小さいサイズの画像ファイルを読み込む (例:1024×576ピクセル) 2. 表示サイズは元のサイズのまま維持 (width=”1920″ height=”1080″) 実装方法 子テーマのfunctions.phpに カスタムコードを追加 WordPressフィルターフックを使用 post_thumbnail_htmlフィルターで アイキャッチ画像のHTMLを書き換え コードの主要機能 1. 元のalt属性を保持(SEO対策) 2. 中サイズ画像をsrcに設定 3. 元の表示サイズを維持 4. srcsetとsizesでレスポンシブ対応を維持 コードサンプル(一部) // 中サイズの画像を取得 $large_image = wp_get_attachment_image_src( $post_thumbnail_id, ‘large’); // ファイルは中サイズを使用 $attr[‘src’] = $large_image[0]; 最適化結果: LCP値 16,130ms → 14,780ms(8.4%改善) ※理想的なLCP値は2,500ms以下

つまり:

  1. 実際に読み込む画像ファイルは小さいサイズのもの(例:1024×576ピクセル)を使う
  2. 見た目の表示サイズは元のまま(width=”1920″ height=”1080″)にする

こうすると見た目はそのままで、読み込む画像のサイズだけを小さくできます。

解決策を考える

画面に表示される大きさは同じなので、デザインが崩れることもありません。

2. コードによる実装

コードによる実装

私はCocoonテーマを使っているので、まずはテーマの設定からアイキャッチ画像のサイズを変更できないか調べましたが、より確実な方法としてコードを直接修正することにしました。

この方法を実現するために、子テーマの「functions.php」というファイルに以下のコードを追加しました。

  1. フィルターフックの利用:
    WordPressでは「フィルターフック」という機能があり、サイトの出力内容を変更できます。post_thumbnail_htmlというフィルターを使うと、アイキャッチ画像のHTMLを書き換えられます。
  2. 画像の説明文を保持:
    画像の「alt属性」(説明文)はSEOとアクセシビリティのために重要です。このコードでは元の説明文を抽出して、新しいHTMLでも使用しています。
  3. 小さな画像の使用:
    wp_get_attachment_image_srcという関数でWordPressが自動生成した中サイズの画像を取得しています。今回は「large」サイズを指定していますが、「medium」など他のサイズも選べます。
  4. 表示サイズの維持:
    width(幅)とheight(高さ)の値は元のサイズのままにして、見た目を変えないようにしています。
  5. レスポンシブ対応の維持:
    srcsetsizesという属性はスマートフォンなど画面サイズごとに最適な画像を表示するために重要です。このコードではこれらの属性も設定しています。
/** アイキャッチ画像のサイズとクラスを変更
 *  目的:パフォーマンス改善のため
 */
function customize_thumbnail_size_and_attr($html, $post_id, $post_thumbnail_id, $size, $attr) {
  // 元のHTMLから既存のalt属性を抽出
  $alt_text = '';
  if (preg_match('/alt="([^"]*)"/i', $html, $alt_matches)) {
    $alt_text = $alt_matches[1];
  }

  // alt属性が空の場合は投稿タイトルを使用
  if (empty($alt_text)) {
    $alt_text = esc_attr(get_the_title($post_id));
  }

  // 大きめの中サイズの画像を取得
  $large_image = wp_get_attachment_image_src($post_thumbnail_id, 'large');
  // 元のサイズ情報も取得
  $original_size = wp_get_attachment_image_src($post_thumbnail_id, 'full');

  if ($large_image) {
    // ファイルは中サイズを使用
    $attr['src'] = $large_image[0];

    // 表示サイズは元のものを維持
    if ($original_size) {
      $attr['width'] = $original_size[1];
      $attr['height'] = $original_size[2];
    }

    // 抽出したalt属性を設定
    $attr['alt'] = $alt_text;

    $attr['srcset'] = wp_get_attachment_image_srcset($post_thumbnail_id, 'medium');
    $attr['sizes'] = '(max-width: 1920px) 100vw, 1920px';

    // HTML再構築
    $html = '<img';
    foreach ($attr as $name => $value) {
      $html .= " $name=" . '"' . $value . '"';
    }
    $html .= '>';
  }

  return $html;
}

// 優先度を設定して、他のalt属性設定よりも後に実行されるようにする
add_filter('post_thumbnail_html', 'customize_thumbnail_size_and_attr', 20, 5);

2-1. 結果と効果

このコードを適用すると、アイキャッチ画像のHTMLは次のように変わります。

結果と効果
<img class="attachment-1920x1080 size-1920x1080 eye-catch-image" src="https://chiilabo.com/wp-content/uploads/2023/05/image-23-3-1024x576.jpg" width="1920" height="1080" alt="[Twitter] 「不審なログイン操作がありました」?どうする?" srcset="https://chiilabo.com/wp-content/uploads/2023/05/image-23-3-300x169.jpg 300w, https://chiilabo.com/wp-content/uploads/2023/05/image-23-3-1024x576.jpg 1024w, https://chiilabo.com/wp-content/uploads/2023/05/image-23-3-768x432.jpg 768w, https://chiilabo.com/wp-content/uploads/2023/05/image-23-3-1536x864.jpg 1536w, https://chiilabo.com/wp-content/uploads/2023/05/image-23-3.jpg 1920w" sizes="(max-width: 1920px) 100vw, 1920px">

主な変更点は:

  1. srcが「image-23-3.jpg」(フルサイズ)から「image-23-3-1024×576.jpg」(中サイズ)に変更された
  2. 見た目のサイズは同じ(width=”1920″ height=”1080″)
結果と効果

最適化前の元のHTMLはフルサイズの画像(1920×1080)をメインのsrcとして指定していましたが、最適化後は中サイズの画像(1024×576)をメインのsrcとして使用しています。これによりページの初期読み込み時のファイルサイズが小さくなり、ページ表示速度が向上します。

3. ちょっとは改善されたけど……

最新の測定結果では次のような状況です:

ちょっとは改善されたけど……
  1. LCP全体の値は15,380 ミリ秒に少し改善した
  2. とくに読込み時間、レンダリング遅延は大きく改善した
    (400ms→200ms, 550ms→110ms)
  3. 94%を占める「読み込み遅延」がほとんど改善していない
ちょっとは改善されたけど……

この変更により、改善は見られたものの、まだ理想的な値(2,500ミリ秒以下)には達していません。

3-1. 「読込み遅延」の問題が残る

気になる点は、読み込み遅延の割合が非常に高い(94%)こと。
画像最適化だけでなく、サーバー応答速度にも問題がある可能性が高いです。

WordPressページ速度の残る課題と解決策 「読込み遅延」の問題が残る 最大コンテンツの描画(LCP): 14,780ms (理想的な値は2,500ms以下) 読み込み遅延の割合が非常に高い(94%)- サーバー応答速度にも問題がある可能性 1 サーバー応答時間の改善 レンタルサーバーのプランアップグレード CDN(コンテンツ配信ネットワーク)の導入 サーバー側のPHP最適化設定 2 LiteSpeed設定の見直し 遅延読み込み(Lazy Load)設定の最適化 ファーストビューの画像は遅延読み込み無効化 Critical CSSの設定 3 キャッシュの活用 ブラウザキャッシュを有効に設定(済み) 訪問者が2回目以降にサイトを表示する 際の速度を改善 4 外部リソースの最適化 Contact Form 7の読み込み制御 Cloudflare Turnstileの設定最適化 サードパーティスクリプトの遅延読み込み 画像最適化だけでなく、サーバー応答速度やサービス設定、外部リソースの最適化を組み合わせて実施することが重要

現在の状況を踏まえて、次のような追加対策が考えられます:

  1. サーバー応答時間の改善:
    レンタルサーバーのプランアップグレードやCDN(コンテンツ配信ネットワーク)の導入を検討する
  2. LiteSpeed設定の見直し:
    遅延読み込み(Lazy Load)の設定が適切か確認する。
    特にファーストビュー(画面に最初に表示される部分)の画像には遅延読み込みを使わないほうがよい場合もある
  3. キャッシュの活用:
    ブラウザキャッシュを有効に設定し、訪問者が2回目以降にページを表示する際の速度を改善する(済み)
  4. 外部リソースの最適化:
    Contact Form 7やCloudflare Turnstileなど、サードパーティのスクリプトの読み込み方法を見直す

アイキャッチ画像の最適化は、ウェブサイトの表示速度を改善する効果的な方法の一つです。
物理的なファイルサイズを小さくしながら表示サイズを維持することで、見た目を変えずにパフォーマンスを向上させられます。

「読込み遅延」の問題が残る

この改善策によって、LCPの値は16,130ミリ秒から15,380ミリ秒へと短縮されました。
しかし理想的な値にはまだ達していないため、サーバー応答時間の改善など追加の対策も必要です。

ウェブサイトの速度改善は一度に完璧にできるものではなく、少しずつ改善を重ねていくものだと理解しています。

こちらもどうぞ。
WordPressの編集画面での差し替えた画像が古い状態で表示される?(画像キャッシュ)
WordPressの編集画面での差し替えた画像が古い状態で表示される?(画像キャッシュ)
WordPressの画像キャッシュ問題により、差し替えた画像が古い状態で表示されることがあります。これは、ブラウザのキャッシュと画像URLの仕様が主な原因でした。キャッシュが読み込まれないように、functions.phpに管理者用に JavaScriptのコードを追加して、動的に画像URLにタイムスタンプを付与するようにしました。WordPressの画像キャッシュ問題WordPressでサイトを運営しているのですが、差し替えた画像ファイルをプラグイン(Media Clean...

[WordPress]画像キャプションをalt属性を自動設定するカスタムスクリプト(functions.php)
[WordPress]画像キャプションをalt属性を自動設定するカスタムスクリプト(functions.php)
WordPressの画像ブロックにおいて、キャプションをalt属性に自動設定するカスタムスクリプトを作成しました。このスクリプトは、figcaptionタグ内のテキストを優先的にalt属性に設定します。functions.phpに追加することで、画像のアクセシビリティを向上させることができます。画像のキャプションをalt文字列に活用したいWordPressの画像ブロックには、キャプションを付けることができます。画像にAlt文字列が設定されていないときに、もしキャプションがあれ...

[WordPress] 遅延読込みのせいで印刷時に画像が消えていた(loading=”lazy”, decoding=”async”)
[WordPress] 遅延読込みのせいで印刷時に画像が消えていた(loading="lazy", decoding="async")
ブログを冊子印刷にして配布しているのですが、一部の画像が印刷されていないことがあります。画像の遅延読込み で失敗しているようです。WordPress によって自動的に付加される「loading=”lazy”」「decoding=”async”」を消すよう、functions.php を編集しました。add_filter( 'wp_lazy_loading_enabled', '__return_false' );add_filter('wp_img_tag_add_decod...

Googleのカスタム検索ボックスの遅延表示によるガタツキをなくしたい【CLS】
Googleのカスタム検索ボックスの遅延表示によるガタツキをなくしたい【CLS】
PCでページを表示したときに、サイドバーの検索バーが遅れて表示されて、画面がズレるのが気になります。遅延表示による画面のガタツキ検索バーには、Googleのカスタム検索を利用しています。サイドバーの検索ボックスの遅延表示でズレるこのように、ウェブページの画面が、後から表示される要素によってズレることを「CLS(Cumulative Layout Shift:累積的な割付の変移)」といいます。div要素のheight属性ではうまくいかずスクリプトが非同期処理で読み込まれるので、...
QRコードを読み込むと、関連記事を確認できます。

[WordPress]アイキャッチ画像を最適化してページ表示速度を改善しようとした(LCP)
タイトルとURLをコピーしました