結婚式場のフェア予約ページの表示速度を、Core Web Vitals(INP・LCP・CLS)で直す手順。スクリプト・フォント・外部タグ・フォームのJS
結婚
この
この
フェア予約ページを遅くしているのは、写真より後から動く部品
フェア予約ページで
| 部品 | フェア予約ページでの |
悪くしやすい |
|---|---|---|
| 日程カレンダーの |
日付を |
INP |
| フォームの |
1文字打つたびに |
INP、CLS |
| 和文の |
見出しにも |
LCP、CLS |
| 計測・ |
GA4、 |
INP、LCP |
| チャットの |
右下に |
INP |
| 埋め込み | Instagram の |
LCP、CLS |
| 後から |
来館特典の |
CLS |
どれも、
INP・LCP・CLS の目安と、フェア予約ページで悪くなる場面
3つの
| 指標 | 測っている |
良好の目安 | フェア予約ページで |
|---|---|---|---|
| INP | 押す・タップする・キーを |
200ミリ秒以下 | 日付を |
| LCP | 最初の |
2.5秒以下 | フォントや |
| CLS | 読み込み中や |
0.1以下 | 予約ボタンを |
INP の
測る順番は、実際の利用者の数値から始めて、手元で再現する
測る
- Search Console 内の
Core Web Vitals レポート :実際の利用者の データ (CrUX)を もとに、 似た ページを まとめて 「良好」 「改善が 必要」 「不良」を 出す。 フェアの 詳細ページが まとめて どこに 入っているかを 見る - PSI
(pagespeed.web.dev) :フェアの一覧や 詳細の URL を 1つ 入れ、 上段の 実際の 利用者の データと、 下段の 試験環境の 診断を 分けて 読む - Chrome の
DevTools の :スマホにPerformance パネル 近い 速さに 落として、 日付を 押す・ 入力するなどの 操作を 記録し、 どの 処理が 長く 動いているかを 見る
アクセスが
試験環境の
import { onINP } from 'web-vitals/attribution';
onINP(({ value, rating, attribution }) => {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'web_vitals_inp',
inp_value: Math.round(value),
inp_rating: rating,
// どの要素を押したときに遅かったか(例:カレンダーの日付のボタン)
inp_target: attribution.interactionTarget,
// 入力の遅れ・処理・描画のどこで時間がかかったか
inp_input_delay: Math.round(attribution.inputDelay),
inp_processing: Math.round(attribution.processingDuration),
inp_presentation: Math.round(attribution.presentationDelay),
});
});送った
INP:日付を押してから反応するまでを、処理の分割で短くする
INP を
| INP の |
フェア予約ページでの |
直し方 |
|---|---|---|
| 入力の遅れ | 押した |
開いた |
| 処理の時間 | 日付を |
選んだ |
| 描画の遅れ | 1か |
選んだ |
処理を
// ブラウザに一度順番を返す。scheduler.yield がなければ setTimeout で代用する
function yieldToMain() {
if (globalThis.scheduler?.yield) return scheduler.yield();
return new Promise((resolve) => setTimeout(resolve, 0));
}
async function onDateClick(button, date) {
// 1. 押したことが分かる見た目だけを先に変える
markSelected(button);
showSlotsLoading();
await yieldToMain();
// 2. 空き枠を取りに行き、選んだ日の時間帯だけを描く
const slots = await fetchSlots(date);
renderSlots(slots);
}フォームの
外部タグ:中身を棚卸しして、読み込む時機をページと役割で分ける
外部タグは、
タグを
| タグ・道具 | 要るページ | 動き出す |
|---|---|---|
| GA4 の |
全ページ | ページビュー |
| 予約の |
予約フォーム | 送信完了の |
| 広告のタグ | 広告から |
ページビュー。 |
| ヒートマップなどの |
調べている |
ウィンドウの |
| チャットの |
問い合わせの |
最初は |
| Instagram の |
会場紹介や |
画像と |
チャットや
棚卸しの
フォント:和文の Web フォントは見出しだけにし、サブセットと表示の方針を決める
和文の
web.dev の
- 使う
場所を :式場らしさを絞る 出す明朝体は、 ページの 見出しと フェアの 名前だけに する。 入力欄と ボタンは 端末の フォントに する - 形式と
サブセット :WOFF2 にし、見出しに 使う 文字だけに 絞った ファイル (サブセット)を 作る。 フェアの 名前を 入れ替えたら、 サブセットを 作り直す手順を 残す - 接続の準備:フォントを
外部の 配信元から 読む 場合は、 preconnectで先に 接続を 始める。 preloadは他の 読み込みを 押しのけるので、 最初の 画面で 必ず 使う 1種類だけに する - 表示の方針:
font-display: swapは文字を すぐ 出して 後で 差し替える。 optionalは間に 合わなければ 端末の フォントの ままにし、 ずれを 起こさない。 フェア予約ページは、 ずれを 避けたいので optionalを候補に する - 代わりの
フォントの :寸法を 合わせる size-adjustなどで端末の フォントの 大きさを Web フォントに 寄せ、 差し替わった ときの ずれを 小さく する
@font-face {
font-family: "VenueMincho";
src: url("/fonts/venue-mincho-subset.woff2") format("woff2");
font-display: optional;
}
h1, .fair-title {
font-family: "VenueMincho", "Hiragino Mincho ProN", "Yu Mincho", serif;
}
input, select, textarea, button {
font-family: system-ui, sans-serif;
}CLS:空き枠の表示、エラー文、後から出る帯で画面をずらさない
CLS をmin-height や aspect-ratio で
フェア予約ページで
| ずれが |
直し方 |
|---|---|
| 空き枠を |
時間帯のmin-height で |
| 入力の |
エラー文の |
| 来館 |
画面のposition: fixed)か、 |
| 画面下に |
固定の |
動きのtop や margin を |
transform で動かす |
な
直したあとに確かめること:速さより先に、予約が最後まで届くか
速さの
- 実機の
スマホで、 :日付とフェアの 一覧から 予約の 送信完了まで 通す 時間帯を 選び、 入力し、 送信して 完了の 画面が 出るまで - 予約した
人と 式場の 両方に、 確認の メールが 届いたか - 計測が
届いたか :GA4 のリアルタイムや デバッグの 画面で、 送信完了の イベントが 1件だけ届いたか (遅らせた タグで 二重や 欠落が ないか) - PSI で、
直した :試験環境のページを 測り直す 診断で、 長い 処理やずれの 原因が 消えたか - Search Console で
修正を :Core Web Vitals レポートで検証する 「修正を 検証」を 始めると、 28日間の 観察が 始まる。 利用者の データに 反映されるまで 時間が かかるので、 結果は 週ごとに 見る
株式会社bundlyzeでは、
出典(web.dev・検索セントラル・Search Console の公式ヘルプ/2026年10月2日に確認)
- Google 検索セントラル
「Core Web Vitals と :LCP・INP・CLS のGoogle 検索の 検索結果に ついて」 目安と、 検索での 扱い - web.dev
「Interaction to Next Paint :INP の(INP)」 目安 (200ミリ秒以下)、 対象に なる 操作 - web.dev
「3 月 12 日に :2024年3月12日に「Interaction to Next Paint」が ウェブに 関する 主な 指標に」 FID に 代わった 点 - web.dev
「次の :入力のペイントに 対する インタラクションを 最適化する」 遅れ・処理の 時間・描画の 遅れの 3つの 内訳と、 処理を 区切る 方法 - web.dev
「サードパーティの :async・defer、JavaScript を 読み込む」 接続の 準備、 使っていない スクリプトの 削除 - web.dev
「フォントに :WOFF2、関する おすすめの 方法」 サブセット、 preconnect と preload、 font-display、 size-adjust - web.dev
「Cumulative Layout Shift :目安(CLS)」 (0.1以下)と、 操作から 500ミリ秒以内の ずれが 除かれる 点 - web.dev
「Cumulative Layout Shift の :場所の最適化」 確保、 後から 差し込まれる 内容、 transform での 動き - Search Console の
公式ヘルプ「Core Web Vitals レポート」 :実際の利用者の データ (CrUX)、 データ不足の 表示、 修正の 検証の 28日間 - Chrome for Developers
「ファサードを :チャットや使用した サードパーティ リソースの 遅延読み込み」 動画の 埋め込みを、 押されるまで 読み込まない 作り方 - web-vitals
(GoogleChrome の :attribution 版でGitHub) INP の 内訳と 対象の 要素を 取る
よくある質問
速度診断ページ(PSI)の点数が低いと、検索順位は下がりますか?
PSI の
計測タグを遅らせると、予約の数が数えられなくなりませんか?
遅らせ方に
フェアの予約受付を外部のサービスに任せている場合も、直せますか?
外部の