2026年6月29日

2026年6月29日

WordPressのTTFBを短縮する方法|計測・ページキャッシュ・PHP・データベースの順に見直す

TTFB(Time To First Byte)は、ブラウザーがページを要求してから、サーバーの応答の最初の1バイトが届くまでの時間です。DNS の名前解決、接続、TLS のやり取り、サーバーが HTML を作る時間が含まれます。web.dev では、多くのサイトの目安として 0.8秒以下 を挙げています。

WordPress では、TTFB の大部分を「PHP が HTML を作る時間」が占めることが多く、ページキャッシュの有無で大きく変わります。この記事では、計測してから、効果の大きい順に見直す手順を説明します(2026年10月時点)。

手順1:TTFBを計測して内訳を見る

curlで計測する

curl の -w オプションで、各段階までの経過時間を表示できます(単位は秒)。

curl -s -o /dev/null -w 'DNS:     %{time_namelookup}\n接続:    %{time_connect}\nTLS:     %{time_appconnect}\nTTFB:    %{time_starttransfer}\n合計:    %{time_total}\n' https://example.com/

Windows の PowerShell では curl が別のコマンドの別名になっていることがあるため、curl.exe と書きます。また、出力先は -o NUL にします。

結果の読み方は次のとおりです。

  • TTFB から TLS を引いた時間が、サーバーが応答を作っていた時間の目安
  • DNS・接続・TLS が長い場合は、サーバーの処理ではなく、DNS やネットワーク、サーバーまでの距離の問題(CDN が効く部分)

1回だけでは揺れがあるので、3〜5回続けて測ります。キャッシュの効いていない1回目と、2回目以降を分けて見ます。

キャッシュが効いているか確かめる

ページキャッシュを使っている場合、応答のヘッダーにキャッシュの状態が出ることがあります。

curl -sI https://example.com/ | grep -iE '^(cache-control|x-cache|cf-cache-status|x-litespeed-cache|age)'

ヘッダーの名前はキャッシュの種類によって違います(Cloudflare なら cf-cache-status、LiteSpeed Cache なら x-litespeed-cache など)。

ログイン中は別に考える

管理画面にログインしているときは、多くのページキャッシュが働かないため、TTFB は長くなります。訪問者の体感を測るときは、ログアウトした状態か、シークレットウィンドウ、または上の curl で測ります。

手順2:ページキャッシュを使う

ページキャッシュは、PHP が作った HTML を保存しておき、次のアクセスでは PHP とデータベースを使わずに返す仕組みです。TTFB への効果がもっとも大きい対策です。

  • レンタルサーバーのキャッシュ機能:多くのレンタルサーバーに、管理画面からオンにできるキャッシュ機能がある
  • キャッシュプラグイン:WP Super Cache、W3 Total Cache、LiteSpeed Cache(LiteSpeed サーバーの場合)など
  • Webサーバーのキャッシュ:VPS なら nginx の FastCGI キャッシュなど

キャッシュは1種類にします。同じ働きのものを重ねると、更新が反映されない原因になります。プラグインの選び方はWordPressの高速化(キャッシュ)プラグイン比較を参照してください。

導入したら、手順1の計測をもう一度行い、2回目以降の TTFB が短くなったことを確かめます。

手順3:PHPを見直す

ページキャッシュが使えないページ(ログイン中、カート、検索結果など)や、キャッシュが切れた直後の速さは、PHP の処理速度で決まります。

PHPのバージョンを上げる

管理画面の「ツール」→「サイトヘルス」→「情報」→「サーバー」で、PHP のバージョンを確かめます。PHP 7.4 や 8.0 など、サポートが終わったバージョンを使っている場合は、レンタルサーバーの管理画面などから PHP 8.2 以降に上げます。上げる前にバックアップを取り、ステージング環境で動作を確かめます。

OPcacheを有効にする

OPcache は、PHP のスクリプトをコンパイルした結果をメモリに保存し、毎回のコンパイルを省く機能です。レンタルサーバーでは多くの場合すでに有効です。VPS で自分で設定する場合は、Webサーバー経由の PHP が読む php.ini(Debian・Ubuntu で PHP 8.3 の PHP-FPM なら /etc/php/8.3/fpm/php.ini など)を確かめます。

opcache.enable=1
; 単位はMB。数字だけを書く(「64M」のような単位は付けない)
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000

