フィルターを使用してJetpack Boostのキャッシュパラメーターをカスタマイズする

このガイドでは、フィルターを使用してJetpack Boostのキャッシュ動作をカスタマイズし、サイトのパフォーマンスを向上させ、キャッシュの分散を減らす方法を説明します。

Jetpack Boostのページキャッシュについて

Jetpack Boostのページキャッシュ機能は、動的なWordPressページの静的バージョンを生成して保存します。ページのURLと訪問者のブラウザーCookieを使用して、ページを識別します。

ブラウザーにCookieがない状態でページを訪問する人は、識別するためのデータを持たないため、「匿名ユーザー」と呼ばれます。そのユーザー向けに生成されたキャッシュファイルは、他の多くの訪問者にも使用できる可能性があります。速度を最大化するため、これらのキャッシュページはWordPressが完全に初期化される前に配信されます。そのため、この段階ではほとんどのWordPress機能を利用できません。

ページ配信プロセスの早い段階でコードを実行する必要がある開発者向けに、Jetpack Boostは追加コードローダーを提供しています。このツールを使うと、WordPressリクエストの2つの重要な時点より前にカスタムコードを実行できます。

  1. キャッシュされたページが配信されるとき。
  2. 新しいページをキャッシュするために出力バッファーが作成されるとき。

この機能により、開発者はキャッシュされたページを扱っている場合でも、必要な処理や変更を実装できます。これにより、速度とカスタマイズ性の両方を確保できます。

フィルターを使用したキャッシュ動作のカスタマイズ

キャッシュパラメーターを変更するには、次の名前のファイルを作成できますwp-content/boost-cache-extra.php。Jetpack Boostはそのファイルを読み込み、他のPHPスクリプトと同じように実行します。このファイルには<?phpの開始タグが必要です。

このスクリプトはページ配信プロセスの非常に早い段階で実行されるため、ほとんどのWordPress機能は利用できません。ただし、filtersおよびactionsは使用できます。

⚠️ 重要: PHPコードが有効であることを確認し、サイトに問題を引き起こす可能性のある不具合を避けてください。変更を本番環境に適用する前に、ステージング環境でテストすることを強くおすすめします。

利用可能なフィルター

Jetpack Boostは、キャッシュをカスタマイズするための複数のフィルターを提供しています。

  • jetpack_boost_ignore_cookies: Cookie名の配列を1つのパラメーターとして受け取ります。これらのCookie名は無視され、キャッシュファイルの識別に使用されるCookie一覧から削除されます。Cookie名には正規表現を使用できます。デフォルトのCookie名一覧には、CloudflareのCookieについての詳細はこちら、sbsj_で始まる任意のCookieに一致する正規表現、およびtk_aiとtk_qsのCookieが含まれます。つまり、ブラウザーにこれらのCookieのいずれかがある訪問者には、サイトの匿名訪問者用に作成されたキャッシュファイルが表示され、カスタムキャッシュファイルは提供されません。
  • jetpack_boost_ignore_get_parameters:GETパラメーター名の配列を1つのパラメーターとして受け取ります。これらのパラメーターは、上記のフィルターと同じ方法でキャッシュから無視されます。デフォルトのパラメーター一覧には、マーケティング目的で使用される一部の「utm_」パラメーターが含まれます。
  • jetpack_boost_cache_parameters:配列を1つのパラメーターとして受け取ります。上記のフィルターと似ていますが、cookies情報とget情報の両方を含みます。上記のフィルターよりもリクエストの早い段階で実行されますが、このフィルターではなく他のフィルターを使用することをおすすめします。上記のフィルターはこのフィルターを使用しています。
  • jetpack_boost_cache_bypass_patterns:正規表現の配列を1つのパラメーターとして受け取ります。キャッシュを回避するURLと照合するパターンの一覧をサイト所有者が変更できます。これらは設定ページの「例外」フォームに一覧表示されるURLです。
  • jetpack_boost_cache_request_cacheable:ブール値を1つのパラメーターとして受け取ります。現在のページをキャッシュ可能にするにはtrueを返します。
  • jetpack_boost_cache_accept_headers:プラグインがキャッシュしないAcceptヘッダーの配列を1つのパラメーターとして受け取ります。デフォルトの一覧には、さまざまなJSONヘッダータイプが含まれます。

Boostが使用するCookie一覧では、Jetpack Cookie Banner eucookielawとpersonalized-ads-consentのCookie値が1に設定されます。これにより、Cookieバナーの「同意する」ボタンをクリックした訪問者には、他のすべてのCookieが同じ場合、キャッシュの効率を高めるために同じキャッシュファイルが配信されます。Cookie自体は変更されず、Cookieバナーで「同意する」をクリックした訪問者向けには新しいキャッシュファイルが作成されます。

ページを読み込むたびに値が変わるCookieがサイトにあり、その値自体がどのPHPコードでも使用されていない場合、サイトの効果的なキャッシュを妨げている可能性があります。jetpack_boost_cache_parametersフィルターを使用して値を変更し、ページを読み込むたびに同じ値になるようにしてください。

