WordPress高速化研究所 > WordPress CSS読み込み最適化ガイド|速度と表示崩れを防ぐ実装手順
2026年7月6日
•約18分で読めます
WordPressでCSSの読み込み順、未使用CSS、レンダリングブロック、テーマやプラグイン由来CSSを整理し、表示速度と表示崩れを改善する実装手順を解説します。
WordPressのCSS読み込みを最適化したいです。CSSを圧縮したり、未使用CSSを削除したりすればよいですか?
それだけでは危ないのじゃ。WordPressでは、テーマ、子テーマ、ブロック、プラグイン、フォーム、ページビルダーのCSSが重なっておる。まず、どのCSSがどのページで必要なのかを棚卸しするのじゃ。
WordPressのCSS読み込みは、表示速度だけでなく、表示崩れにも直結します。
CSSが多すぎると、初期表示前にブラウザが処理する量が増えます。読み込み順が曖昧だと、あとから来たCSSでボタン、フォーム、メニュー、CTAの見た目が上書きされます。不要CSSを強引に止めると、ページは速くなったように見えても、問い合わせフォームやスマホメニューが崩れることがあります。
そのため、CSS最適化は「軽くする作業」ではなく、「必要なCSSを、必要なページで、壊れない順番で読む設計」です。
WordPressでは、CSSの読み込みにwp_enqueue_styleを使い、wp_enqueue_scriptsフックで登録するのが基本です。テーマでCSSとJavaScriptを含める方法は、WordPress公式のIncluding CSS & JavaScriptにも整理されています。
WordPressのCSS読み込み最適化は、圧縮や削除より先に、読み込み元、依存関係、必要ページ、表示崩れの確認手順を決める作業です。

