2026年5月21日

2026年5月21日

WordPressキャッシュプラグインの設定方法(W3 Total Cache・LiteSpeed Cache・WP Rocket)

キャッシュは、一度作ったページやデータを保存しておき、次のアクセスで使い回す仕組みです。WordPress は通常、アクセスのたびに PHP を動かし、データベースに問い合わせてページを組み立てます。キャッシュを使うとこの処理を省けるので、表示が速くなり、サーバーの負荷も下がります。

この記事の設定と確認の結果は、2026年11月時点の WordPress 7.1、W3 Total Cache 2.11、LiteSpeed Cache 7.9、Redis Object Cache 3.0、WooCommerce 11.2 で確かめたものです(WP Rocket は有料のため、公式ドキュメントで確認した内容です)。

キャッシュの種類

種類 保存するもの 主な手段
ページキャッシュ ページの HTML 全体 キャッシュプラグイン、サーバーのキャッシュ機能
ブラウザキャッシュ 画像・CSS・JavaScript を閲覧者のブラウザに保存 HTTP ヘッダー(プラグインや .htaccess で設定)
オブジェクトキャッシュ データベースの問い合わせ結果など Redis・Memcached と専用プラグイン
トランジェント プラグインやテーマが保存する一時データ Transients API(set_transient() など)

表示速度にいちばん効くのはページキャッシュです。ログインしていない閲覧者には、保存済みの HTML をそのまま返します。

プラグインの選び方

  • サーバーが LiteSpeed(OpenLiteSpeed を含む)の場合: LiteSpeed Cache を使います。ページキャッシュはサーバー側で動くため、LiteSpeed のサーバー(または QUIC.cloud の CDN)でないと使えません。Apache や Nginx では、画像の最適化や CSS・JavaScript の圧縮などの一般機能だけが使えます。
  • Apache・Nginx の場合: 無料なら W3 Total Cache や WP Super Cache、有料なら WP Rocket が候補です。
  • レンタルサーバーのキャッシュ機能がある場合: サーバー側のキャッシュ機能が使えるなら、まずそれを使い、プラグインのページキャッシュと二重にならないようにします。

ページキャッシュのプラグインは1つだけにします。2つ以上を同時に有効にすると、どちらのキャッシュが返っているのか分からなくなり、更新が反映されない原因になります。比較は WordPressキャッシュプラグインの比較 を参照してください。

W3 Total Cacheの基本設定

  1. 「プラグイン」→「プラグインを追加」で「W3 Total Cache」を検索し、インストールして有効化します。
  2. 管理画面の「パフォーマンス」→「一般設定」を開きます。
  3. 「ページキャッシュ」の項目で有効にし、方式に「ディスク: 強化」を選びます。
  4. 「すべての設定を保存」を押します。

「ディスク: 強化」では、キャッシュした HTML を wp-content/cache/page_enhanced/ に保存し、.htaccess に書き込んだ規則で Apache から直接返します。そのため W3 Total Cache は、wp-config.php に define('WP_CACHE', true); を、.htaccess にキャッシュ用の規則を書き込みます(試した環境でも、有効化と設定の後に両方のファイルに追記されていました)。wp-config.php を 440 などの読み取り専用にしている場合は、設定の間だけ書き込みを許可します。

試したところ、ログインしていない状態で同じページを開くと、2回目以降はキャッシュから返り、HTML の末尾に次のようなコメントが付きました。

<!-- Performance optimized by W3 Total Cache. ...
Page Caching using Disk: Enhanced
Served from: localhost @ 2026-11-10 10:30:36 by W3 Total Cache -->

ログイン中のユーザーにはキャッシュを返さない設定が初期状態で有効です。キャッシュを消すときは、管理バーの「パフォーマンス」→「すべてのキャッシュを消去」を使うか、WP-CLI で次のコマンドを実行します。

wp w3-total-cache flush all

詳しい設定は W3 Total Cacheの設定方法 にまとめています。

