ウェブパフォーマンスを考慮すれば、遅かれ早かれWordPressサイトのキャッシュを扱うことになります。WordPressは優れたCMSですが、特に質の高い静的サイトと比較すれば、最速のプラットフォームとは言えません。というのも、WordPressはPHPで構築されており、高速処理が行えないためです。PHP 8.0とPHP 8.1では、大幅な改善が行われていますが、適切にキャッシュを処理しなければ、サイトが超低速になってしまう可能性があります。

Kinstaでは、お客様に大事なビジネスに専念していただけるよう、ホスティングプラットフォームにキャッシュ機能を実装しています。キャッシュプラグインなしで、キャッシュ管理を最適化することができます。

WordPressのキャッシュとは

キャッシュは、あるリクエストからリソースを保存し、その後のリクエストにそのリソースを再利用する仕組みです。これによって、ページビューの生成に必要になる作業量を抑えることができます。

キャッシュの重要性はシンプルで、WordPressサイトを高速化し、ウェブサーバーの負荷を軽減できる点にあります。いかなるサイトであっても、できる限りキャッシュを活用するのがベストプラクティス。さらに、CDNキャッシュなら、WordPressホスティングとは別に静的リソースを保存できるため、ページビューの生成に必要なサーバーの帯域幅を削減することも可能です。

KinstaならWordPressキャッシュプラグインは不要

先にも触れましたが、Kinstaのホスティングプランには豊富なキャッシュ機能が付帯するため、複雑で扱いにくいキャッシュプラグインをインストールする必要がありません。「2024年 キャッシュプラグイン おすすめ」などと検索する手間も省け、大事な業務により多くの時間を充てることができます。

Kinstaには以下4種類のキャッシュがあり、すべてソフトウェアまたはサーバーレベルで自動処理されます。

他社からKinstaに移行したウェブサイトの多くでは、移行後すぐに読み込み時間が短縮されています。以下は、パフォーマンスが212.5%も向上した事例です(キャッシュプラグイン不使用)。

Kinstaに移行したWordPressサイトの読み込み時間
Kinstaに移行したWordPressサイトの読み込み時間

読み込み時間を短縮する要素は他にもありますが、その大部分を占めているのがキャッシュです。キャッシュプラグインが適切に設定されていないことが原因で速度が低下しているWordPressサイトは、数多く存在しています。例えば、WordPressサイトにW3 Total Cacheを設定する方法は、わかりにくく非常に複雑です。

お客様の声

Kinstaのパフォーマンスに関しては、多くのお客様から評価いただいています。Kinstaでサイトをホスティングすれば、キャッシュプラグインをインストールする必要はありません。

Kinstaに移行したら、読み込み時間が瞬時に37%短縮された(しかもキャッシュプラグインなし)

Google CloudとKinstaを組み合わせたWordPressホスティングの力に感動!

WordPressキャッシュの種類

WordPressのキャッシュにはいくつかの種類があります。各レイヤーの役割を理解することで、キャッシュに関連するエラーを解決しやすくなるため、サイト運営の効率化につながります。

バイトコードキャッシュ

バイトコードキャッシュは、コンパイルされたPHPコードを保存し、次回のアクセス時にコンパイルを省略できるようにするもの。Kinstaでは、PHP 7.3以降のすべてのリリースでOPcacheを有効にしています。

PHPファイルやスクリプトが処理する際、機械がその内容を認識できるよう、オペコードにコンパイルしなければなりません。OPcacheは、変換されたオペコードを保存し、次回以降にその特定のファイルやスクリプトが必要になった際、PHPがこのコンパイルの処理をスキップできるようにしてくれます。OPcacheを使用すると、PHPのパフォーマンスが劇的に向上されますが、同時にPHPファイルの変更がすぐに反映されないというデメリットも。これを考慮し、WordPressステージング環境ではOPcacheが無効になります。

OPcacheでPHPアプリが高速化される仕組みはこちらをご覧ください。

オブジェクトキャッシュ

オブジェクトキャッシュは、データベースクエリの結果を保存し、次回のアクセス時にその特定のデータが必要になった際、データベースに問い合わせることなく配信できるようにするものです。これによって、PHPの実行時間が短縮され、WordPressのデータベースへの負荷が軽減されます。

WordPressには、オブジェクトキャッシュ(WP_Object_Cache)が組み込まれていますが、1回分の読み込み用のオブジェクトしか保存されません。キャッシュの目的は、ページ読み込みの間に、同じ目的で何度もデータベースが照会されないようにすること。しかし、WordPressでキャッシュされたオブジェクトは、1回読み込まれると、使用されなくなります。WordPressのオブジェクトキャッシュは便利な機能ですが、複数回使用できないのが難点です。

