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運営は、快適性そのものがモチベーションに直結するのだと改めて感じた。
