「最初は速かったのに、最近めちゃくちゃ重い…」 「管理画面を開くのに30秒もかかる」 「アクセスが増えるとサーバーがダウンする」
WordPressサイトの80%以上が速度問題を抱えています。
でも、原因さえ特定できれば 表示速度を10倍速くすることも可能です!
この記事では、 重い原因の特定方法から具体的な対策まで、 優先順位付きで完全解説します。
【緊急度順】今すぐ確認すべき7つの原因

1. 不正アクセス・ボット攻撃(緊急度:★★★★★)
症状:
- 急激にサーバー負荷が上昇
- アクセスログが異常に多い
- CPU使用率100%
確認方法:
# リアルタイムアクセス確認
tail -f /var/log/apache2/access.log | grep -E "wp-login|xmlrpc|admin-ajax"
# 攻撃元IPの特定
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -rn | head -20
# WordPressログイン試行の確認
grep "wp-login.php" /var/log/apache2/access.log | wc -l
即効対策:
# .htaccessで攻撃をブロック
<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from あなたのIP
</Files>
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
2. プラグインの暴走(緊急度:★★★★☆)
重いプラグインTOP10:
- Jetpack(全機能ON時)
- WooCommerce(大規模ショップ)
- WPML(多言語サイト)
- Broken Link Checker
- WP Statistics
- All in One SEO(重複機能)
- Wordfence(フルスキャン時)
- Contact Form 7(大量スパム時)
- Revolution Slider
- Visual Composer系
診断プラグイン:Query Monitor
# インストール
wp plugin install query-monitor --activate
# 確認ポイント:
- Database Queries(クエリ数)
- Page Generation Time(生成時間)
- Memory Usage(メモリ使用量)
3. データベースの肥大化(緊急度:★★★★☆)
確認コマンド:
-- テーブルサイズ確認
SELECT
table_name AS 'Table',
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)'
FROM information_schema.TABLES
WHERE table_schema = 'wordpress_db'
ORDER BY (data_length + index_length) DESC;
-- 投稿リビジョン数確認
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';
-- 自動下書き数確認
SELECT COUNT(*) FROM wp_posts WHERE post_status = 'auto-draft';
-- スパムコメント数確認
SELECT COUNT(*) FROM wp_comments WHERE comment_approved = 'spam';
4. 画像の最適化不足(緊急度:★★★☆☆)
問題のある画像:
- 5MB以上の写真をそのままアップロード
- PNGで写真を保存
- WebP未対応
確認方法:
# 大きな画像ファイルを検索
find /var/www/html/wp-content/uploads -type f -size +1M -exec ls -lh {} \;
# 画像形式の統計
find /var/www/html/wp-content/uploads -type f \( -iname "*.jpg" -o -iname "*.png" -o -iname "*.gif" \) | wc -l
サーバーリソース診断
CPU・メモリ・ディスクの確認
# リアルタイムリソース監視
top
htop
# メモリ使用状況
free -h
# ディスク使用状況
df -h
# プロセスごとのメモリ使用量
ps aux | grep -E "apache|php|mysql" | awk '{sum+=$6} END {print "Total RSS: " sum/1024 " MB"}'
# MySQLの状態確認
mysqladmin -u root -p status
Apache/Nginxのチューニング
Apache(prefork)の設定例:
# /etc/apache2/mods-available/mpm_prefork.conf
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150 # メモリに応じて調整
MaxConnectionsPerChild 3000
</IfModule>
Nginxの設定例:
# /etc/nginx/nginx.conf
worker_processes auto;
worker_connections 1024;
# Gzip圧縮
gzip on;
gzip_vary on;
gzip_types text/plain text/css text/javascript application/javascript;
# ファイルキャッシュ
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
add_header Cache-Control "public, immutable";
}
WordPress本体の最適化

wp-config.phpの最適化設定
// リビジョン制限
define('WP_POST_REVISIONS', 3);
// 自動保存間隔を延長(秒)
define('AUTOSAVE_INTERVAL', 300);
// ゴミ箱自動削除(日)
define('EMPTY_TRASH_DAYS', 7);
// メモリ制限を増やす
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
// データベースクエリをログ
define('SAVEQUERIES', true);
// 管理画面のメモリ
define('WP_MAX_MEMORY_LIMIT', '256M');
// デバッグ(開発環境のみ)
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', false);
define('WP_DEBUG_DISPLAY', false);
データベース最適化
# MySQLチューニング(my.cnf)
[mysqld]
query_cache_type = 1
query_cache_size = 32M
query_cache_limit = 2M
tmp_table_size = 64M
max_heap_table_size = 64M
innodb_buffer_pool_size = 256M # RAMの25-50%
# テーブル最適化
mysqlcheck -u root -p --auto-repair --optimize wordpress_db
# WP-CLIでの最適化
wp db optimize
キャッシュ戦略(最重要)
レベル1:ブラウザキャッシュ
.htaccessに追加:
# ブラウザキャッシュの設定
<IfModule mod_expires.c>
ExpiresActive On
# 画像
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
# CSS/JS
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
# その他
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType font/woff2 "access plus 1 year"
</IfModule>
レベル2:ページキャッシュ
推奨プラグイン(軽い順):
- WP Super Cache
wp plugin install wp-super-cache --activate
- W3 Total Cache
wp plugin install w3-total-cache --activate
- LiteSpeed Cache(LiteSpeedサーバー限定)
wp plugin install litespeed-cache --activate
レベル3:オブジェクトキャッシュ(Redis)
# Redisインストール
sudo apt install redis-server
sudo systemctl enable redis-server
# PHPモジュール
sudo apt install php-redis
# WordPressプラグイン
wp plugin install redis-cache --activate
wp-config.phpに追加:
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_CACHE_KEY_SALT', 'yourdomain_');
画像最適化