WordPress組み込みのオブジェクトキャッシュを外部ソリューションに切り替えれば、/wp-content/ディレクトリにキャッシュスクリプトをドロップすることで、複数のページ読み込みでキャッシュを再利用することができます。例えば、W3 Total Cache のようなプラグインベースのオブジェクトキャッシュ機能を使用できます。

Kinstaをご利用の場合は、Redisアドオンを使用すると、PHP 8.0または8.1と併せてインストール可能です。Redisはオープンソースのインメモリデータ構造ストアで、データベース、キャッシュ、メッセージブローカーとして機能します。Redisを永続オブジェクトキャッシュとして使用する方法はこちらをご覧ください。

ページキャッシュ(サーバーキャッシュ)

ページキャッシュは、ページのHTML全体を保存し、WordPressがページを生成しなくても次回以降のページビューを生成できるようにするもの。

WordPressサイトを読み込むと、WordPressは大量のPHPファイルを処理し、データベースに何度も問い合わせなければなりません。特にほとんど更新されないページでは、これは余計な処理。各ページを一度だけ生成して保存し、キャッシュから配信する方がはるかに効率的です。これが、ページキャッシングの目的です。

ページキャッシングには、以下のメリットがあります。

  • 表示速度が大幅に向上される
  • サーバーの負荷が劇的に軽減され、大量のトラフィック処理が行えるようになる

Kinstaでは、ページキャッシュにnginx fastcgi cache moduleを採用しており、デフォルトで1時間ごとに失効するように設定されています。この有効期限は、必要に応じて、MyKinstaからいつでも変更可能です。「WordPressサイト」>(サイト名)>「キャッシュ」画面に移動して、「サーバーキャッシュ」タブの「キャッシュの有効期限を変更する」をクリックします。

サーバーキャッシュの有効期限を変更
サーバーキャッシュの有効期限を変更

キャッシュの有効期限を変更する」ウィンドウで任意の期間を選択し、「有効期限を変更する」をクリックして確定します。期間は1時間から1年までの間からお選びいただけます。頻繁に更新を行わないサイトでは、有効期限を長めに設定するとパフォーマンスに効果的です。

ページキャッシュ有効期限を選択
ページキャッシュ有効期限を選択

ページキャッシュは、標準的なWordPress、BuddyPress、WooCommerce、およびEasy Digital Downloadサイトですぐに動作するように設定されており、WordPress管理画面、WooCommerceの買い物カゴ、BuddyPressフォーラム(要ログイン)などのページは、自動的にページキャッシュからバイパスされます。高度にカスタマイズしているWordPressサイトでは、より細かな設定が必要になることがあります。

Kinstaのステージング環境では、ページキャッシュはデフォルトで無効になっていますが、テストの目的によっては役立つことも。この場合、MyKinstaでステージング環境のページキャッシュを有効化することも可能です。

CDNキャッシュ

CDN(コンテンツデリバリネットワーク)キャッシュは、ホスティングサーバーの場所から地理的に離れているユーザーにより高速にコンテンツを配信できるよう、サイトのファイル(JavaScript、CSS、メディアファイルなど)を保存します。誰かがサイトにアクセスすると、サーバーからではなくCDNから保存されたファイルが配信されます。CDNを使用するメリットはこちらをご覧ください。

CDNには、主に以下2つのメリットがあります。

  • サイトの読み込みに必要になるサーバーリソースを削減できる。CDNが処理を行うため、ウェブサーバーでの処理が不要に。
  • 世界中の拠点からリソースを配信することで、地理的に離れているユーザーに対してもパフォーマンスを向上させることができる。

CDNには、標準的なCDNとセキュリティ機能を搭載したCDNの2種類があります。それぞれの代表例は以下の通り。

  • 標準的なCDN:CloudFront
  • セキュリティ機能搭載のCDN:Kinsta CDN(Cloudflare)、Sucuri、Akamai(必要に応じて)

前者は、サイトのリソースにアクセスするために使用されるCDNのURLを作成して設定します。この手順はCDNサービスによって異なりますが、基本的には、静的リソースのURLがCDNのURLに変更され、リソースがCDNから取得されるという仕組みです。通常、JS、CSS、メディアファイルなどの静的ファイルのみをキャッシュします。

2つ目のタイプは、プロキシサーバーとして機能します。これは、すべてのリクエストがCDNサービスのサーバーを介してホスティングサーバーに到達することを意味します。CDNサービスのネームサーバーが使用され、サイトのDNSの完全管理が可能です。これにより、悪質なIPからのトラフィックを検出したり、DDoS対策を講じたり、CDNにすべてのページキャッシュを保存したりなど、標準的なCDNでは実現できないことが可能になります。KinstaのCDNは、プロキシのパフォーマンス/セキュリティサービスのCloudflareによって提供されています。

高度なCDNキャッシュ

