Power hour · gmbapi

LCPを5秒から1.9秒へ、1回の通話で改善

Next.jsでサイトを刷新したローカルSEO企業。デスクトップは高速ですが、モバイルは低速でした。

1.9sCrUXでのLCP、以前は5秒
150msモバイルのINP、以前は220ms
700msサーバー応答、以前は3秒
0.00CrUXでのCLS、以前は0.08
クライアントgmbapi、ローカルSEOソフトウェア
プラットフォームReact、Next.js、ヘッドレスCMS
サービスPower hour、2026年8月
クライアント

デスクトップは合格、モバイルは不合格だった新サイト

gmbapiは優れたローカルSEOソフトウェアを提供する企業です。2026年7月、WordPressからReactとNext.js、ヘッドレスCMSによる新サイトへと移行しました。デスクトップはCore Web Vitalsをクリアしていましたが、モバイルではLCP、FCP、INPが不合格でした。

同社を経営するMichel van Luijtelaar氏とは、2021年からの付き合いです。2023年と2025年にWordPressサイトの確認を依頼され、2026年7月には新サイトの件で相談を受けました。

gmbapi.com homepage
発見した問題と実施した対策

小さな問題の積み重ね

単一の大きな問題があったわけではありません。実際のところ、そうしたケースは滅多にありません。DevToolsでモバイルのページ読み込みを記録し、最初の1バイトからLCPまでのトレースを確認しながら、通話中にその場で修正を進めました。

問題点
実施した対策
TTFB
サーバーが最初の1バイトを返すまでに3秒かかっていました。すべてのページがリクエストごとにレンダリングされ、ヘッドレスCMSから毎回コンテンツを取得していました。さらにキャッシュヘッダーがno-storeになっていたため、CDNにHTMLが一切保持されていませんでした。
ページをISRによる静的レンダリングへ移行し、CMSからのフェッチをキャッシュして、CDNがHTMLを保持できるようヘッダーを変更しました。サーバー応答は700msまで短縮され、他の部分に手を付ける前に、その分だけFCPとLCPが削減されました。
LCPINP
head内のタグやアナリティクス、ページ上部のサードパーティ製ウィジェット、そしてサーバー側でもレンダリング可能なコンポーネントがブラウザ側でレンダリングされていました。実行されていたJavaScriptはすべて必要なものでしたが、実行のタイミングが早すぎました。
タグやウィジェットはページの表示完了まで待機させ、コンポーネントはサーバー側から配信するようにしました。
LCP
ヒーロー画像がlazy loadingされていました。priorityの指定なしでnext/imageが使われており、CMSブロックによってすべての画像にloading="lazy"が設定されていました。また、ヒーロー画像がCSSの背景画像になっていた箇所では、ブラウザによる検出が遅れていました。
ヒーロー画像にpriorityとfetchpriority="high"を設定し、CMSブロックでは1枚目の画像を除外しました。CSSの背景画像はpreloadを指定した通常のimg要素に変更しました。これらを合わせて、LCPが120ms短縮されました。
LCP
ファーストビューの表示が、30kBと0.5kBの2本のスタイルシートを待つ状態になっていました。
両方を書き直して15kBに削減し、さらに100ms短縮しました。
LCP
単体では大きくないものの、数多くの細かな問題が存在していました。
トレースを順に確認しながら、通話中に1つずつ修正していきました。
CrUXのデータ

誰もが目指す理想的なグラフです。モバイル訪問者のLCPは最悪時の5.6秒から2.0秒まで改善し、サーバー応答も4.2秒から0.8秒へと短縮されました。どちらの折れ線も、下がるまでに数週間かかります。各データポイントには、28日間の集計期間に含まれる低速だった日のデータが反映され続けるためです。8月以降、LCPは1.9秒から2.2秒の間で安定して推移しています。

2.5 s4.0 sFebMarAprMayJunJulAugSepOct3.8 s2.0 s5.6 sLCP on mobile, p75
0.8 s1.8 sFebMarAprMayJunJulAugSepOct2.0 s0.76 s4.2 sTTFB on mobile, p75
CrUXにおけるgmbapi.comのデータ(2026年1月〜10月)。各データポイントはその日までの過去28日間を表します。緑は良好、オレンジは改善が必要、赤は不良を示します。
フォローアップ

通話後、ページごと・リリースごとにモバイル訪問者を確認できるようCoreDashへのアクセス権を提供し、タスクリストを確認しました。冒頭の数値は、Google公式のfield dataであるCrUXのものです。

開発者が通話に参加しており、修正が軽微なものであれば、1時間で十分対応できます。より大きな課題は、優先度の高い順にメモへ記録します。

得られた教訓

当初の予想は「未使用のJavaScript」でした

Reactの新サイトであれば、ごく妥当な推測です。しかしトレースが示した最大のボトルネックは、サーバー応答とヒーロー画像のlazy loadingでした。

新しいフレームワークを導入しても、それだけで速くはなりません

Next.jsに移行したばかりだったため、フレームワークのデフォルト設定がそのまま影響していました。next/imageはpriorityを指定しない限りすべての画像をlazy loadingします。ヒーロー画像もその1つでした。

Arjen Karel

開発者が同席する1時間の通話:€350

担当の開発者と、最も遅いページをご用意ください。一緒に確認しながら、通話中に対応できるものをその場で修正します。

Power hourを予約する

その他の実績はクライアント実績ページをご覧ください。

gmbapi: LCPを5秒から1.9秒へ、1回の通話で改善 Core Web Vitals gmbapi: LCPを5秒から1.9秒へ、1回の通話で改善