LiteSpeed Cacheの基本設定

  1. 「プラグイン」→「プラグインを追加」で「LiteSpeed Cache」を検索し、インストールして有効化します。
  2. 管理画面の「LiteSpeed Cache」→「キャッシュ」を開きます。
  3. 「キャッシュを有効にする」をオンにして保存します。

LiteSpeed のサーバーでページがキャッシュから返ると、応答ヘッダー X-LiteSpeed-Cache に hit が付きます。「ログインしたユーザーをキャッシュ」は初期状態でオンで、ログイン中のユーザーにはユーザーごとの別のキャッシュ(プライベートキャッシュ)が使われます。キャッシュから外したい URL は、同じ画面の「除外」タブの「URIs をキャッシュしない」に書きます。

キャッシュをすべて消すときは、管理バーのメニューか、WP-CLI で次のコマンドを使います。

wp litespeed-purge all

詳しくは LiteSpeed Cacheの設定方法 を参照してください。

WP Rocketの基本設定

WP Rocket は有料のプラグインで、公式サイトで購入してダウンロードした ZIP ファイルを「プラグインを追加」→「プラグインのアップロード」から入れます。公式ドキュメントによると、ページキャッシュは有効化した時点で自動的に有効になります。設定画面は「設定」→「WP Rocket」で、キャッシュから外す URL や Cookie は「Advanced Rules」の項目で指定します。

設定の詳細は WP Rocketの設定方法 を参照してください。

キャッシュしてはいけないページを外す

カート、決済、会員ページなど、閲覧者ごとに内容が変わるページをキャッシュすると、ほかの人のカートの中身が表示されるといった問題が起きます。

WooCommerceのページ

WooCommerce は、カート・決済(チェックアウト)・マイアカウントのページで定数 DONOTCACHEPAGE を定義します(WooCommerce 11.2 のソースで確認)。W3 Total Cache、LiteSpeed Cache、WP Rocket はいずれもこの定数を見てページをキャッシュしないので、通常は追加の設定なしでこれらのページは外れます。

WooCommerce の公式ドキュメントは、念のためキャッシュプラグインの設定でもカート・マイアカウント・チェックアウトのページを除外し、次の Cookie を持つ閲覧者にはキャッシュを返さないよう勧めています。

  • woocommerce_cart_hash
  • woocommerce_items_in_cart
  • wp_woocommerce_session_

独自のページを外す

フォームの確認画面など、自分で作ったページをキャッシュから外すときも、同じ定数を使えます。子テーマの functions.php などに書きます。

<?php
// スラッグが contact-confirm の固定ページをページキャッシュの対象から外す
add_action( 'template_redirect', function () {
	if ( is_page( 'contact-confirm' ) && ! defined( 'DONOTCACHEPAGE' ) ) {
		define( 'DONOTCACHEPAGE', true );
	}
} );

試したところ、W3 Total Cache ではこのページのキャッシュファイルが作られず、HTML 末尾のコメントに「DONOTCACHEPAGE constant is defined」と表示されました。

ただし、この定数を見るのは WordPress の中で動くプラグインだけです。Nginx の FastCGI キャッシュや CDN など、WordPress の外でキャッシュしている場合は、そちらの設定で URL を除外します。

Redisでオブジェクトキャッシュを使う

オブジェクトキャッシュは、データベースの問い合わせ結果などをメモリに保存します。ページキャッシュが効かないログイン中の画面や管理画面、WooCommerce のカートなどでも効果があります。VPS など、Redis をインストールできるサーバーで使います(Ubuntu の例)。

sudo apt install redis-server php-redis
sudo systemctl enable --now redis-server
redis-cli ping   # PONG と返れば動いている

wp-config.php の「That's all, stop editing!」(日本語版では「編集が必要なのはここまでです」)の行より前に、接続先を書きます。

<?php
define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_PREFIX', 'example_com:' ); // 1台の Redis を複数サイトで使うときはサイトごとに変える

