Picovert

Web フォント最適化:CLS 排除と読み込み時間 60% 短縮

2026-04-207分で読了

Web フォントはパフォーマンス問題の 2 つのカテゴリを引き起こします: フォントスワップによる レイアウトシフト(CLS)と、大きなフォントファイルや外部接続によるロード時間のオーバーヘッド。 このガイドでは両方をカバーし、フォントによる CLS をゼロにしてフォントロード時間を 60% 短縮する 具体的な設定を解説します。

WOFF2:必要な唯一のフォーマット

WOFF2 は Brotli 圧縮を使用し、2016 年からすべての主要ブラウザでサポートされています。 WOFF、TTF、EOT を提供する理由はもうありません。WOFF2 のみを提供してください。典型的な ラテン系フォントをサブセット化すると 18 KB まで圧縮できます。

サブセット化:最大の成果

サイトが特定の言語のみをサポートする場合、その文字セットだけが必要です。ラテン系にサブセット化 すると一般的なフォントを 80〜150 KB から 15〜25 KB に削減します。Next.js の next/font はビルド時に Google Fonts を自動的にサブセット化してセルフホストします。

セルフホスティング vs Google Fonts

Google Fonts は複数の DNS ルックアップと接続が必要です。セルフホスティングはこれらのステップを 排除します。高速接続で ~100 ms の差、低速接続では 500 ms 以上の差があります。

font-display:スワップの制御

動作CLS リスク
swap即座にフォールバック、準備できたらスワップ高(スワップ時のレイアウトシフト)
optional非常に短いブロック、準備できなければスワップなしなし(絶対にスワップしない)

本文テキストには font-display: optional で CLS を完全に排除。見出しには font-display: swap が許容できます。

フォントのプリロード

最も重要なフォントファイルにプリロードリンクを追加します。crossorigin 属性は 同一オリジンフォントにも必須です — ないと二重ダウンロードが発生します。

可変フォント

可変フォントは 1 つのファイルにすべての太さとスタイルを含みます。同じファミリーから 2 種類 以上の太さが必要な場合に使用します。320 KB(4 ファイル)から ~70 KB(1 ファイル)に削減 できます。