2026年5月20日
2026年5月20日
キャッシュプラグインで古いページが表示される場合の解決方法
はじめに
記事を更新したのにサイトに反映されない、古いページが表示されるという問題はキャッシュプラグインが原因のほとんどのケースです。キャッシュのクリア方法と、更新後に自動でキャッシュが削除される設定方法を解説します。
症状・原因
- 記事を更新したのに古い内容が表示される
- 管理画面では更新済みなのに訪問者に古いページが見えている
- CSSを変更したのにデザインが変わらない
- ログイン済みの自分には見えるのに他のユーザーには反映されない
解決手順
ステップ1:ブラウザキャッシュとサーバーキャッシュを区別する
まず問題の切り分けを行います:
# シークレットモードで確認(ブラウザキャッシュを排除)
# 変更が反映される → ブラウザキャッシュが原因
# 変更が反映されない → サーバーキャッシュが原因
# curlでキャッシュヘッダーを確認
curl -I https://example.com/ | grep -i "cache\|age\|x-cache"
ステップ2:各キャッシュプラグインのクリアコマンド
# WP Super Cache
wp super-cache flush
# W3 Total Cache
wp w3-total-cache flush all
# LiteSpeed Cache
wp litespeed-cache purge all
# WP Rocket(WP-CLIアドオン必要)
wp rocket clean --confirm
# オブジェクトキャッシュ
wp cache flush
# トランジェント(一時データ)
wp transient delete --all
ステップ3:投稿更新時に自動でキャッシュを削除する
ほとんどのキャッシュプラグインは投稿更新時に自動でキャッシュを削除しますが、設定を確認してください:
WP Super Cache → 詳細 →「投稿が公開されたときにキャッシュをクリア」✓
WP Rocket → キャッシュ →「キャッシュの有効期限」を短くする
フックで手動削除する場合:
// functions.php — 投稿保存時にキャッシュをクリア
add_action('save_post', function(int $post_id) {
if (function_exists('wp_cache_post_change')) {
wp_cache_post_change($post_id); // WP Super Cache
}
if (function_exists('w3tc_flush_post')) {
w3tc_flush_post($post_id); // W3 Total Cache
}
if (class_exists('\LiteSpeed\Purge')) {
\LiteSpeed\Purge::purge_postPage($post_id); // LiteSpeed Cache
}
});
ステップ4:特定URLのキャッシュを除外する
頻繁に更新するページはキャッシュから除外します:
WP Super Cache → 詳細 → キャッシュしない URL:
/news/
/stock/
/live/
WP Rocket → 詳細ルール → キャッシュしないURL:
/news/(.*)
ステップ5:CDNのキャッシュもクリアする
CloudflareなどCDNを使っている場合はCDN側のキャッシュもクリアが必要です:
# Cloudflare APIでキャッシュをパージ
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache" \
-H "Authorization: Bearer {api_token}" \
-H "Content-Type: application/json" \
--data '{"purge_everything":true}'
注意事項
- キャッシュを全クリアするとサーバー負荷が一時的に増加します。アクセスの少ない時間帯に実施してください
- 有効期限(キャッシュの生存時間)を短くしすぎるとキャッシュの効果が薄れます
- Cloudflareの「開発モード」は3時間後に自動でオフになります
まとめ
古いページが表示される場合はまずシークレットモードで確認し、サーバーキャッシュが原因なら wp cache flush と各プラグイン固有のクリアコマンドを実行してください。save_post フックで更新時に自動クリアする仕組みを入れると再発防止になります。