WordPressサイトのパフォーマンス最適化は、サイトの種類によって異なります。5つのページで構成されたシンプルなWordPressサイトと、大規模なWooCommerceサイトでは、動作はまったく違うためです。会員制サイトやコミュニティサイトの場合は、セットアップや設定に誤りがあれば、500番台エラーやサイトのダウン、ページの表示速度の低下などの問題が発生してしまうため、ベストプラクティスに従うことが重要です。
今回は、WordPressで会員制サイトを作成する際の注意事項をご紹介し、優れたパフォーマンス、スケーラビリティ、持続性を確保するための最適化のヒントを見ていきます。
会員制サイトの例
一般的なWordPressの会員制サイトやコミュニティサイトには、以下のようなものがあります。
- LMS(学習管理システム)を中心に構築され、会員にオンライン講座を販売するウェブサイト(近年人気の高い分野で優れたLMSプラグインもあり)
- 会員がさまざまなトピックについて話し合うためのフォーラム(bbPressまたはBuddyPress)中心のウェブサイト
- 人気のサードパーティ会員制プラグイン(MemberPressやUltimate Membership Proなど)で構築された会員制サイト
- SNSに焦点を当てたコミュニティサイト
- WooCommerceやEasy Digital Downloadsなどを使用したECサイト
会員制サイトが一般的なサイトと異なる理由
会員制サイトのベストプラクティスをご紹介する前に、WordPressの会員制サイトが一般的なブログサイトや企業サイトと異なる理由を見ておきます。
1. キャッシュできないコンテンツが多い
会員制サイトには、キャッシュできないコンテンツや継続的に変更されるページが多く含まれています。会員のログインページ(サイトの規模によっては常にアクセスされる可能性も)、デジタル商品やオンライン講座の決済ページ、掲示板などは一般にキャッシュできません。
さらに、標準的なWordPressサイトでは、ログイン中のユーザーの管理画面もキャッシュされません。数名の投稿者や管理者で構成されているサイトでは問題ありませんが、数千人の会員が管理画面にアクセスするようになると、サーバー上のキャッシュからサービスを提供できないため、すぐにパフォーマンスの問題が発生します。したがって、会員制サイトには、高負荷を支える性能とアーキテクチャが必要になります。共用サーバーを利用している場合、サイトはすぐに機能不全に陥ります。
Kinstaでは、専用コントロールパネルMyKinstaの分析画面で、バイパスされているキャッシュを確認することができます。以下は、リクエストの大部分がキャッシュから提供されていないサイトの例です。
2. 同時アクセスが多い
会員制サイトで懸念されるのは、多数のユーザーによる同時アクセスとセッションです。情報サイトや企業サイトでは、5〜10分程度滞在して必要な情報を閲覧するのに対し、会員制サイトでは、例えばユーザーがオンライン講座の受講に何時間も滞在することも珍しくありません。このため、同時アクセスは瞬く間に増加します。
3. クエリが複雑になる
会員制サイトは通常より複雑なクエリを生成するため、MySQLデータベースから情報を取得する際の待ち時間が長くなります。これは会員制サイトのような動的なサイトでは稼働部分が多く、大量のデータを抱える傾向にあるためです。またナビゲーションを検索クエリに大きく依存しているサイトや、WP_Query
を使用しているサイトでも待ち時間が生じる可能性があります。
多数のユーザーが同時かつ継続的にデータベースにクエリを実行すれば、その負荷の高さは想像できるはず。
4. 大量のデータを保存している
会員制サイトには、多くのデータが保存されるため、適切に管理しなければ、ディスク使用量がすぐに膨れ上がります。動画、講座、会員情報、プロフィール情報、ディスカッション、デジタルダウンロードなどのデータは、時とともに蓄積されていくもの。他にもあらゆるデータが増えていきます。
WordPress会員制サイトのベストプラクティス
Kinstaでは、多くの会員制サイトをホスティングしており、日々エンジニアがお客様とやり取りをしています。Kinstaは、サイトの種類を問わず、ウェブパフォーマンスのベストプラクティスに従うことを推奨していますが、会員制サイトの場合はさらなる対策が必要になる可能性があります。ここからは、サイトのパフォーマンスと訪問者の体験を最大化するためにできることをご紹介します。
1. パフォーマンス重視のWordPressホスティングを利用する
これは抜本的な対策となりますが、優れたWordPressホスティングを選ぶことは非常に重要です。会員制サイトのパフォーマンスの問題の多くは、基盤となるホスティングの乗り換えで解決されることが多々あります。他社サービスからKinstaに移行した会員制サイトの多くも、移行後劇的にパフォーマンスが改善されています。Kinstaは、設立当初からサイトを支えるインフラから採用するエンジニアまで、企業全体でパフォーマンスを重視しています。
会員制サイトを高速化するKinstaのホスティング
Kinstaでは、Google Cloud Platformを独占利用した最初のマネージドWordPressホスティングです。世界37箇所のデータセンターを提供しているため、訪問者に最も近いデータセンターを選択し、レイテンシとTTFBを短縮することができます。一般的なホスティングサービスがGoogleのスタンダードティアネットワークを使用しているのに対し、Kinstaはパフォーマンスにこだわり、Googleのプレミアムティアネットワークのみを利用。後者は距離とホップを最小限に抑えるように設計されており、より速く、より安全なデータ転送を実現します。
お客様のWordPressサイトのセキュリティを最大限強化するために、Google Cloudのエンタープライズレベルのファイアウォールも利用しています。ウェブサーバーレベルでソフトウェアベースのファイアウォールを使用する一般的なホスティングとは異なり、Kinstaのファイアウォールは、仮想マシンのネットワークの外側にあるGoogleのネットワークエッジに設置されています。これにより、悪意のあるトラフィックがネットワークに侵入する前にブロックし、ロードバランサーや仮想マシンの負荷を軽減することができます。
Kinstaのホスティングプラットフォームは、従来のホスティングの枠を超え、共用サーバーやVPS(仮想専用サーバー)、専用サーバーとは大きく異なります。コンテナ化にLinuxコンテナ(LXC)とLXDを使用し、各サイトは、必要なソフトウェアリソース(Linux、nginx、PHP、MySQL)を備えたコンテナで実行されます。完全に専用のリソースが確保されるため、他のサイトと共有されることは一切ありません。
また、すべてのプランでGoogle CloudのC2およびC3D仮想マシンをご利用いただけます。
C2(コンピュータ最適化)ファミリーマシンは、最新のIntel Xeonスケーラブルプロセッサを搭載。3.8GHzのサステインオールコアターボで動作可能です。そして最新のC3Dシリーズは、エンタープライズレベルのパフォーマンスと信頼性を提供する第4世代AMD EPYC™プロセッサが搭載されています。高パフォーマンスな仮想マシンにより、会員制サイトで頻繁に発生するキャッシュされていないリクエストやデータベースクエリをより高速に実行できるようになり、顧客の体験が向上します。
また、突然のトラフィック急増にも対応できるスケーラブルなインフラストラクチャの恩恵も受けることができます。他のホスティングサービスが設ける制限を気にすることなく、会員制サイトを成長させることができます。
Kinstaが他のサービスと一味違う理由はこちらで詳しくご紹介しています。
2. 最新バージョンのPHPを使用する
PHPの最新バージョン、できればPHP 8.3を使用しましょう。多くのサイトでは、これだけでパフォーマンスが向上します。
Kinstaではこれを考慮し常に最新バージョンをサポートしています。
PHP 8.1、8.2、8.3のパフォーマンスベンチマークを実施したところ、いずれの条件でも最新であるPHP 8.3が最速であることがわかりました。
現在ご利用のWordPressホスティングでPHP 8.0以上を使用できない場合は、ホスティングの乗り換え時期です。Kinstaでは現在、PHP 8.1, 8.2 and 8.3をご利用いただけます。MyKinstaの「PHPエンジン」セクションでワンクリックで変更可能です。
会員制サイトと最新バージョンのPHPに互換性の問題がある場合は、PHP 8以降のパフォーマンスの恩恵を考慮すると、(最新バージョンをサポートしていない)プラグインやテーマの開発元に問い合わせるか、WordPress開発者を雇用して問題を修正することをおすすめします。
3. オブジェクトキャッシュを利用する
キャッシュはサイトを高速化し、ウェブサーバーの負荷を軽減します。キャッシュプラグインを使用している場合でも、サーバーレベルでキャッシュが実装されているKinstaのようなホスティングを利用している場合でも、会員制サイトでは、一歩進んだキャッシュ─オブジェクトキャッシュが必要になります。
オブジェクトキャッシュは、データベースへのクエリの結果を保存し、次に特定のデータが必要になった際に、データベースへのクエリなしでキャッシュから配信できるようにします。これにより、PHPの実行時間が短縮され、データベースへの負荷が軽減されます。これは会員制サイトのような動的サイトで特に重要です。WordPressでオブジェクトキャッシュを実装するには、いくつか方法があります。
- W3 Total Cacheのようなサードパーティのキャッシュソリューション
- Redis(推奨)
- Memcached
Kinstaでは、Redisアドオンを提供しているため、会員制サイトで永続オブジェクトキャッシュをフル活用することができます。一度設定されると、Kinsta MUプラグインによって、WordPress管理画面のツールバーにキャッシュのクリア機能が実装されます。これをクリックするだけで、ページキャッシュとサイト上で有効なオブジェクトキャッシュの両方をクリアすることができます。
ログイン中のユーザー向けに特定のページやURLをキャッシュすることも可能ですが、この操作は複雑になるため、ご希望の場合はカスタマーサポートまでご相談ください。
4. WordPress検索機能を強化する
会員制サイトが成長するにつれて、WordPress標準の検索機能だけでは事足りなくなっていきます。WP_Queryを多用しているサイトや、ナビゲーションに検索を大きく依存しているサイト、あるいは投稿数が多いサイトでは、検索クエリにかかる時間が長くなり、パフォーマンスの問題に直面します。そこで役立つのが、Elasticsearchのような検索エンジンです。
サイトのデータベースのコンテンツのインデックスを構築し、Elasticsearchを使用してこのインデックスを検索すると、MySQLクエリよりも圧倒的に高速に実行することができます。
5. 軽量な404エラーページを作成する
会員制サイトでは、404エラーが頻繁に発生するものです。Kinstaをご利用の場合は、MyKinstaの分析画面でどのくらい404エラーが発生しているかを把握することができます。
Google Search ConsoleやRedirectionのようなサードパーティプラグインでも確認可能です。ただし、プラグインはパフォーマンスに影響を与えるため、サーバーレベルのツールを使用するのが理想的です。
404エラーが厄介なのは、リソースを消費する点です。会員制サイトの場合は特に、重たい404エラーページは避けたいところ。したがって、可能であればデータベースへの問い合わせが不要な軽量な404エラーテンプレートを作成しましょう。もちろん、404エラーはユーザー体験も損なうため、きちんと時間をとって解決してください。
軽い404エラーページを作成することに加えて、404エラーページ用のキャッシュルールを実装するのもおすすめです。Kinstaでは、nginxの設定によりデフォルトで404エラーページを15分間キャッシュするため、この作業は不要です。また、キャッシュされた404エラーページと同じURLを持つページが作成されると、それを検出してキャッシュをパージするようになります。WordPressサイトにキャッシュ可能な404エラーページがない場合は、ホスティング会社に相談して、ウェブサーバーにこの機能を追加してみてください。
6. ワーカープロセスを増やす
ワーカープロセスは、Kinstaを含む多くのホスティング会社が制限しています(共用サーバーでは、CPUやRAMが制限されるのが一般的)。
ワーカープロセスは、サイトが同時に処理できるリクエストの数を決定するものです。キャッシュで提供できないリクエストは、ワーカープロセスによって処理されます。例えば、2つのワーカープロセスが付属するサイトに同時に4件のリクエストが来た場合、2件のリクエストが処理されている間、残りの2件は最初の2件の処理が終わるまで待機することになります。
WordPressの会員制サイトにおける最大の問題の一つは、キャッシュされていないリクエストの数であることは先に触れたとおり。このため、ワーカープロセスの数が非常に重要です。会員制サイトでは、すべてのリクエストが遅延なく処理され、正常に完了するようにするためにワーカープロセスの追加が必要になります。
ワーカープロセスの上限を超えると、キューは古いリクエストを押し出すため、500エラーを引き起こす可能性もあります。Kinstaでは、ワーカープロセスの数はホスティングプランによって異なります。自分のサイトに必要なワーカープロセスの数がわからない場合はこちらを参考にしてみてください。また、営業部門までお気軽にご相談いただくことも可能です。
7. データベースのメンテナンスを定期的に行う
定期的なデータベースのメンテナンスは、会員制サイトだけでなく、すべてのサイトに欠かせません。メンテナンスを怠ると、ある日突然サイトが停止してしまうこともあり得ます。
autoloadデータのクリーンアップ
autoload(自動読み込み)データは、WordPressサイトのすべてのページで読み込まれるデータで、wp_options
テーブルに保存されます。大規模なサイトでは、このテーブルがすぐに制御不能になることがあります。autoloadデータをクリーンアップする方法はこちらをご覧ください。
Transientとcronジョブのクリーンアップ
autoloadデータと同様、Transientも定期的にクリーンアップする必要があります。Transientが正しく動作していれば、自動的に期限切れになり削除されますが、これが機能していない可能性があります。設定に誤りがあったり破損していたりすると、Transientが蓄積されてしまいます。
Transientの処理に問題が発生し、サイト全体の速度に影響を与える事例もあります。速度が著しく低下したサイトの調査を行った結果、期限切れのTransientを含む69万5,846の一時的なレコード(行)がデータベースに蓄積されていることが判明。これらを削除したところ、サイトの速度はすぐに元に戻りました(以下参照)。
無料プラグインのTransients Managerを使用すると、WordPressサイトのTransientを表示、検索、編集、削除することができます。上級者はWP-CLIコマンドを使って削除することも可能です。
また、WordPressサイトの繰り返しタスクを実行するためのcronジョブ(WP-Cron)にも同様の問題があります。無料プラグインのWP Controlを使用すると、cronジョブに問題がないかを確認することができます。
データベースエンジンをInnoDBに変更
最後に、該当する場合はデータベースエンジンをInnoDBに移行してください。長年運営されているサイトでは、データベースに未だMyISAMストレージエンジンを使用している可能性があります。現在は、InnoDBの方がパフォーマンスと信頼性に優れており、テーブルレベルのロックの問題も解消されているため、クエリの処理が高速になります。
データベース(テーブル)をMyISAMからInnoDBに変換する方法はこちらをご覧ください。Kinstaに移行される場合は、専任のエンジニアがこの作業を代行します。
8. データをオフロードする
会員制サイトには、動画、PDF、高解像度の写真、ドキュメント、音声ファイルなど、大量のデータがあります。したがって、手頃な価格で利用できるストレージソリューションを利用して、データをオフロードするのも効果的です。これは、ホスティングプランのアップグレードよりも安価です。
WordPressの会員制サイトでの注意点
続いて、WordPressの会員制サイトで推奨されない事項をいくつかご紹介します。
カウンターは設置しない
どうしても必要な場合を除いて、カウンターは設置しないようにしましょう。これは例えば、フォーラムの投稿でユーザーのアバターの横にある「792件の投稿」や、フォーラムの投稿一覧に表示される「5,243ビュー」のようなものです。コメントやスレッドが長くなるにつれ、カウンターはデータベースに大きな負担をかけます。カウンターの使用は最小限に抑え、必要な場合にのみ使用してください。
SNSでの共有回数を表示するソーシャルカウンターも同様です。
ページビルダーを使用しない
ページビルダーは、特に直感的にサイトを構築したい人にとって画期的なソリューションです(おすすめのWordPressページビルダーはこちら)。しかしそのほとんどは、ユーザーがコーディングなしでサイトを構築できるよう、ページのレンダリングに本来は不要なコードを生成します。これがパフォーマンスに影響を及ぼすことがあるため、自分でコードを書くことで軽量化を極めることができます。
例えば、Kinstaのウェブサイトは、WordPressを使用していますが、テーマ全体は社内の開発者がコーディングしています。これにより、大規模なWordPressテーマにありがちな肥大化を回避しながら、高度な機能を使用できています。会員サイト向けのおすすめWordPressテーマはこちらでご紹介しています。また、有用なWordPress開発者やデザイナーに仕事を依頼することも検討してみてください。
プラグインを多用しない
プラグインのコードの質は、インストールするプラグインの数よりも重要です。とはいえ、プラグインのインストールには、パフォーマンスへの代償がつきものです。プラグインの機能が不要になったら、必ず無効化してサイトから削除するようにしてください。プラグインを定期的に整理することで、トラブルシューティングが容易になるだけでなく、高確率でバックエンドとフロントエンドの両方でクエリの数が低減します。
サードパーティとの統合には要注意
サードパーティのCRMや自動化プラットフォームは多数あり、WordPressの会員制サイトとの統合を検討しているかもしれません。しかし、APIやサービスなどと通信する際、レイテンシや待ち時間が発生するものがあることを覚えておいてください。統合するには、WordPress内部に構築されたCRMソリューションがお勧めです。
またその逆も然りで、サードパーティのCRMや自動化プラットフォームが多数のタスクを処理している場合は、WordPressホスティングの負荷を軽減できるかもしれません。いずれにしても、この点を念頭に置いて、さまざまなソリューションをテストしてみてください。
その他の推奨事項
最後に、今回ご紹介したヒントよりも一般的なサイトの速度最適化についても触れていきます。
- 画像の圧縮─Kinstaでは、画像の種類や圧縮方式によって通常60~70%圧縮することができます。非可逆圧縮がおすすめです。
- 常にCDNを利用する─Kinstaでは、世界37箇所のデータセンターを提供していますが、CDNを利用し、世界中のPoPからアセット(画像、JS、CSS)をコピーして配信することで、物理的に離れた場所にいる訪問者や顧客にもコンテンツを高速提供できる。KinstaのCDNはすべてのプランにデフォルトで付帯しています。
- 自社でのVPS管理を検討している場合、月額20ドル程度を削減するためにシスアドの業務を自社で行う価値があるかをよく吟味する。
まとめ
WordPressの会員制サイトやコミュニティサイトでは、標準的なサイト以上の最適化が求められます。優れたパフォーマンスを維持するには、手間をかけることが大切です。PHP8.3、Elasticsearch、Redisオブジェクトキャッシュなど、即座にパフォーマンスを改善してくれるソリューションも多数あるため、この記事を参考に最適化を行ってみてください。
コメントを残す