次に、プラグイン「Redis Object Cache」をインストールして有効化し、オブジェクトキャッシュを有効にします(WP-CLI の例)。

wp plugin install redis-cache --activate
wp redis enable
wp redis status

試したところ、wp redis status で Status: Connected と表示され、wp-content/object-cache.php(ドロップイン)が置かれました。この状態ではトランジェントもデータベースではなく Redis に保存されます(wp transient type で確認できます)。PHP の Redis 拡張(php-redis)がない環境でも、プラグインに含まれる Predis で接続できました。

キャッシュを消すときは wp cache flush を使います。詳しくは WordPressでRedisキャッシュを設定する方法 を参照してください。

重い処理の結果をトランジェントで保存する

プラグインやテーマで、外部 API の取得や重いクエリを毎回実行している場合は、結果をトランジェントに保存すると負荷を減らせます。

<?php
/**
 * 閲覧数(カスタムフィールド _myprefix_views)の多い投稿のIDを返す(1時間キャッシュ)
 */
function myprefix_get_popular_post_ids( $limit = 5 ) {
	$limit     = absint( $limit );
	$cache_key = 'myprefix_popular_' . $limit;

	$ids = get_transient( $cache_key );
	if ( false !== $ids ) {
		return $ids;
	}

	$ids = get_posts(
		array(
			'post_type'      => 'post',
			'post_status'    => 'publish',
			'posts_per_page' => $limit,
			'meta_key'       => '_myprefix_views',
			'orderby'        => 'meta_value_num',
			'order'          => 'DESC',
			'fields'         => 'ids',
			'no_found_rows'  => true,
		)
	);

	set_transient( $cache_key, $ids, HOUR_IN_SECONDS );
	return $ids;
}

// 投稿を保存したらキャッシュを消す
add_action( 'save_post_post', function ( $post_id ) {
	if ( wp_is_post_revision( $post_id ) || wp_is_post_autosave( $post_id ) ) {
		return;
	}
	foreach ( array( 5, 10 ) as $limit ) {
		delete_transient( 'myprefix_popular_' . $limit );
	}
} );

トランジェントの使い方は WordPressプラグインでトランジェントを使う方法 で詳しく説明しています。

キャッシュが効いているか確かめる

ページキャッシュは、ログインしていない状態で確かめます。管理画面にログインしたブラウザでは、キャッシュされていないページが表示されることが多いからです。

# 2回続けて取得し、応答ヘッダーを比べる
curl -sI https://example.com/
curl -sI https://example.com/

# HTML の末尾(W3 Total Cache などのコメント)を見る
curl -s https://example.com/ | tail -n 3
  • LiteSpeed Cache: 2回目の応答に X-LiteSpeed-Cache: hit があればキャッシュから返っています。
  • W3 Total Cache: HTML 末尾のコメントの「Served from」の時刻が、2回目以降も1回目と同じならキャッシュから返っています。
  • CDN を使っている場合は、CDN の応答ヘッダー(Cloudflare なら cf-cache-status)も確認します。

トランジェントとオブジェクトキャッシュは WP-CLI で確認できます。

wp transient list --human-readable   # データベースに保存されたトランジェントの一覧
wp transient delete --expired        # 期限切れのトランジェントを削除
wp cache type                        # 使われているオブジェクトキャッシュの種類

運用で気をつけること

  • 更新後はキャッシュを消す: テーマやプラグインを更新した後、表示が変わらないときはキャッシュを消してから確かめます。
  • ページ内のノンス: キャッシュされた HTML には、作られた時点のノンス(フォームや Ajax の確認用の値)が残ります。ノンスの有効期間(標準で最長24時間)より長くキャッシュすると、フォームの送信などが失敗することがあります。
  • CSS・JavaScript の圧縮や結合: キャッシュプラグインの最適化機能で表示が崩れたら、その機能だけを止めて原因を切り分けます。

関連記事

お気軽にご相談ください

お見積りへ お問い合わせへ
▲