WordPressのサイトヘルスでエラーが出てたので対策した

※ 当サイトではアフィリエイト広告を利用しています。リンクは広告リンクも含みます。

この記事は約10分で読めます。
広告

WordPressのダッシュボードでサイトヘルスという項目があり赤①がついてました。
見てみると以下の問題が起きていました。
1件の致命的な問題
・ページキャッシュが検出されず、サーバーのレスポンスが遅くなっています
4件のおすすめの改善
1、停止中のテーマを削除してください
2、REST API で予期しない結果が発生しました
3、永続オブジェクトキャッシュを使用してください
4、サイトでループバックリクエストが完了できませんでした

対策した方法をご紹介します。

なお当ブログは一般的なレンタルサーバーではなくVPSを使ってます。
詳細は↓

お名前ドットコムVPSへ移行への道

2024/4お名前.comのレンタルサーバーからVPSへ移行したときの記録になります。

広告

ページキャッシュが検出されず、サーバーのレスポンスが遅くなっています(パフォーマンス)

パフォーマンスをクリックすると

ページキャッシュは、ユーザーがアクセスするたびにページを読み込むのではなく、静的なページを保存して提供することで、サイトの速度とパフォーマンスを向上させます。
ページキャッシュの検出は、有効化されたページキャッシュプラグインの検索のほか、ホームページへのリクエストを3回行い、以下のHTTPクライアントキャッシュレスポンスヘッダーのうち1つ以上の検索で行います:cache-control, expires, age, last-modified, etag, x-cache-enabled, x-cache-disabled, x-srcache-store-status, x-srcache-fetch-status.
・サーバーの応答時間の中央値は1,110ミリ秒でした。推奨されるしきい値600ミリ秒以下の時間でなければなりません。
・クライアントキャッシュレスポンスヘッダーを検出できませんでした。
・ページキャッシュプラグインは検出されませんでした。

私のVPSで構築した環境はDockerでNginx(Modesecurity付き)+WordPress(Nginx)です。
クライアントのリクエストを前段のNginxで受けてWordPressのNginxに渡す構成になっています。
こちら↓に書きましたがNginxと後段のNginxでデータ送受信するときに
バッファがいっぱいになって一時的にファイルに書き込むような処理が行われてます。

なのでスピードを重視したページキャッシュにするなら前段のNginxで
静的ファイルをキャッシュする形がいいと思います。
しかし難しくて失敗しそうなのでWordPressのプラグイン(WP Super Cache)で対応することにしました。
その結果WordPressのヘルスチェックはクリアしたけど表示スピードは
変わらないか、メモリに余裕がないから遅くなってるかもしれません。
目次へ

対策→WP Super Cache導入

対策前PageSpeed Insightsは携帯で55、デスクトップで93
WordPressのプラグインWP Super Cacheを使うことにした。
WordPressダッシュボードにログイン→「プラグイン」->「新規追加」
→「WP Super Cache」を検索し、「今すぐインストール」をクリック
→インストール後、「有効化」をクリック

プラグインに戻ってWP Super Cacheの設定をクリックするとエラーがいっぱい出た。

Error: Configuration file /var/www/html/wp-content/wp-cache-config.php is missing. Please reload the page.

→以下の対策をしているうちに消えた。
具体的にはwp-contentのパーミッションを一時的に変更(後述)

CRON システムは停止中
WordPress CRON ジョブシステムは停止しています。ガベージコレクションシステムは手動で CRON システムを動かさない限り動作しません。

→別件↓でWP-Cronは停止させたので、それを検出してると思われる。このまま。

警告! /var/www/html/wp-config.php を更新できません! 構成ファイルで WPCACHEHOME を設定する必要があります。

→Nginxの以下の設定で、このファイルへのアクセスを拒否してるので
一旦コメントアウト(自分で拒否するように設定していた。)
    location ~ /(xmlrpc\.php|wp-config\.php|wlwmanifest\.xml|license\.txt|readme\.html|wp-config-sample\.php) {
        deny all;
        return 403;
    }
WordPressのコンテナの中に入って
現状確認→644だった。
ls -l
-rw-r--r--    1 1001     1001          5681 Apr  2 04:34 wp-config.php
chmod 646 /var/www/html/wp-config.phpを実行
Nginxの設定更新
sudo docker restart コンテナ名

警告! /var/www/html/wp-content/advanced-cache.php を更新できません。
ftp やサーバーソフトウェアで chmod コマンドを使用して /var/www/html/wp-content を書き込み可能にし (chmod 777 /var/www/html/wp-content)、次にこのページを再読込みします。これは一時的な処理で、この後、再度読み込みのみの設定 に戻す必要があります (前述のコマンドで 777 を 755 に変更します)。
このページを再読込みして /var/www/html/wp-content/advanced-cache.php を更新します。
もし動作しなければ /var/www/html/wp-content/advanced-cache.php ファイルが存在するか確認してください

→WordPressのコンテナの中に入って設定値確認

ls -lで見ると現状755
drwxr-xr-x 14 www-data www-data 4096 May 26 06:14 wp-content
chmod 777 /var/www/html/wp-contentを実行
drwxrwxrwx 14 www-data www-data 4096 May 26 06:14 wp-content

参考:https://enjoy-pcworks.com/infotech/wordpress/518

WP Super Cacheの設定ができるようになったら、
今、変更した設定はすべて戻しても問題なかったので戻した。

