Cloudflare Workersで速いWordPress
WordPressが遅い本当の理由
WordPressで運営しているブログやWebサイトの表示が遅く、「ページを開くのに何秒も待たされて読者が離脱してしまう」「プラグインを減らしても表示速度が改善しない」と悩んでいませんか。
サイトの表示が遅くなる大きな要因は、訪問者がページを開こうとするたびに、WordPressが入っている元のサーバー(オリジンサーバー)へ毎回データを取りに行き、その都度ページを組み立てて返していることにあります。アクセスが集まったり、サーバーと訪問者の物理的な距離が離れていたりすると、サーバーの処理が追いつかずに待ち時間が長くなります。
この問題を解決するのが、世界中にある中継拠点(エッジサーバー)を活用する Cloudflare の仕組みです。WordPressが動いている元のサーバーにアクセスが届く手前で、ページデータの一時保存(キャッシュ)や転送処理を肩代わりさせることで、サーバーへの負担を減らし、遠くの訪問者にも素早くWebページを表示できるようになります。このうち Workers は、その中継拠点で小さなプログラムを動かせる Cloudflare の機能です。転送先の切り替えや、ページに安全のための指示を書き足すといった処理を、元のサーバーに手を入れずに中継拠点で済ませられます。
全体像:APO + Workers の組み合わせ
| 手法 | 効果 | 難易度 |
|---|---|---|
| APO(Automatic Platform Optimization) | ページHTML全体をエッジキャッシュ。最大70〜300%高速化 | ★☆☆ |
| キャッシュルール | wp-admin / ログイン除外・静的ページの積極キャッシュ | ★☆☆ |
| Workers(ヘッダー注入) | セキュリティヘッダーをエッジで付与。オリジン変更不要 | ★★☆ |
| Workers(リダイレクト) | 301リダイレクトをエッジで処理。PHPを叩かない | ★★☆ |
| Workers(A/Bテスト) | クッキーベースで訪問者を振り分け。オリジン変更ゼロ | ★★★ |
まず APO で土台を作り、Workers で細かい最適化を乗せるのが正しい順序。
Step 1: APO を有効化する(最優先・効果最大)
APO(Automatic Platform Optimization: WordPressのページを中継サーバーに一時保存して高速化する公式機能)は、Cloudflare Workers KV(データを高速に読み出す仕組み)を使って静的HTMLページをエッジにキャッシュします。Cloudflareが「WordPress専用に作った Workers アプリ」と理解してよいでしょう。
料金:
- Free プラン: +$5/月
- Pro / Business / Enterprise: 無料で含まれる
有効化手順:
① WordPress プラグインをインストール
公式 Cloudflare プラグインをインストール → 有効化 → プラグイン設定からCloudflareアカウントと連携(APIトークンまたはメールアドレス+グローバルAPIキー)。
② Cloudflare Dashboard で APO を ON
Cloudflare Dashboard → 対象ドメイン → Speed → Optimization → スクロールして「Automatic Platform Optimization for WordPress」をON。
③ 除外設定(必須)
ログインユーザー・WooCommerceカートはキャッシュされないよう APO が自動で除外する。WordPress プラグイン側で「Cache by device type」「Automatic Cache Purge」が有効になっていることを確認する。
効果の目安:
Kinstaによるベンチマーク(参照)では APO 有効化後にページロードタイムが70〜300%改善。特にサーバーから遠い地域からのアクセスで効果が顕著。
Step 2: キャッシュルールを設定する
APO を入れても、/wp-admin/ と /wp-login.php がキャッシュされると管理画面が壊れる。明示的に除外ルールを作る。
Cloudflare Dashboard → Caching → Cache Rules → Create rule
ルール1: WordPress管理画面をキャッシュ対象外にする
(http.request.uri.path contains "/wp-admin") or
(http.request.uri.path eq "/wp-login.php") or
(http.request.uri.path contains "/wp-json/")
アクション: Bypass cache
ルール2: ログイン済みユーザーをキャッシュ対象外にする
(http.cookie contains "wordpress_logged_in") or
(http.cookie contains "woocommerce_cart_hash")
アクション: Bypass cache
WooCommerce を使っていない場合は2つ目の条件は不要。
Step 3: Workers でセキュリティヘッダーを付与する
セキュリティヘッダー(ブラウザに対して不正な通信や画面の埋め込みを禁止するセキュリティ指示情報)は、本来 WordPress 側(nginx.conf または PHP)で設定します。しかし Workers を使えばオリジンサーバーの設定を一切触らずに中継拠点で付与できます。
Cloudflare Dashboard → Workers & Pages → Create application → Create Worker
export default {
async fetch(request) {
const response = await fetch(request);
// レスポンスヘッダーは immutable なので新しく作る
const newHeaders = new Headers(response.headers);
newHeaders.set("X-Frame-Options", "SAMEORIGIN");
newHeaders.set("X-Content-Type-Options", "nosniff");
newHeaders.set("Referrer-Policy", "strict-origin-when-cross-origin");
newHeaders.set(
"Strict-Transport-Security",
"max-age=31536000; includeSubDomains; preload"
);
newHeaders.set("Permissions-Policy", "camera=(), microphone=(), geolocation=()");
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders,
});
},
};
デプロイ後、Workers & Pages → 該当Worker → Settings → Triggers でカスタムドメイン(example.com/*)を割り当てる。
確認:
curl -sI https://example.com/ | grep -E "x-frame|x-content|strict-transport"
Step 4: Workers でリダイレクトをオリジンから切り離す
旧URLから新URLへの301リダイレクト(ページが移転したことを検索エンジンやブラウザに伝える自動転送設定)を .htaccess や nginx.conf で管理している場合、Workersに移すとオリジンサーバーを経由しなくなります。特にリダイレクト数が多いサイトで有効です。
const REDIRECTS = {
"/old-page": "https://example.com/new-page",
"/blog/2024/old-post": "https://example.com/new-post",
"/contact-us": "https://example.com/contact",
};
export default {
async fetch(request) {
const url = new URL(request.url);
const destination = REDIRECTS[url.pathname];
if (destination) {
return Response.redirect(destination, 301);
}
return fetch(request);
},
};
REDIRECTS オブジェクトに旧パス → 新URLを追加するだけで管理できる。.htaccess の複雑な正規表現を廃止できる。
Workers の無料枠と料金
| プラン | リクエスト数 | CPU時間 | 月額 |
|---|---|---|---|
| Free | 100,000/日 | 10ms/リクエスト | 無料 |
| Workers Paid | 1,000万/月まで込み(超過分$0.30/百万) | デフォルト30秒(最大5分まで設定可) | $5/月 |
一般的なWordPressサイトのリダイレクト・ヘッダー付与程度であれば Free枠で十分。
まとめ
| 優先順位 | 施策 | 期待効果 |
|---|---|---|
| 1 | APO 有効化 | ページ全体 70〜300% 高速化 |
| 2 | キャッシュルール(wp-admin除外) | 管理画面の誤キャッシュ防止 |
| 3 | Workers セキュリティヘッダー | オリジン変更なしでヘッダー付与 |
| 4 | Workers リダイレクト | .htaccess 廃止・オリジン負荷削減 |
APO だけで体感できるほど速くなる。Workers はその後に乗せる追加最適化として理解するのがよい。