CloudflareSucuriのようなプロキシサーバーCDNを使用すると、CDN上に完全なページキャッシュを生成することができます。すべてのページのHTMLをキャッシュすることで、サーバーでの処理が不要になるため、大量のトラフィックを抱えるサイトには画期的なソリューションになります。

  • Sucuri─キャッシュレベルを「Enabled」に設定すると、フルページキャッシュが有効される
  • Cloudflare─ページルールを設定し、キャッシュレベルを「Cache Everything」に設定すると、フルページキャッシュが有効化される

Kinstaのキャッシュレスポンスヘッダー

HTTPレスポンスヘッダーを確認して、ページがKinstaのキャッシュから配信されているかどうかを見ることができます。Kinstaのお客様のサイトには、X-Kinsta-Cacheヘッダーが追加されます。キャッシュされていないページに初めてアクセスすると、以下のようにMISSが表示されます。

X-Kinsta-Cache「MISS」
X-Kinsta-Cache「MISS」

同じページへの2回目のリクエストでは、X-Kinsta-Cacheヘッダーの値はHITに変わり、ページがキャッシュから配信されていることがわかります。

X-Kinsta-Cache「HIT」
X-Kinsta-Cache「HIT」

関連して、Google PageSpeed Insightsで満点を獲得する方法はこちらをご覧ください。Kinstaでは、さらにサーバーレベルでキャッシュを最適化しているため、以下の警告が自動的に修正されます。

  • 圧縮の有効化(Cloudflare経由でBrotliをデフォルトで有効化。GZIP圧縮はフォールバックとして利用可能)
  • サーバー応答時間の短縮(デフォルトで最適化されておりGoogleの基準を満たしている)
  • Expiresヘッダー(サーバーレベルでキャッシュヘッダーが設定されているため有効化が不要)

Kinstaのテストサイトでは、キャッシュプラグインなしでPageSpeed Insightsで100点満点を記録しています。WordPressのキャッシュは、すべてサーバーレベルで処理されています。

PageSpeed Insightsのテスト結果
PageSpeed Insightsのテスト結果

Kinstaのキャッシュ設定

ここからは、Kinstaでのキャッシュ管理方法についてご紹介します。例えば、トラブルシューティングを行う際には、キャッシュのクリアが基本操作になることがあります。キャッシュのクリアは、Kinstaのコントロールパネル「MyKinsta」またはWordPress管理画面(Kinsta MUプラグイン)で実行可能です。

WordPressのキャッシュをクリアする

MyKinstaでサーバーキャッシュをクリアするには、「WordPressサイト」>(サイト名)>「キャッシュ」画面に移動し、「サーバーキャッシュ」タブの「キャッシュをクリア」をクリックするだけで完了です。

MyKinstaでWordPressのキャッシュをクリア
MyKinstaでWordPressのキャッシュをクリア

なお、WordPressステージング環境では、キャッシュはデフォルトで無効になっています。ステージング環境でページキャッシュをテストするには、同様に「サーバーキャッシュ」タブで有効化することができます。キャッシュの有効後は、ステージング環境でも本番環境と同じ手順でキャッシュをクリアできます。

WordPress管理画面(Kinsta MUプラグイン)

MyKinsta以外にも、WordPress管理画面から直接キャッシュをクリアすることも可能です。Kinstaのお客様のサイトには、デフォルトでKinsta MU(Must-Use)プラグインがインストールされます(厳密にはキャッシュプラグインだが、サーバーレベルで動作するため、一般的なプラグインとは異なる)。

WordPress管理画面の左メニューにある「Kinsta Cache」をクリックすると、以下のような画面が表示され、ワンクリックですべてのキャッシュ、サイトキャッシュ、オブジェクトキャッシュ、CDNキャッシュをクリアできます。Kinsta MUプラグインは、Kinstaのプラットフォームでサイトがスムーズに動作するために必須のプラグインであり、ページキャッシュの有効期限はデフォルトで1時間に設定されています。

WordPress管理画面のKinsta MUプラグイン
WordPress管理画面のKinsta MUプラグイン

上部のツールバーからより素早くキャッシュをクリアすることも可能です。

WordPress管理画面の上部ツールバーからキャッシュをクリア
WordPress管理画面の上部ツールバーからキャッシュをクリア

また、独自のキャッシュルールを設定することもできます。サイトの構成によっては、キャッシュルールの追加が必要になり、カスタムパスを追加して、サイトが更新されるたびにパージすることができます。

特定のページやURLをキャッシュから除外するには、Kinstaのカスタマーサポートまでご連絡ください。

ステージング環境

Kinstaのステージング環境では、ページキャッシュがデフォルトで無効になっているのは先に触れた通り。これにより、編集するたびに手動でキャッシュをクリアする必要がなくなり、WordPressサイトのデバッグと開発が簡素化されます。また、例えばステージング環境でキャッシュされたページの正確な速度テストを実行したい場合には、ページキャッシュを有効化することも可能です。