変更したら PHP-FPM を再読み込みします(例:sudo systemctl reload php8.3-fpm)。設定の詳細と状態の確認方法はWordPressのOPcache設定を参照してください。

PHP-FPMの待ちを確かめる(VPS)

同時アクセスが多いときだけ TTFB が長くなる場合は、PHP-FPM のプロセスが足りず、リクエストが順番待ちになっていることがあります。pm.max_children の考え方はVPSでPHP-FPMを最適化する方法を参照してください。

手順4:遅い処理を見つける

キャッシュが無い状態の TTFB が長い場合は、どのプラグインやテーマの処理が時間を使っているかを調べます。

Query Monitor で調べる

Query Monitor プラグインを入れると、ページごとに、データベースへの問い合わせ(クエリ)の数と時間、遅いクエリ、外部への HTTP リクエストを、どのプラグインが出したかとあわせて確かめられます。外部 API への通信を毎回待っているプラグインは、TTFB を大きく延ばします。使い方はQuery Monitorの使い方とWordPressパフォーマンス診断を参照してください。調べ終わったら無効にします。

プラグインを1つずつ止めて比べる

ステージング環境などで、プラグインを1つずつ無効にして TTFB を測り、差の大きいものを探します。WP-CLI なら次のように操作できます(example-plugin はプラグインのフォルダー名に置き換えます)。

wp plugin list --status=active
wp plugin deactivate example-plugin
# 計測してから元に戻す
wp plugin activate example-plugin

キャッシュプラグインやセキュリティプラグインを「不要なもの」として一律に止めるのではなく、計測して遅い原因になっているものを見つけ、設定の見直し・代わりのプラグイン・削除を検討します。

autoload の量を確かめる

WordPress は、wp_options テーブルのうち autoload が有効なオプションを、すべてのページで最初にまとめて読み込みます。使わなくなったプラグインの設定などで、この量が大きくなっていることがあります。WordPress 6.6 以降では、合計が約800KBを超えるとサイトヘルスに「自動読み込みオプションがパフォーマンスに影響する可能性があります」という趣旨の問題が表示されます。WP-CLI では次のように確かめます。

# autoload が有効なオプションの合計サイズ(バイト)
wp option list --autoload=on --format=total_bytes

# サイズの大きいもの10件(下ほど大きい)
wp option list --autoload=on --fields=option_name,size_bytes --format=csv | sort -t, -k2 -n | tail

大きいオプションが削除済みのプラグインのものなら、バックアップを取ってから削除します。使っているプラグインのものは、プラグインの作者に問い合わせます。

手順5:永続オブジェクトキャッシュとデータベース

ログイン中のページや、ページキャッシュを使えない動的なページが多いサイトでは、Redis や Memcached を使った永続オブジェクトキャッシュが効きます。データベースへの同じ問い合わせを、メモリから返せるようになります。設定はWordPressのオブジェクトキャッシュをRedisで高速化する方法を参照してください。

VPS で MySQL・MariaDB を自分で管理している場合は、innodb_buffer_pool_size がデータベースの大きさに対して小さすぎないかも確かめます。設定ファイルの [mysqld] の項目に書き、データベースを再起動して反映します。

[mysqld]
innodb_buffer_pool_size = 1G

値はサーバーのメモリ量とデータベースの大きさから決めます。PHP やWebサーバーが使う分のメモリを残してください。

手順6:サーバーまでの距離とネットワーク

手順1の DNS・接続・TLS が長い場合は、サーバーの処理ではなく、通信の部分に時間がかかっています。

  • 利用者の多い地域から遠いサーバーを使っている場合は、CDN で HTML までキャッシュするか、近い地域のサーバーを検討する
  • HTTP/2・HTTP/3 や TLS 1.3 に対応しているかを確かめる

CDN の導入はWordPressにCDN(CloudFront・Cloudflare)を設定する方法を参照してください。

まとめ

  • curl -w で TTFB と内訳を測り、サーバーの処理か通信かを分ける
  • 効果がもっとも大きいのはページキャッシュ。1種類にして、導入後に測り直す
  • PHP は 8.2 以降に上げ、OPcache を有効にする(php.ini の値は単位を付けずにMBの数字で書く)
  • 遅い原因は Query Monitor やプラグインの切り替えで計測して探し、autoload の量も確かめる
  • 動的なページが多いなら永続オブジェクトキャッシュ、遠い地域の利用者が多いなら CDN を検討する

お気軽にご相談ください

お見積りへ お問い合わせへ
▲