Nginxの設定でwp-config.phpをアクセス拒否に戻し(私の場合)
WordPressのコンテナの中に入って
chmod 644 /var/www/html/wp-config.php
chmod 755 /var/www/html/wp-content
Nginxの設定更新
sudo docker restart コンテナ名
で戻した。

以上対策で簡単設定の画面が表示されました。

  1. 「キャッシング利用(推奨)」
  2. 「ステータスを更新」

これでサイトヘルス良好になりました。
その後、少し設定値をいじって。
PageSpeed Insightsは携帯で50、デスクトップで81と前より悪くなってますが
PageSpeed Insightsは、ばらつきが大きいので参考程度に。
でも、極端によくはなっていないことは確かだと思います。

サイトヘルスのテスト通過の「ページキャッシュが検出され、サーバーのレスポンスは良好です」を開いて見ると合格した理由がかいてありました。

  • サーバーのレスポンスの中央値は382ミリ秒でした。推奨される600ミリ秒のしきい値を下回っています。
  •  1個のクライアントキャッシュレスポンスヘッダーを検出しました: cache-control.
  •  ページキャッシュプラグインを検出しました。

上記、青下線のサーバーレスポンスは測り方が、どういうものか未調査だが
私の環境の実態にあっていない感じがしてます。
表示スピードの改善には、WP Super Cacheの設定値の調整や根本的な見直しが必要と考えます。
取り合えず、このまま運用して暇なときに見てみようと思ってます。
目次へ

停止中のテーマを削除してください(セキュリティ)

テーマはサイトのデザインを決定します。ブランドの一貫性とサイトの安全性の維持のため、常に更新することが重要です。

サイトのインストール済みテーマ5個はすべて最新版です。

サイトには2個の停止中のテーマがあります。 サイトのセキュリティ向上のため未使用のテーマの削除を検討してください。WordPress のデフォルトテーマ Twenty Twenty-Four、現在有効なテーマ Cocoon Child、親テーマ Cocoon は削除しないでください。

対策→不要なテーマ削除

Twenty Twenty-Three とTwenty Twenty-Two を削除した。
Twenty Twenty-Fourは消さない。
外観→テーマで対象のテーマをクリックすると削除が選択できます。
目次へ

REST API で予期しない結果が発生しました(パフォーマンス)

REST API は WordPress や他のアプリケーションがサーバーと通信する手段の1つです。たとえば、ブロックエディターの画面は投稿や固定ページの表示や保存のために REST API を使用しています。

REST API のテスト時に、予期しない結果が返されました:
REST API エンドポイント: https://kikuichige.com/wp-json/wp/v2/types/post?context=edit
REST API レスポンス: (403) Forbidden

対策→Nginxでアクセス拒否していたものを許可

エラーログで/wp-json/wp/v2/types/post?context=editで検索してみると
Nginx(Modesecurity)でアクセス拒否されてた。
そういえば自分以外のIPは/wp-json以下のアクセス拒否に設定していた。
そこで拒否されてるIP(ループバックアドレス)をNginx(Modesecurity)でアクセス許可した。

永続オブジェクトキャッシュを使用してください(パフォーマンス)

永続オブジェクトキャッシュは、サイトのデータベースの効率を上げます。その結果、WordPress がサイトのコンテンツや設定を迅速に取得できるようになるため、読み込み時間を短縮できます。

ホスティングサービスに問い合わせれば、サイトで永続オブジェクトキャッシュを有効化できるかどうかがわかります。

未対策。

致命的な問題ではないし。
ちょっと調べるとキャッシュサーバーを使う必要がありそう。
VPSのメモリ使用量が気になるので、あまりポンポン処理を追加したくないため放置してます。
目次へ

予約したイベントが遅れています(パフォーマンス)

予約したイベント puc_cron_check_updates_theme-wp-cocoon-theme の実行が遅延しています。サイトは動作しますが、予約した投稿や自動更新は正しく動作しないかもしれません。

対策→Nginxでアクセス拒否したいたものを許可

恐らくこのアクセスがNginx(Modesecurity)で拒否されているのが原因。
access forbidden by rule, client: IP(ループバックアドレス), server: kikuichige.com, request: "POST /wp-cron.php HTTP/1.1"
これも/wp-jsonと同じく、自分以外のIPは/wp-cron.phpへアクセス拒否に設定していた。
そこで拒否されてるIP(ループバックアドレス)をNginx(Modesecurity)でアクセス許可した。

サイトでループバックリクエストが完了できませんでした(パフォーマンス)

ループバックリクエストは予約イベントの実行に使用されます。またテーマやプラグインの組み込みエディターでは、コードの安定性の確認に使用されます。ループバックリクエストは予期しない HTTP ステータスコード 403 を返しました。これが機能の想定どおりの動作を妨げてるかは判断できませんでした。

対策→他の対策で改善された

上で実行したどちらかの対策が効いた。
「REST API で予期しない結果が発生しました」の対策
/wp-jsonにIP(ループバックアドレス)のアクセス許可
「サイトでループバックリクエストが完了できませんでした」の対策
/wp-cron.phpにIP(ループバックアドレス)のアクセス許可

所感

今回とったページキャッシュのやり方は、WP Super Cache導入にしたが
私の環境ではベストな選択肢ではない気がしています。
WP Super Cache設定で改善できる可能性も0ではないので
おいおい調べていきます。
イチゲをOFUSEで応援する(御質問でもOKです)Vプリカでのお支払いがおすすめです。
MENTAやってます(ichige)
目次へ

タイトルとURLをコピーしました