1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LCPの改善はまずFCPから

Posted at

LCPの改善は難しい

Core Web VitalsにおけるLCP (Largest Contentful Paint)を改善できないという話をよく聞きます。

HTMLとCSSを丁寧に直せば改善できるCLS (Cumulative Layout Shift)と違い、確かに難しいと思います。

結論

LCP改善の実践的なノウハウを紹介したいと思います。

  1. LCPは土台となっているFCPから改善すべし
  2. FCPの改善にはスタートダッシュでHTMLとCSSに集中すべし
  3. 画像の軽量化にはあまり期待するべからず
  4. カルーセルスライダーはJavaScriptオフでチューニングすべし
  5. 画像のrel="preload"は諸刃の剣

LCP = FCP + 最大コンテンツのタイムラグ

以下のグラフは通販サイトを中心に1000ページほどPageSpeed Insightsを実行して得られたFCP (First Contentful Paint)とLCPの関係(それぞれ対数目盛)です。

fcp-lcp.png

なんとなく相関が見て取れますが、大事なのは以下の点です。

CleanShot 2024-06-18 at 09.39.55.png

右下の領域にはサンプルがひとつもありません。つまり、

LCPがFCPより早くなることはなく、FCPが遅いのを放置してLCPだけを改善できないということです。

それも当然で、

  • FCP 最初のコンテンツ(テキストまたは画像)の表示
  • LCP 最大コンテンツの表示

である以上、最大コンテンツが最初のコンテンツより早く表示されることは論理的にもありえません。

FCPを改善するには

FCPの改善はブラウザのタイムラインと格闘する必要があります。

大雑把に言うと、HTMLとCSSが解析され、どこに何を表示するかをとにかく早く決めさせることです。それを邪魔するよくあるパターンは、

  • JavaScriptが割り込んでいる
  • DOMやCSSOMの変更によりレイアウト計算のやり直しが発生している
  • 別のドメインのCSSで遅延(DNSルックアップやSSLハンドシェイク)が生じている
  • HTMLとCSSが無駄に大きくレイアウト計算が遅い

FCPの改善には、とにかくブラウザにスタートダッシュでHTMLとCSSに集中してもらうことを徹底的に行います。

画像軽量化はLCPに有効か

最大コンテンツは画像であることが多いので、画像を軽量化するとLCPを改善できると期待されがちですが、実際はどうでしょうか。

先ほどの1000ページのPageSpeed Insightsの結果について、画像データ転送量とLCPの関係(それぞれ対数目盛)を見ると次の通りです。

image-lcp.png

相関係数0.48なのでなくはないけど微妙といった感じです。

これはあくまでページ全体の画像データ量との比較で、メイン画像のデータ量との相関ではありません。

ただ、画像の読み込み時間よりFCPの方がよほど大きく、先ほども述べたようにLCPはFCPを土台としています。

画像を軽くするだけで悪いLCPをよくできるということはまずもってありません。

カルーセルスライダーには要注意

ファーストビューにカルーセルスライダーがあるページでは、それがLCP悪化の原因になっていることがあります。

ライブラリの種類によりますが、JavaScriptが動作しないとカルーセルスライダーが表示されないようだとLCPは劇的に悪化します。

よく行う対策は、以下です。

  1. JavaScriptをオフにしても1枚目の画像が所定の位置に表示されるようCSSを調整する
  2. 1枚目のimg要素にはloading="eager"、2枚目以降にはloading="lazy"を指定

ただ本音としては「せめてファーストビューではカルーセルスライダーを使うのはやめましょう」と言いたいです。

メイン画像の先読みは有効か

よくLCPの改善ノウハウとして、メイン画像の先読み(link要素のrel="preload")を指定するとよい、という記事を見かけます。

<link rel="preload" href="メイン画像のURL">

これは一概によい方法とは言えません。別に魔法のように画像を別に読み込んでくれるわけではなく、たいていの場合、CSSの読み込みを押しのけて画像を読み込むだけです。

CSSが押し除けられた結果、FCPが悪化して結果としてLCPも悪化する結果になることがあります。

ただ、CSSが軽量であったり、FCPが十分に短ければ、多くのユーザーにとってメイン画像の並列読み込みはLCPに有利に働くと想像できます。双刃の剣で、実際にやってみないとわかりません。

参考データ

記事中で引用した、通販サイトを中心とした1000ページのPageSpeed Insightsの結果について、指標間の相関性、指標とリソースタイプごとの転送量の相関性を記載しておきます。

いろいろ気づきを得られるデータなので、また別のテーマで記事にしたいと思います。

指標の相関マトリクス

それぞれ自然対数による目盛。

metrics-matrix.png

リソース転送量と指標の相関マトリクス

それぞれ自然対数による目盛。

resource-matrix.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?