ページキャッシュを有効にするには、「WordPressサイト」>(ステージング環境名)>「キャッシュ」画面に移動して、「サーバーキャッシュ」タブの「利用する」をクリックします。有効化すると、その下のセクションにある「キャッシュをクリア」をクリックして、クリアすることができます。

キャッシュの分析

MyKinstaの「分析」画面では、WordPressサイトが適切にキャッシュされているかどうかを確認できます。「キャッシュ推移」セクションでは、各リクエストのステータス(HIT、BYPASS、MISS、EXPIRED)が表示されます。過去24時間、7日間、30日間でデータを絞り込むことができます。

キャッシュ推移
キャッシュ推移

キャッシュ比率」チャートは、キャッシュの比率を一目で把握できます(キャッシュからのリクエストは、多ければ多いほど良い)。

キャッシュ比率
キャッシュ比率

リクエスト数上位のキャッシュバイパス一覧」セクションでは、どのリクエストがキャッシュから配信されていないかを確認することができます。cronジョブ、admin-ajaxリクエスト、ECサイト決済ページ、クエリ文字列、UTMパラメータなどを含むのが一般的です。

リクエスト数上位のキャッシュバイパス"
リクエスト数上位のキャッシュバイパス

404エラーページのキャッシュ

WordPressサイト、特に大規模な会員制サイトでは、想像を超える404エラーが発生しており、404エラーページに大量のリソースを消費してしまう可能性があります。これは、移動したページのリダイレクト設定を忘れているか、SNSで共有した投稿に誤ったリンクが含まれているなどが原因になります。訪問者が404エラーページにたどり着く要因もさまざまです。また、404エラーページには、代替の検索結果を引き出すクエリが含まれていることが多く、それがデータベースにヒットすることもあります。

WordPressサイトのパフォーマンスを考慮し、Kinstaでは404エラーページを15分間キャッシュするように設定しています。X-Kinsta-Cacheの値は、キャッシュから配信されていることを意味するHITを示し、404エラーが発生したページを作成すれば、キャッシュはすぐにパージされます。

MyKinstaの「分析」画面の「レスポンス」タブにある「400番台エラーの内訳」セクションで、404エラーの発生状況も確認することができます。

404エラーの内訳
404エラーの内訳

なお、404エラーページは、すべてキャッシュされるわけではありません。404エラーには、PHPページからのリクエストで404エラーページに到達した場合、存在しないファイルや画像が移動された場合の2種類あります。Kinstaでは、前者のみをキャッシュし、後者は別の方法で処理されます。

リクエスト数上位の404エラー一覧」セクションで、エラーの発生場所と原因を確認することができます。

キャッシュされている404エラーページ
キャッシュされている404エラーページ

また、Google Search Consoleで404エラーを確認したり、404エラーのログを記録したりするRedirectionのようなサードパーティプラグインを使用するのも手です。ただし、この手のプラグインはパフォーマンスに影響を与えるため、サーバーレベルのツールを利用する方が得策です。

データベースへの過剰な問い合わせを回避する簡単な404テンプレートを作成するのもおすすめです。

POSTリクエストはキャッシュをバイパス

分析とキャッシュの統計は、できるだけ正確であってほしいもの。パフォーマンスの問題をトラブルシューティングする際は、キャッシュのHIT率を確認するのが一般的です。Kinstaでは、POSTリクエストもレポートで確認することができます。

POSTリクエストは、高度なセットアップを除き、キャッシュすることができません。したがって、X-Kinsta-Cacheのヘッダー値は、BYPASSになります。このリクエストは、ブログ記事やキャッシュ可能な投稿と混同しないようにご注意ください。POSTリクエストは、サーバーにデータを送信するために使用されます。例えば、フォーム送信時のデータは、HTTPリクエストボディに格納されます。

まとめ

今回は、WordPressのキャッシュについて、そしてKinstaで利用可能な4種類のキャッシュ(バイトコードキャッシュ、オブジェクトキャッシュ、サーバーキャッシュ、CDNキャッシュ)についてご紹介しました。

WordPressのキャッシュプラグイン選びと設定に費やす時間を削減し、今すぐサイトを高速化させるなら、KinstaのWordPress専用マネージドホスティングをお試しください。5年連続でReviewSignalの一流WordPressホスティングパフォーマンス部門で受賞している理由は、高度に調整されたGoogle Cloud Platformの独占採用により、超高速読み込みが実現されることにあります。パフォーマンス最適化は、Kinstaにお任せください。

Brian Jackson

Brianの最大の情熱の一つは10年以上使用してきたWordPressです。複数のプレミアムプラグインさえ開発しています。Brianの趣味はブログや映画やハイキングなどです。TwitterでBrianとつながりましょう。