特定のCookieを無視する理由

Cookieは、ウェブサイトの訪問者を識別するうえで重要な役割を果たします。ユーザーがログインするとブラウザーにCookieが設定されますが、Cookieはページコンテンツの変更以外にもさまざまな追跡目的で使用されます。初めて訪問するユーザーや、ウェブサイトの「匿名」バージョンを閲覧するボットには、通常、頻繁に使用されるキャッシュページが配信されます。このような訪問者は、サイトを利用したことのある訪問者よりも多いことが多いためです。Cookieが設定されると、そのページ用に新しいキャッシュファイルが作成され、そのCookieを持つ後続の訪問者には、その特定のキャッシュファイルが配信されます。この処理が重要なのは、Cookieの存在によって訪問者を何らかの形で識別できるためです。

ただし、ウェブサイト上のJavaScriptが、PHPを通じたサイトの外観に影響しないCookieを設定する場合、そのCookieは無視しても問題ない可能性があります。WordPressのログインCookieなど、重要な機能に関わるため無視できないCookieがあることに注意してください。

フィルターを使用してキャッシュ動作を変更する例

Cookieを無視する

Cookieバナーによって設定されるCookieなどを無視するには、jetpack_boost_ignore_cookiesフィルターを使用します。この例では、これを使用する架空のCookieバナープラグインで、cookie_banner_settings Cookieを無視する方法を示します。このCookieに依存するコードは、ブラウザー上で実行されるJavaScriptに記述する必要があります。サーバー上のPHPが、バナーを表示するかどうかの判断やその他の機能の実行にこのCookieを使用する場合、そのCookieは無視できません。

<?php
// Ignore the 'cookie_banner_settings' cookie.
function ignore_banner_cookie( $cookies ) {
        $cookies[] = 'cookie_banner_settings';

        return $cookies;
}
add_filter( 'jetpack_boost_ignore_cookies', 'add_test_cookie' );

このコードにより、cookie_banner_settings Cookieが無視され、匿名訪問者に1つのキャッシュファイルを配信できます。

GETパラメーターを無視する

特定のGETパラメーター(例:test)をキャッシュ識別から除外するには、jetpack_boost_ignore_get_parametersフィルターを使用します。この例では、?testパラメーターを含むURLに、ベースURLと同じキャッシュファイルを配信します。

<?php
// ignore the 'test' GET parameter in the URL.
function ignore_test_get( $get) {
        $get[] = "test";
        return $get;
}
add_filter( 'jetpack_boost_ignore_get_parameters', 'ignore_test_get' );

このコードは、testパラメーターをキャッシュ識別から除外し、yourjetpack.blog/?test=123のようなページにyourjetpack.blog/と同じキャッシュファイルを配信します。

今後、同じキャッシュファイルを共有するページ:

  • yourjetpack.blog/
  • yourjetpack.blog/?test=1
  • yourjetpack.blog/?test=testing
  • yourjetpack.blog/?test=123

常に変化するCookieの値を修正する

これは、キャッシュパラメーターで仮想的なページカウンターのCookieを1に設定する例です。JavaScriptがカウンターを表示し、PHPが表示しない場合にのみ、この設定が可能です。これにより、WordPressページをキャッシュして、より多くの訪問者に利用してもらえるようになり、カウンターには訪問したページ数が表示されます。

<?php
// Fix the "page_counter" cookie
function fix_page_counter( $parameters ) {
        if ( isset( $parameters['cookies']['page_counter'] ) ) {
                $parameters['cookies']['page_counter'] = 1;
        }

        return $parameters;
}
add_filter( 'jetpack_boost_cache_parameters', 'fix_page_counter' );

Jetpack Boostのフィルターを使ってキャッシュの動作をカスタマイズすると、パフォーマンスを最適化し、サイト訪問者にスムーズな体験を提供できます。不要なCookieやGETパラメーターを無視することで、より効率的なキャッシュ済みページを配信し、サーバーの負荷を軽減できます。

特定の条件下でキャッシュを無効にする

サイトの特定のページをキャッシュなしで表示し、しかも特定の訪問者にだけ表示したい場合は、次のjetpack_boost_cache_request_cacheableフィルターを使用できます。この例では、IPアドレス192.168.1.1を使用し、Cookie「source=vip」を持つ訪問者が、キャッシュされていない/about/ページにアクセスできます。

<?php

function uncacheable_vips( $cacheable ) {
        if (
                isset( $_SERVER['REQUEST_URI'] ) && $_SERVER['REQUEST_URI'] === '/about/' &&
                isset( $_COOKIE['source'] ) && $_COOKIE['source'] === 'vip' &&
                isset( $_SERVER['REMOTE_ADDR'] ) && $_SERVER['REMOTE_ADDR'] === '192.168.1.1'
        ) {
                return false;
        } else {
                return true;
        }
}
add_filter( 'jetpack_boost_cache_request_cacheable', 'uncacheable_vips' );

まだサポートが必要ですか?

サポートにお問い合わせください。喜んでご案内します。