この記事では、特定の高速化プラグイン設定ではなく、wp_enqueue_style、CSS棚卸し、wp_dequeue_style、critical CSS、preload、LCP/CLS/INP、フォーム・メニュー・CTA確認、保守しやすいCSS整理までを、運用手順として整理します。
CSSは見た目のファイルですよね。表示速度にもそんなに影響しますか?
影響するのじゃ。CSSは見た目を整えるだけでなく、ブラウザがページを描く前に読む重要な材料じゃ。ここが重いと、最初の表示も、表示中の安定性も悪くなるのじゃ。
CSSは、HTMLを画面に描画する前後でブラウザが解釈するファイルです。必要なCSSが多いほど、ダウンロード、解析、適用に時間がかかります。逆に、必要なCSSが遅れて届くと、最初は崩れた状態で表示され、あとからレイアウトが変わることがあります。
WordPressでは、CSSが複数の場所から出ます。
| 読み込み元 | よくあるCSS | 起きやすい問題 |
|---|---|---|
| テーマ | 全体レイアウト、見出し、ボタン、ヘッダー | 使っていない機能のCSSまで全ページで読む |
| 子テーマ | 上書きCSS、追加レイアウト | 読み込み順が悪く、親テーマに負ける |
| ブロック | ブロックごとのスタイル | 記事ページでCSSが増える |
| フォームプラグイン | 入力欄、確認画面、エラー表示 | フォーム以外のページでも読み込まれる |
| ページビルダー | セクション、アニメーション、レスポンシブ | CSS量が増えやすい |
| 解析・外部埋め込み | ウィジェットやバナー用CSS | どのページで必要か見えにくい |
Core Web Vitalsの観点では、CSSは主にLCPとCLSに影響します。LCPでは、ファーストビューの主要コンテンツが表示されるまでの時間に関係します。CLSでは、あとからCSSやフォントが適用されてレイアウトが動くと悪化します。INPはJavaScriptの影響が大きい指標ですが、重いスタイル計算や画面更新が絡むと操作感にも影響します。
CSS読み込みの問題は「少し重い」だけでなく、ファーストビューの遅延、表示中のガタつき、CTAやフォームの見た目崩れとして表れます。
最初に見るべきなのは、CSSのファイルサイズだけではありません。どのCSSが、どのページで、どの順番で、何のために読み込まれているかです。
CSSはheader.phpにlinkタグを書けば早いですか?
直接書くと、あとで順番や依存関係が見えにくくなるのじゃ。WordPressでは、まずwp_enqueue_styleで管理するのが基本じゃ。
WordPressでテーマやプラグインのCSSを読むときは、基本的にwp_enqueue_styleを使います。$handleでCSSに名前を付け、$depsで依存関係を指定し、$verでキャッシュ更新を制御し、$mediaで適用対象を指定できます。
たとえば、テーマの基本CSS、部品CSS、フォーム用CSSを分けるなら、次のように考えます。
function bitlight_theme_enqueue_styles() {
wp_enqueue_style(
'bitlight-base',
get_stylesheet_uri(),
array(),
wp_get_theme()->get( 'Version' )
);
wp_enqueue_style(
'bitlight-components',
get_template_directory_uri() . '/assets/css/components.css',
array( 'bitlight-base' ),
filemtime( get_template_directory() . '/assets/css/components.css' )
);
if ( is_page( 'contact' ) ) {
wp_enqueue_style(
'bitlight-contact',
get_template_directory_uri() . '/assets/css/contact.css',
array( 'bitlight-components' ),
filemtime( get_template_directory() . '/assets/css/contact.css' )
);
}
}
add_action( 'wp_enqueue_scripts', 'bitlight_theme_enqueue_styles' );
この例で重要なのは、CSSを細かく分けること自体ではありません。bitlight-componentsはbitlight-baseの後に読み、bitlight-contactは問い合わせページだけで読む、という意図をコード上に残していることです。
| 項目 | 整理する意味 |
|---|---|
| handle | 後から止める、依存させる、調査する単位になる |
| deps | 親テーマ、部品CSS、上書きCSSの順番を明示できる |
| ver | CSS更新時に古いキャッシュを残しにくくする |
| media | 印刷用、画面用などの読み込み意図を分けられる |
| 条件分岐 | フォームやLPなど必要ページだけにCSSを出せる |
wp_enqueue_styleの目的は、CSSを読み込むことだけではなく、読み込み順、依存関係、更新管理、ページ別出し分けを保守できる形にすることです。
既存サイトでは、まずheader.phpに直接書かれたlinkタグ、テーマ設定から出ているCSS、プラグインが出しているCSSを確認し、WordPressのキューで管理できるものと、外部仕様上そのままにするものを分けます。
どのCSSが不要なのか、どうやって判断すればよいですか?
いきなり消してはいかんのじゃ。まず荷札を付けるのじゃ。テーマ由来か、プラグイン由来か、フォーム用か、記事用かを分けるのじゃ。
CSS棚卸しでは、ファイル名だけで判断しないようにします。style.css、frontend.css、main.cssのような名前では、どの機能に必要なCSSなのか分かりません。
まず、重要URLごとに読み込まれているCSSを記録します。
| URL種別 | 確認する理由 | 見るCSS |
|---|---|---|
| トップページ | LCPとファーストビューに影響しやすい | テーマ、メインビジュアル、ページビルダー |
| サービスページ・LP | CTAとCVに直結する | CTA、フォーム導線、アニメーション |
| 記事ページ | ブロック、目次、関連記事が増えやすい | ブロックCSS、目次、シェアボタン |
| 問い合わせページ | フォーム崩れがCVに直結する | フォーム、確認画面、エラー表示 |
| 管理画面 | 編集体験と保守に影響する | エディタ用CSS、管理画面用CSS |
Chrome DevToolsのNetworkでCSSファイル一覧を見て、Coverageで未使用量の目安を確認します。ただし、Coverageで未使用に見えるCSSをそのまま削除してはいけません。モーダル、エラー表示、確認画面、スマホメニュー、フォームバリデーション、ログイン状態、検索結果など、初期表示では出ていない状態に必要なCSSがあります。
棚卸しでは、次のようなメモを残します。
| handleまたはファイル | 由来 | 必要ページ | 注意点 |
|---|---|---|---|
| theme-style | 親テーマ | 全ページ | レイアウトの土台 |
| child-style | 子テーマ | 全ページ | 上書き順に注意 |
| contact-form-7 | フォームプラグイン | 問い合わせ、資料請求 | エラー表示も確認 |
| slider-front | スライダー | トップのみ | トップ以外では不要候補 |
| block-library | WordPressコア | 記事、固定ページ | ブロック利用状況で判断 |
CSS棚卸しでは、未使用率だけで削除を決めず、ページ種別、状態変化、フォームエラー、スマホメニュー、CTA表示まで含めて必要性を判断します。
このメモがあると、あとでwp_dequeue_styleを使う場合も、どのhandleをどの条件で止めるのかを説明できます。保守担当者が変わっても、なぜ止めているのかを追いやすくなります。
不要そうなCSSは、wp_dequeue_styleで止めればよいですか?
止める前に、そのCSSの仕事を確認するのじゃ。不要に見えるCSSほど、フォームのエラー表示やスマホメニューの裏側で働いていることがあるのじゃ。
CSSを止める候補になるのは、特定ページでしか使わないのに全ページで読み込まれているCSSです。たとえば、フォームCSS、スライダーCSS、地図ウィジェットCSS、特定LP用CSS、予約システムのCSSなどです。
WordPressには、キューに入ったCSSを外すwp_dequeue_styleがあります。使うときは、対象CSSのhandleを確認し、プラグインやテーマがCSSを登録した後のタイミングで実行します。
function bitlight_dequeue_unused_styles() {
if ( ! is_page( array( 'contact', 'request' ) ) ) {
wp_dequeue_style( 'contact-form-7' );
}
if ( ! is_front_page() ) {
wp_dequeue_style( 'top-slider-style' );
}
}
add_action( 'wp_enqueue_scripts', 'bitlight_dequeue_unused_styles', 100 );
このコードはあくまで形の例です。実際のhandle名はサイトごとに違います。確認せずにコピーすると効かないか、必要なCSSを止めてしまいます。
止める判断では、次を確認します。
| 判断項目 | 確認内容 |
|---|---|
| handleを特定したか | DevTools、HTML、wp_styles、プラグイン資料で確認する |
| 必要ページを分けたか | フォーム、LP、記事、トップ、会員ページを分ける |
| 状態変化を見たか | エラー、確認画面、開閉メニュー、モーダルを確認する |
| スマホを見たか | PCだけでなく実機またはモバイル幅で確認する |
| 戻し方があるか | 変更前の状態、コード差分、キャッシュ削除手順を残す |
wp_dequeue_styleは高速化の便利な道具ですが、handle、必要ページ、状態変化、戻し方が分からないCSSには使わない方が安全です。
特にフォーム系CSSは慎重に扱います。入力欄は崩れていなくても、エラー表示、確認画面、送信完了、reCAPTCHA、同意チェック、必須ラベルだけが崩れることがあります。CSSを止めたら、フォーム送信まで確認して初めて完了です。
critical CSSやpreloadは、全部のCSSに使った方が速くなりますか?
全部に使うものではないのじゃ。最初に見える部分だけを早く描くための道具じゃ。使いすぎると、かえって保守が難しくなるのじゃ。
critical CSSは、ファーストビューを描くために最低限必要なCSSだけを先に読ませる考え方です。preloadは、ブラウザに「このリソースは早めに取りに行ってよい」と伝える仕組みです。
どちらも、使う場面を選ぶ必要があります。
| 手法 | 向いている場面 | 注意点 |
|---|---|---|
| critical CSS | LCP対象の見出し、メイン画像周辺、ヘッダー、CTAの初期表示 | 手作業で増やすと通常CSSと二重管理になる |
| CSS preload | 遅れてほしくない主要CSSを早めに取得したい | 読み込み順やフォールバック確認が必要 |
| page-specific CSS | フォームやLPだけで必要なCSSを分離したい | ページ条件の保守が必要 |
| unused CSS削減 | 明らかに使っていない部品CSSが多い | 状態変化や別テンプレートを確認する |
WordPressでcritical CSSを扱う場合は、手作業でwp_headに長いCSSを直接書き続けると保守が崩れます。ビルド工程で生成する、対象ページを限定する、通常CSSと重複しすぎないようにする、更新時に見直す、という運用まで考えます。
preloadも同じです。LCPに関係するCSSやフォントを早く読みたい場合に検討しますが、すべてのCSSをpreloadすると、ブラウザの優先順位を逆に乱すことがあります。まずNetworkで読み込み順を見て、どのCSSが遅れているのかを確認します。
critical CSSとpreloadは、全ページに一律で足す高速化テクニックではなく、LCP対象とファーストビューを確認してから使う限定的な手段です。
実務では、最初にCSSを減らす、必要ページだけで読む、読み込み順を直す、画像やフォントの影響を見る、という基本を済ませます。それでもファーストビューが遅い場合に、critical CSSやpreloadを検討します。
CSSを整理したら、PageSpeed Insightsの点数だけ見れば合格ですか?
点数だけでは足りんのじゃ。速くなっても、問い合わせボタンが崩れたり、フォームが使いにくくなったりしたら失敗じゃ。CV導線まで見るのじゃ。
CSS読み込み最適化の検証では、Core Web VitalsとCV導線をセットで見ます。
| 指標・導線 | CSSで見ること | 確認方法 |
|---|---|---|
| LCP | ファーストビューの主要要素がCSS待ちになっていないか | PageSpeed Insights、DevTools Performance |
| CLS | CSSやフォント適用後に見出し、画像、CTAが動かないか | Lighthouse、実機スクロール |
| INP | メニュー開閉やフォーム操作で重い再描画が起きないか | 実機操作、Performance |
| フォーム | 入力、確認、エラー、送信完了が崩れないか | テスト送信 |
| CTA | ボタンの位置、余白、タップ範囲、クリック計測が正しいか | スマホ実機、GA4/GTM |
| メニュー | ハンバーガー、ドロップダウン、固定ヘッダーが動くか | モバイル幅、実機 |
PageSpeed Insightsの点数は参考になりますが、CSS整理の合格条件にはなりません。特に、unused CSS削減やCSS遅延読み込みは、見た目が一瞬崩れてから整う、スマホでだけCTAが下に落ちる、フォームのエラー表示だけ崩れる、といった問題を起こすことがあります。
検証では、変更前後で同じURLを見ます。
CSS最適化の完了条件は、LCP、CLS、INPの改善だけでなく、フォーム、メニュー、CTA、計測イベントが壊れていないことです。
CSSは、ユーザーが見る画面の最後の仕上げです。速度だけを見てCSSを削ると、売上に近い導線の信頼感を落とすことがあります。
具体的にどこを見れば、表示崩れを見落としにくいですか?
人が触る場所を見るのじゃ。フォーム、メニュー、CTA、電話ボタン、エラー表示じゃ。眺めるだけではなく、実際に操作するのじゃ。
CSS読み込みを変えた後は、主要ページを眺めるだけでは足りません。操作しながら確認します。
| 確認箇所 | 見るポイント | よくある不具合 |
|---|---|---|
| ハンバーガーメニュー | 開閉、重なり、背景固定、スクロール | メニューが開かない、下に隠れる |
| グローバルナビ | hover、現在地表示、ドロップダウン | 余白が崩れる、クリック範囲が狭い |
| CTAボタン | 色、余白、中央揃え、タップ範囲 | ボタンが小さい、折り返しが崩れる |
| 問い合わせフォーム | 入力欄、ラベル、必須表示、エラー | エラーだけ赤くならない、幅がはみ出す |
| 確認・完了画面 | 確認テーブル、戻るボタン、完了文 | 確認画面だけCSSがない |
| 固定CTA | 追従位置、閉じる操作、スマホ下部 | フォーム入力を隠す |
| 計測タグ | CTAクリック、フォーム完了、電話クリック | 見た目は正常でもイベントが消える |
スマホでは、次の幅で確認すると見落としを減らせます。
| 幅 | 確認したいこと |
|---|---|
| 360px前後 | 小さめスマホでボタン文言が折り返しても崩れないか |
| 390px前後 | 一般的なスマホ幅でCTAとフォームが読めるか |
| 768px前後 | タブレットや境界幅でメニューが破綻しないか |
| 1024px以上 | PC向けナビ、横並びCTA、フォーム幅が安定するか |
CSS読み込みを変えた後は、見た目のスクリーンショットだけでなく、フォーム送信、メニュー開閉、CTAクリック、スマホ幅の確認まで行います。
特に問い合わせページは、速度改善のために壊してはいけないページです。フォームCSSをページ限定にする場合でも、入力、確認、エラー、完了、通知メール、計測イベントまで確認します。
一度CSSを整理したら、その後は何を残しておけばよいですか?
なぜ分けたのか、どこで読んでいるのか、何を触ると危ないのかを残すのじゃ。速くするだけでなく、次の改修で壊れにくくするのが保守じゃ。
CSS読み込み最適化は、一度の作業で終わりではありません。WordPressは、記事追加、LP追加、フォーム追加、プラグイン更新、テーマ改修、計測タグ追加でCSSの状態が変わります。
保守しやすくするには、次の形に整理します。
| 整理対象 | 保守しやすい状態 |
|---|---|
| CSSファイル | 全体、部品、ページ固有、フォーム固有の役割が分かれている |
| handle名 | 何のCSSか分かる名前になっている |
| 条件分岐 | is_pageやテンプレート条件の理由が説明できる |
| dequeue設定 | 止めたCSS、止める条件、確認済みページが残っている |
| critical CSS | 生成元、対象ページ、更新手順が決まっている |
| preload | 対象リソースと理由が記録されている |
| 検証メモ | LCP/CLS/INP、フォーム、メニュー、CTAの確認結果がある |
避けたいのは、!importantで上書きを重ねる、使っていないCSSを残したままさらに追加する、ページごとの例外がどこにあるか分からない、という状態です。短期的には動いても、次の改修で崩れやすくなります。
保守しやすいCSS整理とは、CSS量を減らすだけでなく、読み込み理由、止めた理由、確認した導線を次の担当者が追える状態にすることです。
Bitlightでは、WordPress高速化を単なるスコア改善ではなく、保守改善として扱います。CSS読み込み、テーマ改修、プラグイン由来CSS、フォーム・メニュー・CTAの表示確認、Core Web Vitalsの再測定まで、壊さず改善する手順に分解できます。
CSS読み込みの整理は、技術的な軽量化と、問い合わせ導線を守る確認作業の両方なんですね。
その通りじゃ。WordPressは、速くするほど壊れやすい場所も見えてくるのじゃ。だから、CSSを減らすだけでなく、必要なCSSを必要な場所で読む設計にするのじゃ。
千葉県出身。10歳の頃からプログラミングを始め、ゲーム、Webサイト、ロボット、スマホアプリなどを制作。大阪大学基礎工学部情報科学科で情報工学と統計学を学び、大学時代はAIを研究。大学在学中にWeb広告代理店でのインターンや人材系Webサービスの立ち上げを経験し、卒業後はフリーランスエンジニアとしてGISシステム、データ基盤構築、Webシステムの開発に従事。10年以上のWebアプリ開発・データ分析経験を基に、2023年9月に株式会社ビットライトを設立し、現場業務の仕組み化からデータ基盤構築、データ活用支援までを一気通貫で支援。