- 表示高速化
- 更新日:
WordPressを高速化するためにはクエリを減らすことは重要です。
クエリを減らすことでそもそもデータベースにクエリを送ってデータを受け取る必要がなくなったり、その処理による負担が軽くなったりするので、
サーバーからレスポンスを返すまでの時間が早くなり、表示の高速化に繋がります。
また、同時にアクセスしているユーザーの数だけクエリの数も増えるので、ページ内のクエリが1つ増えるだけでもサーバーに大きな負荷がかかることがあります。
この記事ではクエリをなくしたり減らしたりするテクニックをいくつか紹介していきます。
- クエリを減らすことでサーバー負荷を軽減し、表示速度を向上できる。
- 最も効果的なのはキャッシュの活用。プラグインやTransients APIで処理を減らす。
- テンプレート内では
get_field()の多用を避け、get_fields()でまとめて取得。 - 不要なサブクエリを避け、
pre_get_postsでメインクエリを書き換えることで効率化。 - まずはテーマ内でのクエリ最適化から取り組むことで、全体的な高速化につながる。
【今だけ無料】PageSpeed Insightsを100ページ一括自動診断!
「トップページは改善したが、下層ページは放置気味…」「1ページずつ手動で計測するのは手間がかかる…」
そんなお悩みを解決!最大100ページを自動で計測し、修正優先度付きのレポートを無料で作成します。サイト全体の「健康状態」を把握したい方は、今すぐお申し込みください。
目次
キャッシュの使用
まずはキャッシュを使用することです。
ページをキャッシュさせておくと、クエリを発行する必要がなくなります。
そもそもサーバー側での処理もほぼ要らなくなるので、高速化に大きな効果をもたらします。
「WP Super Cache」などのプラグインではページキャッシュ等の設定をすることができます。
またWordPressに標準搭載されているTransietns APIやWP_Object_Cacheを使用する方法もあります。
他にもクエリキャッシュ等様々なキャッシュがあるので、自分のWordPressに合わせて検討してみてください。
テンプレート内でクエリを減らす
次にWordPressテーマのテンプレート内でクエリの数を減らすことや負荷を軽くことを考えます。
データベースにクエリを発効する関数は多数あるので、全てを変更するのは難しいかもしれません。
負荷の高いものから変更していくのがオススメです。
特に多いのが、カスタムフィールドの値の取得にget_fieldを用いているパターンです。
カスタムフィールドは基本的に数が多く、get_fieldでそれぞれ取得していると
その数だけクエリが発行されるので、負荷が増加してしまいます。
できるかぎりget_fieldsを用いて、1つの記事に紐づいたカスタムフィールドはまとめて取得してしまうのがオススメです。
$field1 = get_field(‘field1’); $field2 = get_field(‘field2’);
を
$fields = get_fields(); $field1 = $fields[‘field1’]; $field2 = $fields[‘field2’];
とすればクエリの数は2から1となりトータルの負荷が軽くなります。
カスタムフィールドが1つ2つだとそこまで効果はありませんが、
基本的に取得するカスタムフィールドの数が多ければ多いほど効果を発揮します。
ぜひ使用をオススメします。
メインクエリで代替できるものは、サブクエリを発行しない。
WordPressで時々やっているのを見かけるのが、
メインクエリで欲しい記事は取得できなかったり、件数等の条件が違ったりするので、new WP_Query等を用いてサブクエリを発行し、取得した記事を表示しているというパターンです。
これだと、使わないので必要ないはずのメインクエリを発行してから、新たにサブクエリを発行するので、余計なクエリが1つ増えることになります。
たった1つですが、100人1000人に同時アクセスされると100や1000もクエリが増えてしまうので、サーバーに大きな負荷がかかります。
減らしておくに越したことはありません。
では、どうするのかというと
サブクエリを使わず、メインクエリをpre_get_postsのアクションフックを用いて書き換えます。
例えば、(普通の)固定ページなど書き換えられないものもありますが、ブログ投稿のインデックスページ等書き換えられるものは書き換えることを推奨します。
function changeMainQuery($query)
{
//管理画面のメインクエリーとメインクエリーじゃないときは処理しない
if (is_admin() || !$query->is_main_query()) {
return;
}
//例えば、ブログ投稿のインデックスページならば、、
if ($query->is_home()) {
//カスタム投稿タイプがnewsの記事を表示する。
$query->set( 'post_type', 'news' );
}
}
add_action('pre_get_posts', 'changeMainQuery');
のように記述します。
setはWP_Queryのパラメータにあるものなら設定できるので、何があるのか確認しておくとよいでしょう。
まとめ
ここでは、いくつかのテクニックを紹介しましたが
本質はクエリを減らすこと。負荷を軽くすることです。
MySQL側でもできることはたくさんあるのですが、
まずはWordPressのテンプレートで減らすことが重要です。
1つ1つ試しやすいテクニックになっていると思うので
試してみてください。
当サイトではこの他にもWebに関するお役立ち情報を多数ご紹介しています。
Web担当者の方、デジタルマーケティングに興味がある方はぜひご覧ください。
数時間の作業を一瞬で!PageSpeed Insights最大100ページを一括診断!
PageSpeed Insightsを手動でチェックすると、3〜5分程度かかってしまいます。
一定規模、以上のWebサイトで全ページをチェックしようとすると、数時間以上のリソースが必要になります。
デジタルアイデンティティでは、「トップページ以外の速度状況がわからない」「ページ数が多くて管理しきれない」という企業様向けに、PageSpeed Insightsで最大100ページをまとめて計測する「サイトスピード一括診断ツール」を提供しています。
WebサイトのURLを入力するだけで、モバイル・PC両方のスコアやCore Web Vitals指標を全自動で取得。単なるスコアだけでなく、「どのページから直すべきか」がわかる修正優先度リストや、SEOリスクの可視化レポート(PDF・Excel)を無料で納品します。
こんなお悩み、ありませんか?
- 1ページずつPSIで計測するのが面倒で放置している…
- トップページは早いが、記事や商品ページの速度が不安…
- どのページが足を引っ張っているのか特定できない…
- 社内報告用にサイト全体のパフォーマンスを数値化したい…
- 改善インパクトの大きいページから効率よく対策したい…
「点」ではなく「面」でサイトの課題を把握し、ユーザー体験とSEO評価を底上げしましょう。
サービスリリース記念で今だけ無料で診断いたします!