自動圧縮プラグイン
推奨プラグイン:
- EWWW Image Optimizer(無料・高機能)
- Smush(無料枠あり)
- ShortPixel(高圧縮率)
WebP対応
# .htaccessでWebP配信
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{REQUEST_FILENAME} (.*)\.(jpe?g|png)$
RewriteCond %{REQUEST_FILENAME}.webp -f
RewriteRule (.+)\.(jpe?g|png)$ %{REQUEST_FILENAME}.webp [T=image/webp,E=accept:1]
</IfModule>
遅延読み込み(Lazy Load)
// functions.phpに追加
add_filter('wp_lazy_loading_enabled', '__return_true');
// または専用プラグイン
// a3 Lazy Load
// Lazy Load by WP Rocket
CDN導入
無料CDNサービス
Cloudflare(最も人気):
- cloudflare.comでアカウント作成
- ドメイン追加
- DNSをCloudflareに変更
- 以下を設定:
- SSL/TLS: Full
- Caching Level: Standard
- Browser Cache TTL: 1 month
日本国内CDN
- JPCDN:日本最適化
- ImageFlux:画像特化
- fastly:高速配信
不要データの削除
データベースクリーンアップ
-- リビジョン削除
DELETE FROM wp_posts WHERE post_type = 'revision';
-- 自動下書き削除
DELETE FROM wp_posts WHERE post_status = 'auto-draft';
-- ゴミ箱を空に
DELETE FROM wp_posts WHERE post_status = 'trash';
-- スパムコメント削除
DELETE FROM wp_comments WHERE comment_approved = 'spam';
-- 期限切れトランジェント削除
DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP();
DELETE FROM wp_options WHERE option_name LIKE '_site_transient_timeout_%' AND option_value < UNIX_TIMESTAMP();
プラグインでの自動化
# WP-Optimizeインストール
wp plugin install wp-optimize --activate
# 定期実行設定可能
高度な最適化
PHPバージョンアップ
# PHP 8.1以上推奨
sudo apt install php8.1 php8.1-fpm php8.1-mysql php8.1-xml php8.1-mbstring
# バージョン確認
php -v
OPcache有効化
; php.ini
[opcache]
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
データベース移行(大規模サイト)
# MariaDB 10.6+への移行
sudo apt install mariadb-server
# またはMySQL 8.0+
sudo apt install mysql-server-8.0
監視ツール
無料監視ツール
- Google PageSpeed Insights
- GTmetrix
- Pingdom Tools
- New Relic(無料枠)
サーバー監視
# 監視スクリプト
#!/bin/bash
# monitor.sh
echo "=== Server Status ==="
echo "CPU Usage:"
top -bn1 | grep "Cpu(s)" | awk '{print $2}'
echo "Memory Usage:"
free -h | grep Mem | awk '{print "Used: " $3 " / Total: " $2}'
echo "MySQL Queries:"
mysqladmin -u root -p processlist | wc -l
echo "Apache Connections:"
netstat -an | grep :80 | wc -l
トラブルシューティング

管理画面だけが重い
// functions.phpに追加
// Heartbeat APIの制限
add_action('init', function() {
wp_deregister_script('heartbeat');
});
特定ページだけ重い
# Query Monitorで特定
# デバッグバーで詳細確認
wp plugin install debug-bar --activate
緊急時の応急処置
# 全プラグイン無効化
mv wp-content/plugins wp-content/plugins_backup
# キャッシュクリア
rm -rf wp-content/cache/*
# Apache再起動
sudo systemctl restart apache2
# MySQL再起動
sudo systemctl restart mysql
まとめ:優先順位チェックリスト
今すぐやること(効果大):
✅ 不正アクセスのブロック
✅ キャッシュプラグイン導入
✅ 画像最適化
✅ データベース最適化
1週間以内にやること:
✅ CDN導入
✅ 不要プラグイン削除
✅ PHPバージョンアップ
定期メンテナンス:
✅ データベースクリーンアップ
✅ ログ監視
✅ バックアップ
これらの対策を実施すれば、 体感速度が3倍以上改善するはずです!
まずは原因を特定して、 優先順位の高いものから対策していきましょう。
コメント