2026年10月20日

2026年10月20日

WordPressのサイトヘルススコアを100点にする方法

はじめに

WordPress 5.2以降に搭載された「サイトヘルス」機能は、サイトのセキュリティやパフォーマンスに影響する問題を自動的に検出してスコアとして表示します。スコアが低いとSEOや表示速度にも悪影響を及ぼすため、100点(グッド)を目指すことが重要です。本記事では、サイトヘルスの仕組みを理解しながら、スコアを最大化するための具体的な手順を解説します。

症状・原因

  • サイトヘルス画面で「重大な問題」や「改善の余地あり」が表示される
  • PHPバージョンが古いと警告が出る
  • SSL証明書の問題が検出される
  • スケジュールイベント(wp-cron)が正常に動作していない
  • ループバックリクエストが失敗している
  • 非推奨のPHP関数を使用しているプラグインがある

解決手順

ステップ1:サイトヘルスの現状確認とWP-CLIによる診断

まず現在のサイトヘルス状態を把握します。管理画面の「ツール」→「サイトヘルス」から確認できますが、WP-CLIを使うとより詳細な情報が得られます。

# サイトヘルスステータスの確認
wp site-health status

# デバッグ情報の一覧表示
wp site-health check

# PHP情報の確認
wp eval 'phpinfo();'

# スケジュールイベントの確認
wp cron event list

# 期限切れのcronイベントを再スケジュール
wp cron event run --due-now

WP-CLIが使えない場合は、wp-admin/site-health.php に直接アクセスして「情報」タブから詳細を確認してください。

ステップ2:PHPバージョンとモジュールの最適化

PHPのバージョンはサイトヘルスに大きく影響します。PHP 8.1以上を推奨します。

// functions.php または mu-plugins に追加
// PHPバージョンチェックのカスタムフィルター
add_filter( 'site_status_tests', function( $tests ) {
    // 既存テストを上書きして独自のPHPバージョン推奨を追加
    $tests['direct']['custom_php_check'] = array(
        'label' => __( 'PHP バージョン最適化チェック', 'textdomain' ),
        'test'  => function() {
            $result = array(
                'label'       => 'PHP バージョンは最新です',
                'status'      => 'good',
                'badge'       => array( 'label' => 'パフォーマンス', 'color' => 'blue' ),
                'description' => '<p>PHP 8.2以上が推奨されます。</p>',
                'actions'     => '',
                'test'        => 'custom_php_check',
            );
            if ( version_compare( PHP_VERSION, '8.1', '<' ) ) {
                $result['status'] = 'critical';
                $result['label']  = 'PHPバージョンをアップグレードしてください';
            }
            return $result;
        },
    );
    return $tests;
} );

ステップ3:SSL証明書とHTTPS設定の修正

SSL関連の警告を解消するには、wp-config.php とサーバー設定の両方を確認します。

// wp-config.php に追加
define( 'FORCE_SSL_ADMIN', true );

// HTTPSリダイレクトを強制(.htaccess または wp-config.php)
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) 
    && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) {
    $_SERVER['HTTPS'] = 'on';
}

// WordPress URLをHTTPSに更新
// wp-config.php に追加
define( 'WP_HOME', 'https://example.com' );
define( 'WP_SITEURL', 'https://example.com' );

// または WP-CLI で更新
// wp option update siteurl 'https://example.com'
// wp option update home 'https://example.com'
// wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid

ステップ4:ループバックリクエストの修正

ループバックリクエストの失敗は、wp-cronや自動更新の妨げになります。

// mu-plugins/fix-loopback.php として保存
<?php
/**
 * ループバックリクエストの問題を修正
 */

// HTTP リクエストのタイムアウトを延長
add_filter( 'http_request_timeout', function( $timeout ) {
    return 30; // デフォルト5秒を30秒に延長
} );

// ループバックリクエストのホスト検証を修正
add_filter( 'http_request_host_is_external', function( $external, $host ) {
    $site_host = parse_url( get_option( 'siteurl' ), PHP_URL_HOST );
    if ( $host === $site_host || $host === 'localhost' ) {
        return false; // 内部ホストとして扱う
    }
    return $external;
}, 10, 2 );

// Basic認証環境でのループバック修正
add_filter( 'http_request_args', function( $args, $url ) {
    $site_url = get_option( 'siteurl' );
    if ( strpos( $url, $site_url ) === 0 ) {
        // 内部リクエストに認証情報を追加(必要な場合)
        // $args['headers']['Authorization'] = 'Basic ' . base64_encode( 'user:pass' );
    }
    return $args;
}, 10, 2 );

ステップ5:デバッグ情報のカスタマイズとカスタムチェック追加

debug_information フィルターを使ってサイト固有の情報を追加できます。

// カスタムデバッグ情報を追加
add_filter( 'debug_information', function( $info ) {
    $info['custom-server-info'] = array(
        'label'       => 'カスタムサーバー情報',
        'description' => 'サイト固有の設定情報',
        'show_count'  => false,
        'fields'      => array(
            'php_memory_limit' => array(
                'label' => 'PHPメモリ制限',
                'value' => ini_get( 'memory_limit' ),
                'debug' => ini_get( 'memory_limit' ),
            ),
            'max_execution_time' => array(
                'label' => '最大実行時間',
                'value' => ini_get( 'max_execution_time' ) . '秒',
                'debug' => ini_get( 'max_execution_time' ),
            ),
            'upload_max_filesize' => array(
                'label' => '最大アップロードサイズ',
                'value' => ini_get( 'upload_max_filesize' ),
                'debug' => ini_get( 'upload_max_filesize' ),
            ),
        ),
    );
    return $info;
} );

// 非同期テストの追加(バックグラウンドで実行)
add_filter( 'site_status_tests', function( $tests ) {
    $tests['async']['custom_db_check'] = array(
        'label'             => 'データベース最適化チェック',
        'test'              => rest_url( 'wp-site-health/v1/tests/custom-db-check' ),
        'has_rest'          => true,
        'async_direct_test' => 'my_custom_db_test_callback',
    );
    return $tests;
} );

注意事項

  • PHPバージョンをアップグレードする前に、すべてのプラグイン・テーマとの互換性をステージング環境で確認してください
  • ループバックリクエストの修正時、Basic認証が有効な環境では認証情報の漏洩に注意してください
  • カスタムチェックを追加する際は、処理が重いテストは必ず非同期(async)として登録してください
  • wp-cronが正常に動作しない場合は、サーバーの実際のcronジョブを使用することを検討してください(define('DISABLE_WP_CRON', true))
  • スコアが100点でも、セキュリティプラグインによる追加チェックは引き続き実施してください

まとめ

WordPressのサイトヘルススコアを100点にするには、PHP環境の最適化、SSL設定の確認、ループバックリクエストの修正、wp-cronの正常化が主要なポイントです。add_filter('site_status_tests') を活用すれば独自のチェック項目を追加でき、debug_information フィルターでサイト固有の情報も管理画面から確認できます。WP-CLIを併用することで、コマンドラインから効率的に問題を診断・修正できます。定期的なサイトヘルスチェックを習慣づけることで、サイトのセキュリティとパフォーマンスを高い水準で維持できます。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