Critical CSS(クリティカルCSS)
Critical CSSを抽出してインライン化し、残りを遅延する方法を解説します。ファーストペイント、LCP、CSP、キャッシュ、テンプレート状態、レイアウトシフト、保守上のトレードオフを扱います。
言語
Critical CSSはファーストビューの描画に必要なCSSを抽出して<head>へインライン化し、残りを非同期で遅延する手法です。CSSは既定でレンダリングをブロックしますが、ファーストビューは端末や状態で変わります。Googleは高度で任意と説明しており、インラインCSSのキャッシュ喪失、CSP、テンプレート変更、競合を測定する必要があります。SEOへの影響は直接のランキング要因ではなく、実際にLCPやページ体験が改善した場合の間接効果です。
要点 — Critical CSSは、利用者が最初に目にする部分に必要なスタイルだけをHTMLへ直接入れ、残りのスタイルシートを後から読み込む高速化手法です。ページが速く「見える」ようになる可能性はありますが、Google自身も大半のサイトには不要だと説明しており、明確な欠点もあります。導入前に原因を診断してください。
Critical CSSとは
ブラウザーはページを読み込むとき、CSSを解析するまで画面を描画しません。スタイル未適用の表示や急なレイアウト変化を避けるための挙動ですが、遅い、または巨大なスタイルシートが初回描画全体を待たせる原因にもなります。
Critical CSSは、この問題を回避する方法の一つです。考え方は次の2段階です。
- 重要なスタイルをインライン化する。 スクロール前に見えるファーストビューの描画に必要なCSSだけを取り出し、ページの
<head>へ直接置きます。これにより、ブラウザーは別ファイルを待たずにページ上部を描画できます。 - 残りを遅延する。 完全なスタイルシートは初回描画を妨げないよう非同期で読み込み、到着後に残りの部分へ適用します。
Googleのweb.devチームは、Critical CSSを “a technique that extracts the CSS for above-the-fold content in order to render content to the user as fast as possible” (翻訳)「ファーストビューのコンテンツに必要なCSSを抽出し、できるだけ速く利用者へ表示する手法」 出典 と定義しています。
Evidence for this claim Critical CSS extracts and inlines above-the-fold styles so the remaining CSS can load asynchronously. Scope: web.dev definition and implementation outline for critical CSS. Confidence: high · Verified: web.dev: Extract critical CSS多くの人が誤解している点
多くの記事はCritical CSSを「実装すべきもの」として紹介します。しかしGoogleの文書は、大半のサイトについて逆の見解を示しています。 “Most sites should be able to achieve all of our recommended performance targets without implementing this technique” (翻訳)「ほとんどのサイトは、この手法を実装しなくても推奨されるすべてのパフォーマンス目標を達成できるはずです。」 出典 これは標準で有効にする項目ではなく、高度な最終手段です。
Evidence for this claim web.dev presents critical CSS as an advanced technique that can cause bugs and says most sites can meet performance targets without it. Scope: web.dev codelab guidance; not a universal recommendation. Confidence: high · Verified: web.dev: Extract and inline critical CSSしかも代償があります。CSSをHTMLへインライン化すると、通常のスタイルシートのように別ページでブラウザーキャッシュを再利用できないため、同じサイト内の2ページ目が実際には遅くなることがあります。「クリティカル」と「残り」の分割も保守が必要で、テンプレート変更によって気付かないまま壊れる可能性があります。
SEOに役立つのか
効果があるとしても間接的です。CSS自体はランキングシグナルとして読まれません。GoogleのMartin Splittの発言によれば、CSSクラス名は評価対象ではありません。Critical CSSが改善し得るのは表示速度であり、これはCore Web Vitals、特にLCPに関係します。つまり、描画の高速化 → LCPの改善 → 小さなSEO上の利点、という経路であって、“critical CSS is a ranking factor.” (翻訳)「Critical CSSはランキング要因である」という意味ではありません。
実装方法、Googleの実際の位置付け、トレードオフ、そしてCSSが本当にボトルネックかを判断する方法まで知りたい場合は、Advancedタブへ切り替えてください。
要点 — Critical CSSでは、ファーストビュー用スタイルを抽出して
<head>へインライン化し、残りを非同期で遅延します(rel="preload"とonloadの切り替え、<noscript>のフォールバック、またはloadCSS)。CSSが既定でレンダリングをブロックするため成立する手法です。正確さの軸は、Googleがこれを標準的な助言ではなく、高度で任意の手法としていることです。“Most sites should be able to achieve all of our recommended performance targets without implementing this technique.” (翻訳)「ほとんどのサイトは、この手法を実装しなくても推奨されるすべてのパフォーマンス目標を達成できるはずです。」インライン容量は小さく保ちます。インラインCSSはページ間でキャッシュされず、テンプレート変更で分割が壊れ、遅延処理が競合してFOUCやCLSを起こすことがあります。まず診断し、 JavaScriptやサーバー応答ではなくCSSが実際のボトルネックかを確認してください。CSPのstyle-srcがインライン<style>を拒否する場合があり、“unused at capture” (翻訳)「計測時に未使用」と*“safe to defer”* (翻訳)「遅延して安全」は同義ではありません。また、インライン化だけではフォント読み込みのタイミングは解決しません。SEO効果はCore Web Vitals/LCPを介した間接的なものです。Bing固有の助言はありません。
Critical CSSの実像
解決対象はレンダリングをブロックするCSSです。Googleのweb.devは次のように明記しています。 “By default, CSS is treated as a render-blocking resource, which means that the browser won’t render any processed content until the CSSOM is constructed” (翻訳)「既定ではCSSはレンダリングをブロックするリソースとして扱われるため、CSSOMが構築されるまでブラウザーは処理済みコンテンツを描画しません。」 出典 これが手法の存在理由です。ブラウザーはスタイルが揃うまで描画を待つため、CSSの遅延は初回描画の遅延になります。基礎となる処理全体はクリティカルレンダリングパスのハブと、関連するレンダリングをブロックするリソースを参照してください。
Critical CSSはCSSを2つに分けて対処します。web.devの定義は、“Critical CSS is a technique that extracts the CSS for above-the-fold content in
order to render content to the user as fast as possible.” (翻訳)「Critical CSSは、ファーストビューのコンテンツに必要なCSSを抽出し、できるだけ速く利用者へ表示する手法です。」と説明しています。仕組みについても、“Inlining extracted styles in the <head> of the HTML document eliminates the need to make an additional request to fetch these styles. The remainder of the CSS can be loaded asynchronously” (翻訳) 「抽出したスタイルをHTML文書のheadへインライン化すれば追加リクエストが不要になり、残りのCSSは非同期で読み込めます」としています。
web.devが明言し、多くの二次資料が見落としている点として、普遍的なファーストビューの高さは存在しません。端末サイズ、向き、ブラウザーUI、ズーム、ページ状態(開いたメニュー、読み込み済みのパーソナライズ、エラー状態)によって「クリティカル」に含めるものが変わります。固定のピクセル境界ではなく、選択した初期ビューポートと状態に対する判断として扱い、デスクトップのスクリーンショット1枚ではなく実際のブレークポイントと状態で検証します。
作業は次の順序で2つあります。
- インライン化: ファーストビューに最低限必要なCSSを
<head>へ置き、初回描画前の追加往復をなくします。 - 遅延: 残りのスタイルシートを非同期で読み込み、初回描画をブロックさせません。
これは私がページ体験に関する講演で示してきた分け方と同じです。ページ体験の次の展開(SMX Next 2021)では、CSS作業を早期/クリティカル経路(未使用CSSの削除 → CSSの圧縮 → Critical CSSのインライン化)と、後期/遅延経路(非クリティカルCSSの遅延)に分けました。web.devと同じ構造を、私の考える実行順に並べたものです。
実装方法
ステップ1 — Critical CSSをインライン化する。 Lighthouseは、初回描画に必要なクリティカルスタイルをHTMLページのheadにある<style>ブロック内へインライン化するよう案内しています。同じ資料で参照されるGoogleの容量目安は、ファーストビューのコンテンツを圧縮後14 KB未満に保つことです。最初のネットワーク往復に収めるためですが、これは普遍的な仕様ではなく、2019年時点の通信上の指針として扱ってください。現在普及しているHTTP/2とHTTP/3では初回往復の計算が変わります。Google文書に残る数値ではあるものの、厳密に調整する場合は14 KBを絶対視せず、現在のプロトコルとサーバー挙動で検証します。
ステップ2 — 残りを遅延する。 web.devが非クリティカルCSSの遅延で推奨するのは、onloadで切り替えるpreloadと<noscript>のフォールバックを組み合わせる方法です。
<link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="styles.css"></noscript>本番環境では、切り替えを自作するより、この挙動を内包して各ブラウザーで機能するloadCSSなどのCSS遅延関数を使うことをweb.devは勧めています。JavaScriptで遅延する場合、非クリティカルCSSの読み込み開始をJavaScriptの実行まで待つと、利用者がスクロールした際の描画が遅れることがあるため、preloadでダウンロードを早く開始します。
ツール。 Critical CSSを手作業で抽出することは多くありません。Googleの参照実装はAddy Osmaniによるcritical npmパッケージで、“a tool that extracts, minifies and inlines above-the-fold CSS.” (翻訳)「ファーストビューのCSSを抽出、圧縮、インライン化するツール」です。代替にはPenthouse、CriticalCSS、WordPressやShopify向けのSaaS/プラグイン生成ツールがあります。必要な規則を自分で特定する場合、GoogleはChrome DevToolsのCoverageタブで非クリティカルなCSSとJSを識別するよう案内しています。
WP RocketやAutoptimizeなどのプラグイン/生成ツールを使う場合、ベンダーのUI手順やスコアの前後比較をプラットフォーム全体の保証と見なさないでください。製品バージョンと特定サイトの結果が混在し、差分が独立に再現されていないことがあります。本番採用前に現行文書とバージョンを確認し、手作業の実装と同じテスト行列、つまりコールド/再訪読み込み、実際のブレークポイント・テーマ・状態、運用中ならCSPポリシーで検証します。
Critical CSSはレンダリングをブロックするCSSへの対策の一つにすぎません。ほかにも、media属性でスタイルシートの適用範囲を限定して描画をブロックさせない方法や、配信するCSS自体を減らす方法があります。web.devのレンダリングブロック記事はインライン化よりmedia属性を中心に説明しており、Googleにも文書ごとに複数の公式な処方があります。
Googleの実際の位置付け(正確さの軸)
競合記事の多くが埋もれさせているものの、ここがこのページを書いた最大の理由です。GoogleはCritical CSSを標準的な助言として提示していません。codelabはリスクを明記しています。“This codelab describes an advanced performance technique that can improve performance, but can also lead to bugs if not implemented properly” (翻訳)「このcodelabはパフォーマンスを改善し得る高度な手法を説明しますが、正しく実装しないとバグを生む可能性もあります。」 出典さらに複数の文書で、“Most sites should be able to achieve all of our recommended performance targets without implementing this technique” (翻訳)「ほとんどのサイトは、この手法を実装せずに推奨されるすべてのパフォーマンス目標を達成できるはずです。」 出典と述べています。
Evidence for this claim web.dev presents critical CSS as an advanced technique that can cause bugs and says most sites can meet performance targets without it. Scope: web.dev codelab guidance; not a universal recommendation. Confidence: high · Verified: web.dev: Extract and inline critical CSS利点にも注意点があります。web.devは、インライン化するとブラウザーが後続ページで再利用するためのCSSキャッシュを作れなくなるため、控えめに使うべきだと説明しています。過剰な優先付けについても、if everything is prioritized then nothing is. (翻訳)「すべてを優先すれば、何も優先されていないのと同じです。」と警告しています。インライン化しすぎると、速く届けたいHTMLそのものが肥大化します。
正確に表現するなら、Critical CSSは文書化された実在の強力な手法である一方、Googleが大半のサイトには目標達成のために不要だとする、高度で任意の最終手段です。その前提で扱ってください。
実際のトレードオフ
独立系のパフォーマンス技術者は特に強く注意を促しており、その内容はGoogle自身の但し書きとも一致します。
再訪時のキャッシュ喪失。 DebugBearのMatt Zeunertは、“critical CSS can’t be re-used between different page loads on your website. So subsequent page views can actually be slower than they would be without critical CSS” (翻訳)「Critical CSSはサイト内の別ページ読み込みで再利用できないため、後続ページはCritical CSSがない場合より遅くなることがあります。」 出典と明言しています。通常の外部スタイルシートは一度キャッシュされて全ページで再利用されますが、インラインCSSはHTMLレスポンスごとに再ダウンロードされます。
保守と回帰のリスク。 Harry Robertsの反対意見として有名な記事は、“retrofitting Critical CSS is difficult and error prone” (翻訳)「既存サイトへCritical CSSを後付けするのは難しく、誤りが起きやすい」 出典と警告しています。CSSをボトルネックと特定した後も、“you need to keep it that way… One wrong decision can undo everything.” (翻訳)「その状態を維持しなければならず、判断を一つ誤るだけですべてが台無しになり得ます。」自動的な再検証はなく、テンプレートやデザインの変更で分割が静かに壊れる可能性があります。
遅延処理の競合。 Robertsはpreload/onloadの切り替えがタイミング次第で逆効果になるとも指摘します。“if it takes 1s to parse your <head> and 0.5s to asynchronously fetch your non-Critical CSS, then the CSS will be turned back into a synchronous file 0.5s before you were ready to go anyway” (翻訳)「headの解析に1秒、非クリティカルCSSの非同期取得に0.5秒かかるなら、準備が整う0.5秒前にCSSは結局同期ファイルへ戻されます。」非クリティカルCSSの到着が遅ければ、未スタイル表示やレイアウトシフトも起こり得ます。
そもそも最大のボトルネックではないことが多い。 Robertsの中心的な主張は、“Critical CSS only helps if CSS is your biggest render-blocking bottleneck, and quite often, it isn’t” (翻訳)「Critical CSSが役立つのはCSSが最大のレンダリングブロッカーである場合だけで、実際にはそうでないことがよくあります。」 出典というものです。DebugBearも、“if you still have render-blocking JavaScript code, inlining CSS is unlikely to help” (翻訳)「レンダリングをブロックするJavaScriptが残っているなら、CSSのインライン化はほぼ役立ちません。」 出典と説明し、“often it’s not the most impactful optimization.” (翻訳)「最も効果の大きい最適化ではないことが多い」としています。
本番環境の落とし穴:CSP、状態、フォント
簡単なデモでは見えず、本番運用で問題になる失敗要因がさらに3つあります。
CSPがインライン<style>を完全にブロックすることがある。 Content-Security-Policyのstyle-srcは、nonceや一致するハッシュなどで明示的に許可されていないインライン<style>をブロックします。MDNは違反条件とnonce/hashの仕組みを説明しています。コンソールエラーを消すためにunsafe-inlineへ逃げるとサイト全体のポリシーが弱くなります。抽出ツールへnonce/hash生成を組み込み、公開後にブラウザーコンソールで違反を確認してください。
「計測時に未使用」は「遅延して安全」と同じではない。 Coverageタブが示すのは、1回の記録中に実行されたCSSです。安全な分割では、カスケード順序に加え、レスポンシブのブレークポイント、テーマ差分、パーソナライズ、フォーカス状態、開いたメニュー/モーダル、エラー状態に必要な規則を維持しなければなりません。Robertsも、どのビューポートと、どの未表示・未操作要素(ドロップダウンやフライアウト)を抽出対象に含めるのかという同じ問題を提起しています。
フォント問題は解決せず、描画処理が増えることもある。 要素スタイルをインライン化しても、Webフォントが早く発見されることや文字が時間どおりに表示されることは保証されません。フォントの発見、preload、font-display、フォールバック指標はCritical CSSとは別の依存関係です。また、インラインの部分スタイルに続いて大きなスタイルシートを適用すると、スタイル再計算、レイアウト、描画が増える場合があります。取得遅延の削減が総描画処理の削減を意味するとは限らないため、ネットワークウォーターフォール以外も測定します。
本当に必要かを診断する方法
以上を踏まえ、「Critical CSSを追加する」から始めず、「CSSが描画のボトルネックであることを確認する」から始めてください。さらに、次の4つのゲートをすべて満たす必要があります。
1. CSSが推測ではなく、実証されたブロッカーである。
- PageSpeed Insights/Lighthouseレポートを開きます。Lighthouse 13以降、旧「Eliminate render-blocking resources」監査はRender-blocking requestsインサイトへ移動しました。旧監査名を使う記事は古くなっています。
- Chrome DevToolsのCoverageタブで、初回描画時に未使用のCSSとJSの量を確認します。
- 原因を分けます。ボトルネックがレンダリングをブロックするJavaScriptや遅い**サーバー応答(TTFB)**なら、CSSのインライン化では直りません。
2. 実際に安定した抽出範囲を作れる。 デスクトップのスクリーンショット1枚ではなく、実際のブレークポイント、テーマ、パーソナライズ、操作状態を網羅する必要があります。
3. 再訪コストとCSPコストを許容できる。 インラインCSSはキャッシュされないため、一般的なセッションの深さと比較します。CSPのstyle-srcを運用している場合は、公開後ではなく事前にnonce/hash生成をパイプラインへ組み込みます。
4. 実際に保守できる。 テンプレートやデザインの変更ごとに再生成し、コールド/再訪読み込み、対応する全ルート・ビューポート・状態を含むテスト行列を再実行します。公開後に一度目視するだけでは不十分です。
4つのゲートをすべて満たすなら、Critical CSSは保守コストに見合う可能性があります。一つでも満たさないなら、未使用CSSの削除、圧縮、mediaによる非クリティカルスタイルシートの限定といった、より低コストな修正を優先します。
2026年時点の注意点
現在進行中の注意点として、Google文書がCSS遅延用に推奨する<link rel="preload" as="style">パターンが、Lighthouse/PSIの更新後に再びレンダリングブロック扱いされたという未解決報告があります。GitHub issue #17031では、Lighthouse 13.0.1で緑だったpreload済みCSSが13.3.0でレンダリングブロックと判定された経緯が記録されています。執筆時点でGoogleの公開解決はないため進行中の問題として扱います。正しく遅延したCSSをPSIが警告しても監査側が誤っている可能性があるため、実装が壊れたと決め付けずレポートを批判的に読んでください。
Critical CSSはSEOに役立つか
効果は間接的で、小さいものです。次の2点を分けます。
- CSSは直接のランキングシグナルではない。 GoogleのMartin SplittはCSSクラス名について、“I don’t think we care because the CSS class names are just that.” (翻訳)「CSSクラス名は単なる名前なので、Googleが気にしているとは思いません。」と述べています。クラス名に限った発言ですが、CSSの選択自体がランキング入力として読まれるという広い誤解を否定します。
- 速度はCore Web Vitalsを介した小さなシグナルである。 Critical CSSは初回描画を改善し、それがGoogleのページ体験シグナルに使われるCore Web Vitals指標のLCPを改善する可能性があります。SEOとのつながりは手法への加点ではなく、描画の高速化だけです。
したがってCritical CSSのSEO上の価値は、そのサイトでLCPをどれだけ改善するかに等しく、Googleやパフォーマンス専門家が指摘するように、販売ツールが示唆するほど大きくないことがよくあります。
Bingについて
Bing固有の助言はありません。Googleには複数のweb.devページとcodelabがありますが、Critical CSSを扱うBing/Microsoft専用文書は確認できませんでした。Bingの一般的なページ体験の助言(高速に保ち、重要なコンテンツへ到達可能にする)は適用されますが、web.devのCritical CSS codelabに相当するものはありません。Bing固有の推奨があるという主張には根拠がありません。
このページの位置付け
このページはクリティカルレンダリングパスのハブ配下にあり、Critical CSSはその経路を短縮する手法の一つです。レンダリングをブロックするリソースの実践的な関連ページでもあります。効果が出る場合は、Largest Contentful Paint(LCP)、First Contentful Paint(FCP)、より広いCore Web Vitalsに現れます。全体像はWebパフォーマンスのクラスターを参照してください。
AI要約
Advanced版の要点をまとめます。
- Critical CSS=抽出+インライン化+遅延。 ファーストビュー用CSSを
<head>へインライン化し、残りを非同期で読み込みます。CSSは既定でレンダリングをブロックし、“the browser won’t render any processed content until the CSSOM is constructed” (翻訳)「CSSOMが構築されるまでブラウザーは処理済みコンテンツを描画しない」ためです。ファーストビューの普遍的な高さはなく、端末、向き、ズーム、状態で変わります。 - 実装:
<style>へインライン化し、rel="preload"+onloadと<noscript>(またはloadCSS)で残りを遅延します。圧縮後約14 KB未満という2019年のGoogle指針は、現行プロトコルで再検証してください。critical、Penthouse、プラグイン生成ツールを使えますが、製品固有の主張は独立に検証し、DevToolsのCoverageで規則を特定します。 - Googleの位置付け: 高度で任意の手法であり、標準的な助言ではありません。“Most sites should be able to achieve all of our recommended performance targets without implementing this technique.” (翻訳)「ほとんどのサイトは、この手法なしで推奨パフォーマンス目標を達成できるはずです。」codelabも*“can also lead to bugs if not implemented properly.”* (翻訳)「正しく実装しないとバグにつながる可能性がある」と警告します。
- トレードオフ: インラインCSSはページ間でキャッシュされず、テンプレート・テーマ・状態の変更で分割が壊れます。Harry Robertsの*“One wrong decision can undo everything”* (翻訳)「一つの誤った判断ですべてが台無しになる」という警告どおりです。CSPの
style-srcはnonce/hashなしのインラインブロックを拒否し、preload/onloadは競合やFOUC/CLSを起こすことがあります。フォント読み込みも別問題です。 - 4つの診断ゲート: CSSが本当のブロッカーであること、状態を網羅して安定して抽出できること、再訪とCSPのコストを許容できること、継続的に再生成・再検証できることを確認します。JavaScriptがブロックしているならCSSのインライン化は役立ちません。
- SEO効果は間接的: CSSは直接のランキングシグナルではなく、描画高速化 → LCP → Core Web Vitalsという経路だけです。
- Bing固有の助言はありません。 また、正しく遅延したCSSをレンダリングブロックと誤判定するLighthouse 13.3.0の2026年の回帰報告(issue #17031)にも注意してください。
公式文書
Critical CSSとレンダリングをブロックするリソースに関する一次資料です。
Google/web.dev
- Critical CSSの抽出 — 基本定義、インライン化と遅延の仕組み、約14 KBの目安、控えめに使うべきというキャッシュ上の注意。
- CriticalによるCritical CSSの抽出とインライン化(codelab) —
criticalツールの実習。“advanced technique… can also lead to bugs” (翻訳)「高度な手法で、バグにつながることもある」、“most sites… without implementing this technique” (翻訳)「多くのサイトはこの手法なしで目標を達成できる」という警告。 - 非クリティカルCSSの遅延 —
rel="preload"+onloadの遅延パターンとloadCSSの推奨。 - 重要アセットのpreload — 遅延CSSをpreloadする理由と、JavaScript遅延によるスクロール時の遅れ。
- レンダリングをブロックするCSS — CSSが描画をブロックする理由と、インライン化ではなく
media属性を使う対策。 - クリティカルパスを理解する — より広いクリティカルレンダリングパスにおけるCritical CSSの位置付け。
Google/Chrome開発者向け文書(Lighthouse)
- レンダリングをブロックするリソースをなくす — クリティカルスタイルのインライン化、非クリティカルスタイルの遅延、Coverageタブの利用を案内する監査。Lighthouse 13以降は「Render-blocking requests」インサイトへ移動しています。
- CSS配信の最適化(旧版/非推奨)— Critical CSSの助言を広めた初期PageSpeed Insights文書。現行の指針ではなく歴史的資料です。
MDN
- Content-Security-Policy: style-src — CSPの
style-srcが、一致するnonceやhashのないインライン<style>をブロックする仕組みと、unsafe-inlineが適切な解決策でない理由を説明します。
Bing/Microsoft
- Bing固有のCritical CSS文書はありません。Bing Webmaster Tools Site Scanなど一般的なパフォーマンス/UXの助言は適用されますが、web.devのcodelabに相当するものはありません。
出典からの引用
Google/web.dev、GoogleのMartin Splitt、実名の業界パフォーマンス専門家による発言です。文章断片を裏付けるweb.dev/Chromeのリンクは、引用箇所へのディープリンクになっています。
Google/web.dev — 定義と仕組み
- “Critical CSS is a technique that extracts the CSS for above-the-fold content in order to render content to the user as fast as possible.” (翻訳)「Critical CSSは、ファーストビューのコンテンツに必要なCSSを抽出し、できるだけ速く利用者へ表示する手法です。」 引用箇所へ移動
- “Inlining extracted styles in the
<head>of the HTML document eliminates the need to make an additional request to fetch these styles. The remainder of the CSS can be loaded asynchronously.” (翻訳)「抽出したスタイルをHTML文書のheadへインライン化すると、取得のための追加リクエストが不要になり、残りのCSSは非同期で読み込めます。」 引用箇所へ移動 - “By default, CSS is treated as a render-blocking resource, which means that the browser won’t render any processed content until the CSSOM is constructed.” (翻訳)「既定ではCSSはレンダリングをブロックするリソースとして扱われるため、CSSOMが構築されるまでブラウザーは処理済みコンテンツを描画しません。」 引用箇所へ移動
Google/web.dev — 高度で任意の手法(正確さの軸)
- “Most sites should be able to achieve all of our recommended performance targets without implementing this technique.” (翻訳)「ほとんどのサイトは、この手法を実装しなくても推奨されるすべてのパフォーマンス目標を達成できるはずです。」— web.devのCritical CSS codelab。 codelabを読む
- “This codelab describes an advanced performance technique that can improve performance, but can also lead to bugs if not implemented properly.” (翻訳)「このcodelabはパフォーマンスを改善し得る高度な手法を説明しますが、正しく実装しないとバグを生む可能性もあります。」 codelabを読む
- 過剰なインライン化について:“If everything is prioritized then nothing is.” (翻訳)「すべてを優先すれば、何も優先されていないのと同じです。」— web.dev。 記事を読む
Google/Chrome(Lighthouse)— 監査自身の処方
- “Inline critical styles required for the first paint inside a
<style>block at theheadof the HTML page.” (翻訳)「初回描画に必要なクリティカルスタイルを、HTMLページのheadにあるstyleブロック内へインライン化してください。」 監査を読む
Martin Splitt(Google Search Relations)(Search Engine Journal経由)
- CSSクラス名がランキングシグナルかについて:“I don’t think it does. I don’t think we care because the CSS class names are just that.” (翻訳)「そうではないと思います。CSSクラス名は単なる名前なので、Googleが気にしているとは思いません。」 記事を読む
Harry Roberts(独立系Webパフォーマンスコンサルタント、csswizardry.com)
- “Critical CSS only helps if CSS is your biggest render-blocking bottleneck, and quite often, it isn’t.” (翻訳)「Critical CSSが役立つのはCSSが最大のレンダリングブロッカーである場合だけで、実際にはそうでないことがよくあります。」 記事を読む
- “Retrofitting Critical CSS is difficult and error prone.” (翻訳)「既存サイトへCritical CSSを後付けするのは難しく、誤りが起きやすい。」さらに保守について、“One wrong decision can undo everything.” (翻訳)「一つの誤った判断ですべてが台無しになり得ます。」 記事を読む
Matt Zeunert(DebugBear創業者)
- “critical CSS can’t be re-used between different page loads on your website. So subsequent page views can actually be slower than they would be without critical CSS.” (翻訳)「Critical CSSはサイト内の別ページ読み込みで再利用できないため、後続ページはCritical CSSがない場合より遅くなることがあります。」 記事を読む
- “Before deciding to inline critical CSS, check if it’s actually the bottleneck for rendering content on your website. For example, if you still have render-blocking JavaScript code, inlining CSS is unlikely to help.” (翻訳)「Critical CSSをインライン化すると決める前に、それがサイトの描画における本当のボトルネックかを確認してください。レンダリングをブロックするJavaScriptが残っているなら、CSSのインライン化はほぼ役立ちません。」 記事を読む
#:~:text=を付けずにソースを指しています。Martin Splittの発言はGoogleの一次トランスクリプトではなくSearch Engine Journal経由で、CSSクラス名に限った内容です。最終情報として扱う前に、各引用を現在の公開ソースで確認してください。 Critical CSSを実装すべきか
Google、Harry Roberts、DebugBearはいずれも、“most sites don’t need this,” (翻訳)「大半のサイトにはこの手法が不要」と述べています。ここで有用なのは手順書ではなく、導入すべきかを判断する決定木です。上から順に進めてください。
1. PageSpeed Insights/Lighthouseはレンダリングをブロックするリソースを検出しているか?
- いいえ → 実装しません。存在しない問題を解こうとしています。
- はい → 次へ進みます。
2. ブロックしているのはCSSか、それともJavaScript/遅いサーバー(TTFB)か?
- JavaScriptまたはTTFB → そちらを先に修正します。JSがブロックしている、またはサーバーが遅い場合、CSSのインライン化は役立ちません(DebugBear)。修正後もCSSがボトルネックなら戻ります。
- CSS → 次へ進みます。
3. 先に低コストなCSS修正で目標を達成できるか? 次の順で試します。
- Coverageタブで未使用CSSを削除する。
- スタイルシートを縮小・圧縮する。
media属性で非クリティカルなスタイルシートを限定し、ダウンロードはしても描画をブロックさせない(web.devのレンダリングブロック文書で優先される対策)。- それでも目標未達か? → 次へ進みます。
4. テーマ、状態、CSPを含め、クリティカル/非クリティカルの分割を保守できるか?
テンプレート変更によってCritical CSSは静かに壊れます。“one wrong decision can undo
everything” (翻訳)「一つの誤った判断ですべてが台無しになり得る」うえ、1回の計測で未使用だった規則が、テーマ差分、パーソナライズ、開いた状態、フォーカス状態、エラー状態でも遅延して安全とは限りません。CSPのstyle-srcを使うなら、nonce/hash生成を後付けではなくパイプラインへ組み込みます。
- いいえ/テンプレートの変更が速い、または状態行列を網羅できない → 保守コストが利点を上回る可能性が高いため、上記の低コストな修正を選びます。
- はい/安定したテンプレートで実状態を網羅し、変更時に再生成できる → 次へ進みます。
5. 1セッションで複数ページを閲覧する利用者が多いか? インラインCSSはキャッシュされないため、2ページ目以降はキャッシュの利点を失い、遅くなることがあります(DebugBear)。
- はい、複数ページを深く閲覧する → 再訪ペナルティを比較し、入口テンプレートだけでのインライン化も検討します。
- 主に単一ページの入口(記事やランディングページなど) → 次へ進みます。
ここまで条件を満たした場合: CSSがボトルネックであることを確認し、低コストな修正を試し、テンプレートが安定し、入口中心のトラフィックであることが分かっています。この場合はCritical CSSを検討できます。ツール(critical、Penthouse、プラグイン)で生成し、圧縮後のインライン容量を約14 KB未満に保ち、テンプレート変更のたびに再検証してください。
Critical CSS実装チェックリスト
Coverageタブ/PageSpeedでCSSが実際のレンダリングボトルネックだと確認してから着手してください。
- ボトルネックがレンダリングをブロックするJavaScriptや遅い**サーバー応答(TTFB)**ではなく、CSSだと確認した。
- 未使用CSSの削除、縮小・圧縮、
mediaによる非クリティカルスタイルシートの限定という低コストな修正を先に試し、それでも目標未達である。 - スタイルシート全体ではなく、ファーストビューに必要なCSSを
critical、Penthouse、生成ツールなどで抽出した。デスクトップのスクリーンショット1枚ではなく、実際のブレークポイント、テーマ、状態を使った。 - Critical CSSの
<style>ブロックを<head>内 へインライン化した。 - CSPの
style-srcポリシー を運用する場合、nonce/hash生成をパイプラインへ組み込み、本番ポリシーでコンソール違反がないことを確認した。 - インライン容量を圧縮後約14 KB未満に保った。これは現在のプロトコルで再検証すべき、2019年時点のGoogle指針である。
- 完全なスタイルシートを
rel="preload"+onload、またはloadCSSで非同期に遅延した。 - JavaScript無効時の
<noscript>フォールバック を追加した。 - 遅延CSS到着時のFOUC/レイアウトシフトを確認した(CLSを監視)。
- PageSpeed/Lighthouseを再実行し、レンダリングブロック判定を批判的に読んだ(issue #17031のように正しく遅延したCSSが誤判定されることがある)。
- テンプレートやデザイン変更後にCritical CSSを再生成する再検証リマインダーを設定した。
- インラインCSSはキャッシュされないため、再訪時の性能が悪化していないことを確認した。
Critical CSSのアンチパターン
繰り返し起きる失敗の多くは、高度で任意の手法を標準設定のように扱うことから生じます。
診断前に導入する。 最も一般的な誤りです。ブロッカーがJavaScriptや遅いサーバーならCSSをインライン化しても効果はありません。レンダリングをブロックするJavaScriptが残っているならCSSのインライン化はほぼ役立たないため、最初にCSSがボトルネックだと確認します。
すべてをインライン化する。 スタイルシート全体をインラインへ詰め込むと、速く届けたいHTMLが肥大化します。web.devは、“if everything is prioritized then nothing is” (翻訳)「すべてを優先すれば、何も優先されていないのと同じです。」 出典と説明します。Critical CSSは最小限のファーストビュー用CSSであり、全CSSのインライン化ではありません。
再訪コストを無視する。 インラインCSSはキャッシュされないため、“subsequent page views can actually be slower than they would be without critical CSS” (翻訳)「後続ページはCritical CSSがない場合より実際に遅くなることがあります。」 出典複数ページを深く閲覧するサイト全体へ適用すると、セッション全体が速くなるどころか遅くなる可能性があります。
設定して放置する。 自動再検証はありません。Harry Robertsが警告するように、“one wrong decision can undo everything” (翻訳)「一つの誤った判断ですべてが台無しになり得ます。」 出典テンプレート変更で分割が静かに壊れ、誤った、または不足したファーストビューCSSを配信することになります。
PSIの警告だけでCSSが原因だと決める。 監査はレンダリングをブロックするリソースを示しますが、CSSが最大のボトルネックだとは証明しません。Lighthouse 13.3.0の回帰報告(issue #17031)のように、正しく遅延したCSSを誤判定することさえあります。スコアへ反応するだけでなく、レポートを読みます。
直接のSEO向上を期待する。 Critical CSSはランキング要因ではありません。CSSはランキングシグナルとして読まれず(Martin Splitt)、効果があるとすれば描画高速化 → LCP → Core Web Vitalsという経路だけです。それもそのサイトのLCPが実際に改善した場合に限られます。
CSPを確認せず公開する。 Content-Security-Policyのstyle-srcを運用している場合、一致するnonceやhashのないインライン<style>は完全にブロックされます。unsafe-inlineでエラーを消すと、パイプラインを直す代わりにサイト全体のポリシーを弱めてしまいます。
一つのテーマ、状態、ルートだけで抽出し、完了とする。 Coverageの1回の記録で「未使用」でも、ダークテーマ、パーソナライズされたコンテンツ、開いたモーダルで遅延して安全とは限りません。既定状態しか考慮しない分割は、ほかの状態で壊れたファーストビュースタイルを配信します。
Critical CSS用ツール
抽出/生成
critical(Addy Osmani)— Googleの参照npmパッケージ。“extracts, minifies and inlines above-the-fold CSS.” (翻訳)「ファーストビューのCSSを抽出、縮小、インライン化する」ツールで、Google自身のcodelabが使っています。- Penthouse — ビルドパイプラインへ組み込まれることが多い、広く使われるクリティカルパスCSS生成ツール。
- CriticalCSSと各種SaaS/プラグイン生成ツール — WordPress、Shopifyなどの非技術ユーザー向け。便利ですが、同じトレードオフと保守リスクがあります。
診断(必ず先に行う)
- Chrome DevTools — Coverageタブ — Googleが非クリティカルなCSSとJSを識別するために推奨する機能。初回描画時に各ファイルのどの程度が未使用かを示します。
- PageSpeed Insights/Lighthouse — Lighthouse 13では「Render-blocking requests」インサイトとなったレンダリングブロック監査。問題の存在は示しますが、CSSが原因だとは自動判定しません。
- WebPageTest — ウォーターフォールと「Start Render」を読み、初回描画を遅らせるリソースを特定します。
- DebugBear — 継続監視に加え、キャッシュとボトルネックのトレードオフを明快に解説しています。
症状からCritical CSSの問題を診断する
ページが一瞬スタイルなしで表示される
考えられる原因: 抽出したクリティカルセットが不足しているか、遅延スタイルシートの到着が遅すぎます。修正: 初期ビューポートに必要なレイアウトと文字組みの規則を戻し、実際のテンプレート状態で再生成します。確認: 低速化したコールド読み込みのフィルムストリップで、最初の描画からスタイルが適用されています。
初期ビューポートは正しいが、下部コンテンツが崩れる
考えられる原因: 非クリティカルバンドルの読み込みに失敗したか、その読み込み方法がページ初期化と競合しています。修正: onload経路だけに依存せず、スタイルシートのリクエストとフォールバック動作を確認します。確認: JavaScriptを遅延させても、スクロールや画面遷移後のコンテンツに完全なスタイルが適用されます。
あるテンプレートでは改善するが、別のテンプレートでは悪化する
考えられる原因: 初期表示の内容が異なる複数レイアウトで、同じ生成セットを再利用しています。修正: テンプレート単位で抽出するか、保守コストが効果を上回る場所では最適化を外します。確認: 対応する各テンプレートが同じコールド読み込みの表示テストに合格します。
再訪時の表示が遅くなる
考えられる原因: HTMLレスポンスごとに過剰なCSSをインライン化し、通常のスタイルシートキャッシュを失っています。修正: クリティカルセットを小さくし、初回表示の改善と再訪時の転送量・解析コストを比較します。確認: コールドとウォームの両方の閲覧が改善するか、トレードオフが明示的に受容されています。
インラインstyleブロックが消える、またはコンソールにCSP違反が出る
考えられる原因: Content-Security-Policyのstyle-srcが、一致するnonceやhashのないインライン<style>をブロックしています。修正: unsafe-inlineでポリシーを緩めず、抽出パイプラインへnonce/hash生成を組み込みます。確認: 緩いローカル設定ではなく、実際の本番ポリシーでコンソールにCSP違反がなく、インラインブロックが描画されます。
テーマ、パーソナライズ、操作状態でスタイルが外れる
考えられる原因: 一つのテーマ、ログアウト中の既定状態、または一つのルートだけを抽出し、ほかの状態に必要なカスケード規則を「未使用」として落としています。修正: ダーク/ライトテーマ、パーソナライズ、フォーカス・開閉・エラー状態などの代表状態で再抽出し、カスケード順序を保ちます。確認: 既定状態だけでなく、対応する各状態が同じコールド読み込み表示テストに合格します。
診断・抽出・配信・保守のフレームワーク
- 診断: ウォーターフォール、Coverage記録、トレースでCSSがクリティカルパス上にあることを証明します。サーバー応答やJavaScriptの制約が大きければ中止します。
- 抽出: 実際の初期ビューポートに必要な規則だけを含めます。1枚のスクリーンショットでテンプレート全体を代表できると考えず、レスポンシブ状態と動的コンテンツを試します。
- 配信: 小さなクリティカルセットをインライン化し、完全なスタイルシートを失敗時にも安全な方法で読み込みます。CSP、ソース順序、キャッシュ挙動を維持します。
- 保守: テンプレートやデザイントークンの変更時に再生成し、表示と性能を確認します。古いCritical CSSは一度限りの設定費ではなく、本番障害です。
このフレームワークはCritical CSSを根拠に基づく仕組みにします。保守工程を省くと、当初の速度改善が後の表示回帰へ変わります。
Critical CSS判断早見表
| 質問 | シグナル | 対応 |
|---|---|---|
| CSSが初回描画を遅らせているか | 測定したクリティカルパス上にスタイルシートがある | 診断を続ける |
| 別の工程の影響が大きいか | TTFBまたはJavaScriptが支配的 | そちらを先に直す |
| クリティカルセットは小さく安定しているか | テンプレートで共有される初期表示規則が少ない | 抽出を検討する |
| 初回描画が点滅・移動するか | フィルムストリップまたはLayout Shiftsに回帰がある | 不足したレイアウト規則を戻す |
| 遅延バンドルは安全に失敗するか | 読み込みが遅れてもページを利用できる | 対応する閲覧経路で検証する |
| チームが再生成できるか | 抽出がテンプレート/CSSリリース工程に含まれる | 最適化を維持する |
| 保守が手作業で壊れやすいか | デザイン変更後に古い出力が公開される | より単純なCSS削減・分割を選ぶ |
Critical CSS変更の効果を証明する
初回描画の表示テスト
実行するテスト: 対応するブレークポイントで、変更前後のコールド・低速化フィルムストリップを取得します。期待結果: 有用なファーストビューのコンテンツが早く描画され、最初のフレームから正しくスタイルされています。失敗の解釈: クリティカルセットが不足しているか、CSSが実際のボトルネックではありません。監視期間: 複数回の実行ですぐに確認します。ロールバック条件: 点滅、コンテンツ欠落、新しいレイアウトシフト。
遅延スタイルシートのテスト
実行するテスト: 完全なスタイルシートの読み込み中にNetworkパネルとPerformanceパネルを確認します。期待結果: 非クリティカルバンドルは初回描画を妨げず、その後確実に適用されます。失敗の解釈: 読み込み方法が依然としてブロックしているか、初期化と競合しています。監視期間: 意図的に遅いリクエストを含め、すぐに確認します。ロールバック条件: 完全なスタイルが適用されない、または操作できなくなる。
テンプレート回帰テスト
実行するテスト: 生成したクリティカルセットを使う全テンプレートとブレークポイントで表示比較を行います。期待結果: 初期表示の規則に欠落や古い内容がありません。失敗の解釈: 抽出範囲が本番テンプレートの差分と一致していません。監視期間: 関連するCSSまたはテンプレートのリリースごと。ロールバック条件: 本番テンプレートが一つでも正しく描画されない。
時間を使う価値のある資料
私の講演
- ページ体験の次の展開 — SMX Next 2021(SlideShare)— CSS作業を、未使用削除 → 縮小 → Critical CSSのインライン化という早期/クリティカル側と、非クリティカルCSSの遅延側に分け、preload/onloadパターンを示した講演。このページの全体構造の基礎です。
- ページ体験アップデート — TMC 2021年6月(SlideShare)— 重要リソースの優先付け、遅延読み込み、Critical CSSのインライン化を扱う、より広いページ体験/Core Web Vitals講演。
- Googleのページ体験向け検索シグナル — SMX Advanced 2021(SlideShare)— 当時の指針を取り巻くページ体験/Core Web Vitalsの背景。
私の関連記事
- Core Web Vitalsとは何か、どう改善するか — LCP/CLS/INPを扱う私の総合ガイド。Critical CSSという名称は扱っておらず、このページがその空白を埋めます。LCPのレンダリングブロック面と併せて読んでください。
- テクニカルSEO初心者ガイド — パフォーマンスとレンダリングを全体像の中で位置付けます。
公式資料
- web.dev — Critical CSSの抽出、Critical codelab、非クリティカルCSSの遅延、レンダリングをブロックするCSS。
- Chrome for Developers — レンダリングをブロックするリソースをなくす(Lighthouse)。
業界資料
- Critical CSSを急いで導入すべきでない理由(Harry Roberts、csswizardry.com)— 効果がある場合、ない場合、保守・競合の罠を扱う重要な反対意見。
- Critical CSSのインライン化でサイトは速くなるか(Matt Zeunert、DebugBear)— キャッシュのトレードオフと、ボトルネックを先に診断する議論を測定とともに説明。
- レンダリングをブロックするリソースを特定・削減する方法(Abby Hamilton/Dentsu、Search Engine Journal)— 監査結果を読む実務手順。
- CSSクラス名はSEOに影響しないとGoogleが確認(Matt G. Southern、Search Engine Journal)— CSSが直接のランキングシグナルでない理由に関するMartin Splittの発言。
- Lighthouse issue #17031(GitHub)— PSI更新後、preload済みCSSがレンダリングブロックと判定された2026年の報告。
- Critical CSSを理解する(Smashing Magazine、2015年)— 古いものの、手法が当初どう説明されたかを知る歴史的な解説。
理解度チェック:Critical CSS
Critical CSSの定義、使用すべき場面、トレードオフに関する5問です。それぞれ回答を選び、結果を確認してください。
変更履歴
2026年8月11日に更新。
編集概要と記録された変更の詳細。変更の詳細
-
変更の詳細な注記は現在英語でのみ提供されています。
-
変更の詳細な注記は現在英語でのみ提供されています。
-
変更の詳細な注記は現在英語でのみ提供されています。
完全な比較は利用できません — この改訂の以前のスナップショットがアーカイブされていません。
2026年7月17日に更新。
編集概要と記録された変更の詳細。変更の詳細
-
変更の詳細な注記は現在英語でのみ提供されています。
-
変更の詳細な注記は現在英語でのみ提供されています。
-
変更の詳細な注記は現在英語でのみ提供されています。
完全な比較は利用できません — この改訂の以前のスナップショットがアーカイブされていません。