WordPress管理画面が激重だったので本気で高速化した話

はじめに

自宅サーバー上で運用しているWordPressの管理画面が、実用性に支障が出るレベルで重くなっていた。

特に問題だったのは投稿画面。

/wp-admin/post-new.php

を開くだけで、体感1〜2分近く待たされることもあり、ブログを書くモチベーションが削られるレベルだった。

しかし最終的に、

  • Cloudflare最適化
  • Caddy + Apache構成見直し
  • wp-cron修正
  • CLS改善
  • robots.txt修正
  • Yoast SEO削除

などを行った結果、かなり快適な環境に改善できた。

この記事では、その実際の調査・改善内容をまとめる。


環境

  • macOS Monterey 上の Mac mini
  • Apache
  • Caddy reverse proxy
  • Cloudflare
  • Redis
  • WordPress
  • W3 Total Cache

構成イメージ:

Internet
↓
Cloudflare
↓
Caddy
↓
Apache
↓
WordPress

症状

管理画面が異常に遅い

特に投稿画面。

/wp-admin/post-new.php

を開くと非常に重い。

しかし不思議なことに、

  • 一度読み込みが止まる
  • 再読み込みすると爆速

という挙動をしていた。

この時点で、

初回アクセス
↓
キャッシュ未ヒット
↓
重い

二回目
↓
キャッシュHIT
↓
速い

という仮説を立てた。


curlで確認

まずはWordPress API応答を確認。

curl -I https://kiwamaqs.com/weblog/wp-json/

Cloudflare経由で、

cf-cache-status: DYNAMIC

になっていた。

つまりキャッシュが十分効いていなかった。


Cloudflare Cache Everything 導入

Cloudflare の Cache Rules を使い、

Cache Everything

を設定。

ただし、WordPress管理画面をキャッシュしてはいけないため、

/wp-admin
/wp-login.php
preview=true

は除外した。

設定後、

cf-cache-status: HIT

が出るようになり、一般閲覧速度がかなり改善した。


wp-cron 異常

サイトヘルスでは以下の警告が出ていた。

予約したイベント action_scheduler_run_queue の実行に失敗しました

WP-CLIを導入して確認。

wp cron event list

すると大量のcronが溜まっていた。

最終的にmacOS側crontabへ登録。

*/5 * * * * cd /path/to/wordpress && wp cron event run --due-now >/dev/null 2>&1

これでwp-cron関連が正常化した。


CLS(レイアウトシフト)問題

PageSpeed Insightsを見ると、

CLS 0.36

とかなり悪かった。

調査すると、原因はトップカルーセル画像。

div.carousel-inner > div.carousel-item > picture > img.slide-item-img

画像サイズ予約がされておらず、読み込み後にページ全体がズレていた。

CSSで修正

.carousel-inner,
.carousel-item,
.carousel-item picture {
  aspect-ratio: 1900 / 600;
  width: 100%;
  overflow: hidden;
}

.carousel-item img.slide-item-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

結果:

CLS 0

まで改善。

かなり体感が変わった。


robots.txt が壊れていた

PageSpeedで以下が出ていた。

robots.txt が無効
859件のエラー

確認すると、なんと robots.txt の中身が Yoast SEO の管理画面HTMLになっていた。

さらに、

Served by W3 Total Cache

となっており、古い管理画面キャッシュが robots.txt として配信されていた。

かなり危険な状態だった。

修正

robots.txt を手動修正。

User-agent: *
Disallow: /weblog/wp-admin/
Allow: /weblog/wp-admin/admin-ajax.php

Sitemap: https://kiwamaqs.com/weblog/sitemap.xml

これでSEOスコアは100になった。


Yoast SEO を削除

robots.txt問題もあり、Yoast SEOを削除。

代わりに既存の sitemap generator を利用。

結果として:

  • 管理画面が軽くなった
  • JS負荷減少
  • sitemap正常動作
  • SEOスコア100維持

となり、個人的にはかなり満足。


最終スコア

Before

  • 管理画面:激重
  • CLS:0.36
  • robots.txt破損
  • cron異常
  • Cloudflareキャッシュ弱い

After

  • SEO:100
  • CLS:0
  • FCP:0.5秒
  • LCP:2.1秒
  • TBT:90ms
  • Cloudflare HIT
  • 管理画面もかなり快適

感想

WordPress高速化というと、

サーバー性能

ばかり注目されがちだが、実際には:

  • キャッシュ
  • 画像レイアウト
  • robots.txt
  • SEOプラグイン
  • cron

などの積み重ねがかなり大きいと実感した。

特に今回は、

robots.txt に Yoast管理画面HTMLが配信されていた

のが衝撃だった。

また、Cloudflare + Caddy + Redis の組み合わせはかなり強力で、適切に調整すれば個人運営でもかなり快適なWordPress環境を作れると感じた。


おわりに

管理画面が重いと、ブログを書く気力そのものが削られる。

逆に、サクサク動くと「ちょっと記事を書こうかな」という気持ちになれる。

WordPress運営は、快適性そのものがモチベーションに直結するのだと改めて感じた。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

王様の耳はロバの耳

前の記事

損得勘定New!!