WordPress のシステム最適化で、サイトの表示パフォーマンスが PageSpeed Insights スコア値で73から96へと劇的に改善!

⌛この記事を読むのにかかる時間: 8

update 最終更新日:2026年7月1日 at 9:05 AM

本サイト senris.com は、代表的な CMS の一つである WordPress をベースに構築していますが、これまでに非常に多くのプラグインをインストールした事でシステムが肥大化した結果、パフォーマンスが急激に低下し、表示速度が極端に遅くなっていました。表示速度の低下は、SEOにも悪影響を及ぼします。

これまで、WordPress システムのパフォーマンス改善のため、以前から対応していた「Googleアドセンスの遅延読み込み」やプラグイン Jetpack Boost などで対応していましたが、それだけでは大きな効果が発揮できませんでした。

そのため、更なるパフォーマンスの改善を目指すべく、2026年4月から6月にかけて、プラグンの見直し(アンインストールや代替機能での対応)、キャッシュプラグイン「WP Fastest Cache」の導入DBの最適化スクリプトの抑制アクセス解析CGIの軽量化 など、一連のシステム最適化を実施しパフォーマンスの改善を図りました。

その過程において、クロスサイトスクリプティング(XSS)の脆弱性が報告されている「ジャストシステム・ホームページビルダー」の WordPress テーマに付属のダッシュボードプラグイン「hpb Dashboard」をアンインストールし、シェアボタンのデザインを変更しました。

その結果、快適にWebページが表示されるようになり、パフォーマンスの指標を示す Google PageSpeed Insights のスコア値が 73 から 96 へと大幅に改善し、パフォーマンスが劇的に改善しました。

PageSpeed Insights (PSI) とは、Webページの読み込み速度とユーザーエクスペリエンスを測定し、改善案を提案する Google の無料ツールです。モバイルとパソコン両方のデバイスに対応しており、URL を入力するだけで詳細なレポートを生成します。
そのレポートにおいて、サイトの評価基準を示す「スコアの基準」は以下の通りです。

📈 スコアの基準

パフォーマンス、アクセシビリティ、おすすめの方法、SEOなどのカテゴリごとに、0〜100のスコアで評価されます。

  • 🟢 90 〜 100: 良好 (Good)
  • 🟡 50 〜 89: 改善が必要
  • 🔴 0 〜 49: 不良 (Poor)

以降、時系列でシステム最適化の実施内容を詳しく解説します。

プラグインの見直し

サーバー負荷の一因でもあるシステムの無駄なぜい肉を落とすため、普段使わない WordPress プラグインは、必要な時だけ一時的にインストールして使い、基本的には使用頻度の低いプラグインは全てアンインストールしました。
これにより、システムが軽量化され WordPress の起動速度が速くなります。

また、監査機関より深刻な脆弱性が報告されたプラグインや、長期にわたって更新されず放置されたプラグイン、処理が極端に重いプラグインなどもアンインストール対象とします。
アンインストールしたプラグインについては、プラグインやウィジェット、ショートコードなど、代替方法を調査し、可能ならば自作開発で対応します。

それらの対象プラグインは、以下の通りです。

Archives Calendar Widget ⇒ 自作「カスタムカレンダーウィジェット」で代替

「Archives Calendar Widget」は、様々なデザインでカスカム投稿を含めたカレンダーが表示できるプラグインです。
しかし、このプラグインは、WordPressのセキュリティ監査機関(Wordfence や WPScan)の報告通り、本プラグインの最終バージョン(1.0.15)には Stored Cross-Site Scripting (XSS / 蓄積型クロスサイトスクリプティング) の脆弱性が発見されています(CVE-2024-33950)。
開発者が修正版(Patch)を出さないまま開発を放棄したため、公式ディレクトリから永久閉鎖(BAN)されました。
そのため、このプラグインを使い続けることは危険と判断し、アンインストールした後、以下の記事で既報した自作の「カスタムカレンダーウィジェット」で代替しました。

カスタムカレンダーウィジェットは、WordPress コアのキャッシュ (Object Cache) に対応させたため、Archives Calendar Widget と比べ、ページ表示のオーバーヘッドが大幅に改善されました。

Auto Limit Posts Reloaded ⇒ 自作で代替

「Auto Limit Posts Reloaded」は、WordPressで投稿記事を自動的に抜粋し、アーカイブページ等に「続きを読む」ボタンを挿入するためのプラグインです。
しかし、現在はクロスサイトリクエストフォージェリ(CSRF)の脆弱性が報告されているため、セキュリティの観点から使用を避けることが推奨されています。

そのため、以下の記事に示す通り、プラグインをアンインストールし、ホームページビルダーのテーマのプログラム (functions.php) にて代替対応しました。

BackWPup ⇒ アンインストール 

「BackWPup」は、WordPress サイトを丸ごとバックアップできる無料プラグインです。
しかし、このプラグインはサーバーへの負荷が大きく重いので、アンインストールしました。バックアップは、プラグイン「UpdraftPlus」だけで間に合います。

Broken Link Checker ⇒ アンインストール

「Broken Link Checker」は、リンクと画像のリンク切れをチェックするプラグインですが、サーバー負荷が非常に大きいため、アンインストールしました。サイト内のリンク切れ(404エラー)のチェックは、Google Search Console で対応できます。

Cool Tag Cloud ⇒ 自作で代替

「Cool Tag Cloud」は、カラフルでレスポンシブなタグクラウドを実装するプラグインです。
しかし、このプラグインには、Stored XSS(格納型クロスサイトスクリプティング)という深刻な脆弱性(CVE-2025-13614)が報告されています。2025年12月には、WordPress公式ディレクトリから一時停止されており、現時点でも修正版はリリースされていません。

よって、本プラグインをアンインストールし、代わりに自作のタグクラウドで対応しました。自作タグクラウドの構成は、プラグインには依存しないものとし、標準タグクラウド + 「追加CSS」の構成で以下の記事の通り Gemini に作成を依頼しました。

Custom Post Type Cleanup ⇒ アンインストール

「Custom Post Type Cleanup」は、使っていないカスタム投稿タイプの記事やメタデータを削除することができるプラグインです。
しかし、このプラグインは常時使う事はなく、また現在の環境で動作する保証はないため、アンインストールしています。

hpb Dashboard ⇒ アンインストール

「hpb Dashboard」は、ジャストシステムの「ホームページビルダー」に付属する WordPress テーマのダッシュボードプラグインです。
しかし、このプラグインは、過去にクロスサイトスクリプティング(XSS)の脆弱性(JVNDB-2022-011771)が報告されているため、アンインストールします。
脆弱性に関しては、恐らくフォーム機能(パッチ適用済み)に起因するのではないかと思われますが、定かではありません。WordPress のサポートフォーラムへは、この件で過去に私が報告しています(WordPress.org サポートフォーラム)。

本番サイトでは、ダッシュボードプラグイン(メインプログラム: hpbtools.php)において、Google Analytics (サブモジュール: google_analytics.php)とソーシャルボタン設定 (サブモジュール: social_buttons.php) の機能を使用しているため、それらの機能を他のプラグインや自作プログラムなどで代替すれば、無効化&アンインストールが可能となります。

既に、テストサイトではダッシュボードプラグインのアンインストールに成功しており、hpb Dashboard が無くても正常に動作が可能であることが検証済です。ダッシュボードプラグインをアンインストールすると、無駄な処理が無くなるため、処理速度も向上します。

当サイトでは、長年に渡ってテーマのプログラムに手を入れ、がっつりカスタマイズしています。かなり古いテーマ(クラシックテーマ)なので、手を入れないことには最新の WordPress では正常に動作しなくなるためです。そのため、今さらテーマを入れ替えるのは困難な状況です。

ここでは、「Google Analytics 4」と「ソーシャルボタン」への対応について、以下で詳しく説明します。

Google Analytics 4 への対応

ダッシュボードプラグイン「hpb Dashboard」がインストールされていない、または無効化されていても「Google Analytics (GA4) 」のグローバルサイトタグ「Global site tag (gtag.js) 」が出力できるようにするスクリプトを以下のとおり、テーマの header.php に追加します(15行、69~92行)。

これにより、ダッシュボードプラグインが無くても Google Analytics 4 のグローバルサイトタグが管理者ページ以外で出力されるようになります。

<?php
/**
 * The Header for our theme.
 *
 * Displays all of the <head> section and everything up till <div id="main">
 *
 * @package _hpb
 */

// 各ファイルの更新日時(タイムスタンプ)を自動取得してキャッシュバスターにする
$style_ver = file_exists(get_template_directory() . '/style.css') ? filemtime(get_template_directory() . '/style.css') : '1.0';
$hpb_ver   = file_exists(get_template_directory() . '/style-hpb.css') ? filemtime(get_template_directory() . '/style-hpb.css') : '1.0';

// GA4の測定ID設定
$hpb_tracking_id = 'G-**********';
?>

<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="facebook-domain-verification" content="******************************" />
<title><?php wp_title( '|', true, 'right' ); ?></title>
<link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>?ver=<?php echo $style_ver; ?>" type="text/css" />
<link rel="stylesheet" id="style-hpb18-css" href="<?php echo get_template_directory_uri(); ?>/style-hpb.css?ver=<?php echo $hpb_ver; ?>" type="text/css" media="all" />

<!--[if lte IE 7]>
<link rel='stylesheet' href="<?php echo get_template_directory_uri(); ?>/style-ie7.css" type='text/css' />
<![endif]-->

<link rel="profile" href="http://gmpg.org/xfn/11" />
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />

<!--[if lt IE 9]>
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script>
<![endif]-->

<!-- Favicon定義 16/32/48 -->
<link rel="shortcut icon" href="/favicon.ico">

<!--日本語(地域:日本)-->
<link href="https://senris.com/" rel="alternate" hreflang="ja-jp" />

<!--英語-->
<link href="https://senris.com/?lang=en" rel="alternate" hreflang="en" />

<!--Google Adsense-->
<script>
//<![CDATA[
//lazy load ads
var lazyloadads = false;
window.addEventListener("scroll", function() {
	if ((document.documentElement.scrollTop != 0 && lazyloadads === false) || (document.body.scrollTop != 0 && lazyloadads === false)) {
		(function() {
			var ad = document.createElement('script');
			ad.type = 'text/javascript';
			ad.async = true;
			ad.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1234567890123456';
			var sc = document.getElementsByTagName('script')[0];
			sc.parentNode.insertBefore(ad, sc);
		})();
		lazyloadads = true;
	}
}, true)
//]]>
</script>

<?php
// プラグインの判定関数を安全に読み込む
if ( ! is_admin() ) {
    include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
    
    // 'hpb Dashboard' が【インストールされていない】または【無効化されている】場合だけ実行
    if ( ! is_plugin_active( 'hpbtool/hpbtools.php' ) ) {
        
        // 変数 $hpb_tracking_id が定義されていない場合の保険(必要に応じて実際のIDへ書き換え)
        $hpb_tracking_id = isset($hpb_tracking_id) ? $hpb_tracking_id : 'G-XXXXXXXXXX';
        ?>
        <!-- Global site tag (gtag.js) - Google Analytics -->
        <script async src="https://www.googletagmanager.com/gtag/js?id=<?php echo esc_attr($hpb_tracking_id); ?>"></script>
        <script>
          window.dataLayer = window.dataLayer || [];
          function gtag(){dataLayer.push(arguments);}
          gtag('js', new Date());

          gtag('config', '<?php echo esc_js($hpb_tracking_id); ?>');
        </script>
        <?php
    }
}
?>
<?php wp_head(); ?>
</head>


上記のコードで、マークしたところは、以下に示したオリジナルプログラムへの追記部分(追加機能)を表します。
コメントに書かれた「lazy load ads」(アドセンスの遅延読み込み)については後述しますが、style.css の「キャッシュバスター」についての説明は、この記事を参照してください 👉 テーマのCSSをキャッシュバスターに対応

<?php
/**
 * The Header for our theme.
 *
 * Displays all of the <head> section and everything up till <div id="main">
 *
 * @package _hpb
 */
?><!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title><?php wp_title( '|', true, 'right' ); ?></title>
<link rel="stylesheet" href="<?php bloginfo ( 'stylesheet_url' ); ?>" type="text/css" />
<link rel="stylesheet" id="style-hpb18-css" href="<?php echo get_template_directory_uri(); ?>/style-hpb.css" type="text/css" media="all" />
<!--[if lte IE 7]>
<link rel='stylesheet' href="<?php echo get_template_directory_uri(); ?>/style-ie7.css" type='text/css' />
<![endif]-->
<link rel="profile" href="http://gmpg.org/xfn/11" />
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />
<!--[if lt IE 9]>
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script>
<![endif]-->
<?php wp_head(); ?>
</head>
** 以下略

ソーシャルボタンへの対応

ダッシュボードプラグインに組み込まれているソーシャルボタン設定機能(サブモジュール: social_buttons.php)は、以下の記事で書かれた方法により、本来は「いいね!」ボタン用のスクリプトを Graph API を介してシェア数表示に対応する「シェアする」ボタンに書き換えることが可能です(旧デザイン)。

しかしながら、シェア数を表示させるためには、「アプリID」の取得と「ユースケース」の選択が必要であり、現在の仕様では、アプリを使用するためのメタ社へのビジネス認証が必須となっています。
ビジネス認証の審査が通り、アプリを「ライブモード(公開)」に切り替えることで、初めて Facebook のシステム(Graph API)が正常に機能するようになります。

ビジネス認証の審査は、メタ社の AI「ビジネスサポートホーム」が窓口となっていますが、手続きが複雑怪奇な上、審査が一向に進まない原因を問い合わせた際、担当外で答えられないという理由で AI の担当部署間でたらい回しに遭うことが頻繁に発生し辟易しました。これは、メタ社が巨大で官僚的な組織で、指示系統が縦割りになっているための弊害かと思います。それにメタのサーバーは不具合が多くダウンも頻繁です。

ビジネス認証の申請後のプロセスにおいては、システム内部で処理が途中で止まってしまい、ステータスが「審査中」のままメタからは何の通知もなく何か月も放置されるようなケースが多発しているそうで、これは世界的な問題にもなっているようです。

実際のところ、当方もメタからの依頼を受け、ドメイン認証と本人確認用ページまで作成させられ、クレジットカード登録に加え、追加書類としてマイナンバーカードまで提出しているのですが、2か月以上経っても全く音沙汰なしです。メタの AI に問い合わせでも「審査が立て込んでいて忙しい。審査には時間が掛かるので待ってくれ。」という内容のテンプレート的な答えしか返ってきません。

巷では、メタの「ビジネス向けの有料サブスクリプション」に契約し、AI ではなく人間のサポートを受ければ、解決へ向かうという話もありますが、お金をドブに捨てるだけの結果になるかもしれません。

それに加えて、仮に審査にパスしたとしても、メタは既にシェア数の取得・表示を廃止の方向へ舵を切っている状況であるため、今後シェア数が正常に表示される保証もありません。

そのため、シェア数の表示に拘らないのであれば、テーマのソーシャルボタン機能を使わずに、以下のシェアボタン表示プラグイン「AddToAny Share Buttons」で代替する方式がメタ社の呪縛から解放され、一番スッキリできる解決法ではないかと思います(新デザイン)。

AddToAny Share Buttons をインストールすれば、ダッシュボードプラグインは完全に不要となり、これで無事にアンインストールする事ができるようになります。

なお、ダッシュボードプラグインのソーシャルボタン設定で、オプションボタン「OGPを自動設定する」を選択している場合は、social_buttons.php から OGP 情報が出力される仕様ですが、OGP については後述する「Rank Math SEO」プラグインでサポートされています。

ホームページビルダーの WordPress テーマでサポートされている「パンくずリスト出力機能」(breadcrumb.php)については、表示のみをテーマに任せ、構造化データ(JSON-LD + schema.org)の出力を、後述する「Rank Math SEO」から出力する設定にできます。
Rank Math SEO では、ソーシャルメタの設定で「Facebook アプリID」、「Facebook シークレットID」も設定できます。

現在は、試験的に AddToAny Share Buttons を有効化し、hpb Dashboard は無効化していますが、このままビジネス認証の審査が膠着状態ならば、見切りをつけ hpb Dashboard を完全にアンインストールします。

Jetpack Boost  ⇒ WP Fastest Cache に交換

「Jetpack Boost」は、Webサイトの表示速度を向上させるためのツールであり、Automattic 社が提供するプラグインです。
Jetpack Boost で「JS を連結する」の機能は、コアサーバー(V1)において、サーバー側のWAF(ファイアウォール)の設定をONにした場合、即ち「WordPressログイン制限(海外IPからのアクセス制限)」をONにすると、「HTTP エラー 403」となり機能しません。
また、Jetpack Boost で「JS を連結する」と「CSS を連結する」の2点だけの機能を使用するのならば、キャッシュプラグイン「WP Fastest Cache」で対応できるため、Jetpack Boost をアンインストールし、代わりにキャッシュプラグインとしてユーザ評価の高い WP Fastest Cache をインストールしました。

Media Cleaner ⇒ アンインストール

「Media Cleaner」は、WordPress のメディアライブラリを整理し、使っていない画像や不要なファイルを効率的に削除できるプラグインです。
しかし、このプラグインは常時使う事はないため、アンインストールしました。

mb.miniAudioPlayer ⇒ Audioブロック&CSSで代替

mb.miniAudioPlayer」は、ウェブサイトにMP3やOGGなどの音声ファイルを埋め込むための軽量なHTML5/jQueryベースのプラグインです。
しかし、このプラグインは2021年11月のバージョン1.9.7を最後に、4年以上アップデートが行われていません。今後新しく危険な脆弱性が発見されても、修正パッチが提供されない可能性が非常に高いためアンインストールしました。
その代わりに、Gemini の監修にてデザイン調整で、以下のCSSを追加し標準の「Audioブロック」で対応しました。

/* 黒背景のサイトに最適化したミニ音声プレイヤー(左寄せ・極細ネオン版) */
.wp-block-audio audio {
    display: block;
    max-width: 280px;  
    height: 28px; 
    margin: 21px auto 21px 0;
    border-radius: 30px;
    
    /* 
       1つ目の影:プレイヤーのキワを白くクッキリ光らせる(1pxの輪郭線のような効果)
       2つ目の影:外側に白くボヤッと広がる柔らかな光(グロウ効果)
    */
    box-shadow: 0 0 4px 1px rgba(255, 255, 255, 0.6), 
                0 0 12px 2px rgba(255, 255, 255, 0.2);
    
    transition: all 0.3s ease;
}

/* マウスを乗せたときに、さらに光を強くする演出 */
.wp-block-audio audio:hover {
    transform: translateY(-2px);
    /* マウスホバーで光の範囲と強さをアップ */
    box-shadow: 0 0 6px 1px rgba(255, 255, 255, 0.8), 
                0 0 16px 4px rgba(255, 255, 255, 0.3);
}

Plugins Garbage Collector (Database Cleanup) Old! ⇒ アンインストール

「Plugins Garbage Collector」は、WordPress のデータベースをスキャンして、プラグインが以前使用していた古いデータ(テーブル)を削除できるプラグインです。
しかし、このプラグインは常時使う事はないため、アンインストールしました。なお、不要なテーブルの削除は、WP-Optimize にも機能が備わっているため、基本的にこのプラグインは不要です。

Really Simple CAPTCHA ⇒ アンインストール

Contact Form 7 のセットでインストールされていたプラグイン「Really Simple CAPTCHA」は、セキュリティレベルが低く、最早存在することがデメリットでしかないため、アンインストールしました。
Contact Form 7 の「外部 API とのインテグレーション設定」においては、SPAM対策として、既に Akismet, reCAPTCHA を選択しているため、Really Simple CAPTCHA は全く不要です。

Regenerate Thumbnails ⇒ アンインストール

「Regenerate Thumbnails」は、メディアライブラリにアップされている1枚または複数の画像から、すべてのサムネイルサイズの再生成を可能にするプラグインです。
しかし、このプラグインは常時使う事はないため、アンインストールしています。

ResponsiveVoice Text To Speech ⇒ 自作で代替

「ResponsiveVoice Text To Speech」は、指定したテキストを自動で読み上げてくれるWordPressプラグインです。
しかし、本プラグインをインストールすると記事の読み込みにおいて、毎回2.1秒もの読み込み待ちが生じ、PageSpeed Insights のスコアを大きく下げ、Google のSEO評価をも下げる要因となっていたので、サーバー負荷軽減のために、アンインストールしました。

なお、ResponsiveVoice のアンインストールに併せて、テーマの header.php(または footer.php)から ResponsiveVoice のスクリプトタグも削除する必要があります。

よって、ResponsiveVoice の代替策として、以下の記述形式でブラウザのテキスト読み上げ機能をショートコード「say」で呼び出せるようにするため JavaScript による実装で functions.php 内へのスニペット追加で対応しました。

[say]Interrupt me, if you need me.[/say]

実行結果: Interrupt me, if you need me.

ちなみに、ショートコード「say」の実装については、各種ブラウザに対し女性の合成音声により、音声読み上げ機能をコール可能とするスペックで Gemini に作成して貰いました。
詳しくは以下の記事にて…

SlimStat Analytics ⇒ WP Statistics に交換

「Slimstat Analytics」は、WordPress サイトのアクセス解析をすることができるプラグインです。
しかし、WordPress 6.9.4 以降において、SlimStat Analytics バージョン 5.4.1 で深刻なバグによるトラブルが発生し不安定な状態が続いたため、SlimStat Analytics プラグインをアンインストールし、以下のプラグイン WP Statistics をインストールしました。

WP Maintenance Mode & Coming Soon ⇒ アンインストール

現在、プラグイン名は「LightStart – Maintenance Mode, Coming Soon and Landing Page Builder」に変更されています。
サイトが完成するまでは、まだサイトをメンテナンスモード(非公開)にしたい場合に使用するプラグインですが、先ず使うことはないため、アンインストールしました。

XO Event Calendar ⇒ アンインストール

「XO Event Calendar」は、WordPress のシンプルなイベント カレンダー プラグインです。
しかし、XO Event Calendar は、2026年1月に「作者からのリクエスト」により永久的に公開停止(クローズ)されています。セキュリティ上の致命的な問題の修正が困難だった、あるいは開発者がサポートを完全に放棄したことを意味しており、今後安全性が担保される見込みはゼロです。

現在、以下リンク先に示す「蓄積型クロスサイトスクリプティング(Stored XSS)」による脆弱性が報告されているため、このまま使い続けることは危険と判断し、残念ですがアンインストールしました。
CVE記録:CVE-2026-0556

Yoast SEO ⇒ Rank Math SEO に交換

「Yoast SEO」は、1,000万以上のサイトで利用されている世界的に非常に人気の高いWordPress 向け SEO プラグインです。
しかし、Yoast SEO バージョン 27.3 において、他プラグインとの干渉が原因と思われますが、Yoast SEOの設定画面で「投稿」をクリックすると、「t.split is not a function」のエラーが出て設定不可となったため、以下のプラグイン「Rank Math SEO」に乗り換えました。Rank Math SEO では、Yoast SEOの設定をそのまま引き継ぐことができます。
Rank Math SEO へ乗り換えた利点は、不安定で重い Yoast SEO と比べ、無料版で利用できる機能が圧倒的に充実していること、セットアップが容易なこと、そして動作が軽快であるということです。

Rank Math SEO プラグインのインストールで、OGP情報は自動出力されます。
Rank Math SEO のモジュール設定では、「スキーマ(構造化データ)」、「パンくずリスト」、「サイトマップ」、「インスタントインデックス」、「コンテンツ AI」の機能を有効にすると良いでしょう。

そして、Yoast SEO をアンインストールした結果、Firelight Lightbox の表示不具合が解消され、不具合対策用の一時的なプラグイン「Load Combined Core Block Assets」も不要になりました!

なお、Yoast SEO はアンインストールしてもDBテーブルのゴミが残るため、奇麗にしたいのならば、プラグン「WP-Optimize」のクリーンアップ(不要テーブルの削除)でお掃除ができます。

キャッシュプラグイン「WP Fastest Cache」の導入

「Jetpack Boost」ではあまりパフォーマンスの改善が見られなかったため、Gemini の勧めでユーザ評価が高く、動作が一番安定していて、簡単な設定でサイトの高速化が図れるというキャッシュプラグイン「WP Fastest Cache」をインストールしました。

以下は、WP Fastest Cache の設定画面です。このプラグインは、UX がとてもシンプルなので使い易いです。そして、インストール後、サイトの表示スピードが体感的に速くなりました。


なお、以下の例は、テキストウィジェットに定義した WP Statistics のショートコードを Ajax に対応させる方法です。試した結果、現在は有料プランのアドオン「Rest API Add-on」をアクティベートしないと Ajax は機能しないようです。

<div class="wp-statistics-widget">訪問者数: [wpstatistics stat=visitors time=today ajax=1] / [wpstatistics stat=visitors time=yesterday ajax=1] ([wpstatistics stat=usersonline ajax=1] オンライン)
全ページビュー数: [wpstatistics stat=visits time=today ajax=1] / [wpstatistics stat=visits time=yesterday ajax=1]
現ページビュー数: [wpstatistics stat=pagevisits time=today ajax=1] / [wpstatistics stat=pagevisits time=yesterday ajax=1]</div>


よって、「ページの一部(ウィジェット)だけをキャッシュしない」という設定は、WP Fastest Cache の無料版では物理的に不可能であるため、無料版で運用する場合の妥協策として、以下の設定「タイムアウト ルール」に示すように、1時間に1回のタイミングでキャシュを自動クリアする設定で対応させました。

アドセンスの遅延読み込み

「Google AdSense」によるパフォーマンスの低下が顕著であったため、header.php に貼り付けているアドセンスのコードを以下のように修正し対応しています。

<!--Google Adsense-->
<script>
//<![CDATA[
//lazy load ads
var lazyloadads = false;
window.addEventListener("scroll", function() {
	if ((document.documentElement.scrollTop != 0 && lazyloadads === false) || (document.body.scrollTop != 0 && lazyloadads === false)) {
		(function() {
			var ad = document.createElement('script');
			ad.type = 'text/javascript';
			ad.async = true;
			ad.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1234567890123456';
			var sc = document.getElementsByTagName('script')[0];
			sc.parentNode.insertBefore(ad, sc);
		})();
		lazyloadads = true;
	}
}, true)
//]]>
</script>
<!--
オリジナルコード「<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1234567890123456"
     crossorigin="anonymous"></script>」
-->


アドセンスの遅延読み込みは、サイトの初期表示速度(PageSpeed Insightsのスコアなど)を劇的に改善する有効な手段です。ページ読み込み時ではなく、ユーザーが広告の場所までスクロールした時(またはボタンをクリックした時)に初めて広告データを読み込む設定を行います。

DBの最適化

DBの最適化は、プラグン「WP-Optimize」を使用します。WP-Optimize とは、WordPress サイトのデータベースを掃除し、ページの表示速度を高速化するための定番プラグインであり、自動で蓄積される不要データを削除したり、画像を圧縮してサイトの軽量化を自動化できます。

WP-Optimize で MyISAM から InnoDB への移行

現在構築されるシステムでは、安全性と並行処理に優れた InnoDB がデフォルトとなっています。しかし、古いシステムで MyISAM を使用している場合、データの整合性やパフォーマンス向上のために InnoDB への移行が推奨されています。
現在の MySQL/MariaDB は InnoDB が標準であり、多くの WordPress プラグインも InnoDB を前提に設計されています。

以下のように、WP-Optimize のメニュー「データベース ≫ テーブル」を選択し、旧システムで作られた MyISAM 方式のテーブルを InnoDB へ変換します。
なお、万が一に備え、変換処理を行う前に WP-Optimize の別タブ(UpdraftPlusなど)やサーバーの管理画面からデータベースのバックアップを必ず実行してください。


変換が終わったら、WP-Optimizeの「キャッシュ」タブから一度キャッシュを削除しておくと、最新のデータベース状態が反映されて確実です。

WP-Optimize で 不要なテーブルを削除

「Yoast SEO」はアンインストールしても以下のように、DBテーブルのゴミが残り、レスポンスが悪くなるので、WP-Optimize で不要テーブルを削除します。
なお、念のためバックアップは取ってください。UpdraftPlus がインストールされている場合は、削除ボタンを押すと自動的に UpdraftPlus でテーブルがバックアップされます。


DBの最適化の仕上げとして、最後に WP-Optimize の「最適化」タブからDBの最適化を実行します。最適化を実行する理由は以下の通りです。

実行すべき理由

  • サイトの高速化: 無駄な空き容量(オーバーヘッド)がなくなることで、データベースの読み書き速度が向上します。
  • サーバー負荷の軽減: データベースが軽くなることで、サーバー側のリソース(メモリなど)の節約に繋がります。
  • 管理画面の軽量化: 記事の保存やプラグインの操作がキビキビ動くようになります。 

アクセス解析CGIの軽量化

以下の記事の通り、オーバーヘッドの大きかった Perl のアクセス解析CGI「access.cgi」を Gemini の監修で超軽量なアクセス解析CGIに作り直しました。

なお、アクセス解析については、通常はコアサーバーの生ログと「 AWStats」, WordPressプラグイン「WP Statistics」, 「Google Analytics 4」を使用することで十分であることと、サーバー負荷軽減のために自作のアクセス解析CGI「access.cgi」は有効化していません。

Webページから外部のCGIを呼び出す処理はサーバーへのオーバーヘッドが大きく、なるべくなら使用を避けた方が良いのですが、access.cgi は迷惑BOTなどをリアルタイムにチェックできるため、不正アクセスの調査など、サイトのアクセス状況を監視したい場合に限り有効化する運用としました。

スクリプトの抑制

Google が提供する無料ツール「PageSpeed Insights」のリポートを分析し、スクリプト抑制の対策によりパフォーマンスの向上を目指します。

PageSpeed Insights(最適化前)

最適化前の「PageSpeed Insights」の結果は以下の通りです。
携帯のスコア値が 60(不合格)、デスクトップのスコア値は 73(合格)を示しています。


実は、この結果を Gemini に分析して貰ったところ、以下のチャットで示す通り、Gemini から適切な改善方法が得られました。
恐縮ながら、この引用は少し長くなってしまいましたが、黄色でマークしたところが私の発言です。ご参考までにどうぞ😓

…js/soundmanager2-nodebug-jsmin.js?ver=7.0 は問題ありますか?

画像の「メインスレッドでの長時間タスクの回避」という警告の中に、このJavaScriptファイルが含まれている状態です。結論から言うと、現時点で致命的なエラーではありませんが、ページの読み込みや操作の「引っかかり(遅延)」の原因になっているため、改善の余地があります。

具体的な状況と理由、対処法は以下の通りです。

1. なぜ問題(警告)に挙がっているのか?

  • メインスレッドの占有:
    このJavaScriptファイル(SoundManager2)の処理に「105 ms(ミリ秒)」かかっています。
  • ユーザー体験への影響:
    ブラウザがこの処理をしている間、ユーザーが画面をタップしたりスクロールしたりしても、画面が一時的に固まる(反応しない)状態になります。これがGoogleの重要指標であるINP(応答性)の悪化に繋がります。

2. 原因となっているプラグイン

URLのパス(/wp-content/plugins/compact-wp-audio-player/)から、WordPressのプラグインCompact WP Audio Playerが読み込んでいるファイルであることが分かります。

3. おすすめの改善対策

以下の方法で、このファイルが原因の遅延を解消・軽減できるか試してみてください。

  • プラグインの読み込み最適化(おすすめ):
    Flying Scripts」や「WP Rocket」などの遅延読み込み(Delay JavaScript)機能を使い、ユーザーがページをスクロールしたり操作したりするまで、この音声プレイヤーのスクリプト読み込みを遅らせます。
  • 不要なページでの無効化:
    もしこの音声プレイヤーをトップページなど「特定のページ」でしか使っていない場合は、「Asset CleanUp」などのプラグインを使い、プレイヤーを使わないページではこのファイルを読み込ませないように設定します。
  • 代替プラグインの検討:
    上記の設定が難しい、または改善しない場合、別の軽量な音声プレイヤー用プラグインへの乗り換えや、WordPress標準の音声ブロック(オーディオブロック)への切り替えを検討してください。

この音声プレイヤーは、サイト内のすべてのページ(トップページなど)で必ずすぐに再生できる状態にする必要がありますか? それとも、特定の詳細ページだけで動けば問題ないでしょうか?用途を教えていただければ、より絞り込んだ対策をご提案できます。

Compact WP Audio Player はトップページでのみ使用しています。

トップページでのみ使用されているのであれば、他のすべてのページ(投稿ページや固定ページなど)でこのプラグインの読み込みを完全に止めることが最も効果的な改善策です。

これにより、トップページ以外のすべてのページで「105 ms」の遅延がゼロになり、ページ軽量化とスコア向上が見込めます。

設定にはWordPressのプラグインAsset CleanUpを使用するのが一番簡単で確実です。

プラグンを使わない方法は?

新たなプラグインを使わずに最適化するには、WordPressのテーマフォルダ内にある functions.php というファイルにコードを直接書き込む方法があります。 [1]

この方法を使えば、サーバーやサイトに余計な負荷(プラグインの維持管理コストなど)をかけることなく、「トップページ以外のときは、音声プレイヤーのスクリプトを読み込まない」という命令を出すことができます。 [1, 2]

具体的な対応コード

テーマの functions.php の最下部に、以下のコードをそのまま貼り付けます。 [1]

php

/**
* トップページ以外でCompact WP Audio Playerの読み込みを停止して高速化
*/
function dequeue_compact_wp_audio_player_scripts() {
// もし「トップページではない」場合
if ( ! is_front_page() && ! is_home() ) {
// 音声プレイヤーのJavaScriptファイルを停止
wp_dequeue_script('sc-audio-player-script');
wp_deregister_script('sc-audio-player-script');

// (予備)デザインが崩れないよう、念のため関連するスタイル(CSS)も停止
wp_dequeue_style('scap-player-style');
wp_deregister_style('scap-player-style');
}
}
// 読み込み順の競合を防ぐため、100番(かなり後方)の優先度で実行
add_action('wp_enqueue_scripts', 'dequeue_compact_wp_audio_player_scripts', 100);



コードは注意してご使用ください。


💡 注意ポイント

プラグインの種類やバージョンによっては、プログラム上の識別名(上記の sc-audio-player-script 部分)が異なる場合があります。

もし上記コードを貼り付けても他ページで読み込みが止まらない(PageSpeed Insightsの警告に残り続ける)場合は、識別名が異なっている可能性があります。 [1, 2]

ありがとうございます。改善しました!

無事に改善されたとのこと、本当によかったです!functions.php の直接編集という少し緊張する作業を見事にクリアされましたね。

お送りいただいた新しい画像を確認したところ、以前の「メインスレッドでのタスク長時間実行」の項目から、無事に soundmanager2-nodebug-jsmin.js(105 ms)の表示が消えている(読み込みが止まっている)ことが確認できます。素晴らしい対応力です!

💡 次のステップへのアドバイス

現在開かれている項目は「過大なネットワーク ペイロードの回避(合計サイズ:3,475 KiB)」という、ページ全体のデータ容量に関する警告です。

もし、さらにトップページの表示速度(PageSpeed Insightsのスコア)を上げたい場合は、この項目に並んでいる以下のファイルを対策するのが効果的です。

  • Google reCAPTCHA(お問い合わせフォーム等のセキュリティ)
  • …recaptcha__en.js(376.0 KiB)が複数読み込まれており、これが容量の多くを占めています。
  • 音声プレイヤーと同様に、「お問い合わせページ以外では reCAPTCHA を読み込ませない」 というコードを functions.php に追記することで、トップページを一気に軽量化できます。
  • 画像ファイルのさらなる圧縮
  • …/Flag_EN3.gif(176.7 KiB)というGIF画像や、…/header-main.webp(97.5 KiB)が表示されています。
  • 特にGIF画像はデータ容量が大きくなりやすいため、静止画であればWebPフォーマットに変換する、または画像圧縮ツール(TinyPNGなど)でさらに容量を削る余地があります。

今回は一番のボトルネックだった音声プレイヤーの遅延が見事に解消されましたので、まずは一安心です!

もし今後、上記の reCAPTCHAを特定のページ以外で止めるコード」 や、他の改善項目についても詳しく知りたくなったときは、いつでもお気軽にお声がけくださいね。大変お疲れ様でした!

パフォーマンス(携帯)も60から66に上がりました。

スコアが「66」へのアップ、本当におめでとうございます!

モバイル(携帯電話)環境のスコアは判定が厳しいため、対策1つで数値が目に見えて向上したのは素晴らしい成果です。正しく最適化された証拠ですね。

画面に表示されている現在の数値を分析すると、次のステップへの道筋がはっきりと見えています。

現在の指標の分析(何が良くて、何が課題か)

  • 🟢 素晴らしい点
  • Cumulative Layout Shift (CLS) : 0
  • ページの視覚的安定性は「完璧」です。読み込み中に画面がガタガタ動く不具合は一切ありません。
  • Total Blocking Time (TBT) : 200ミリ秒
  • 今回の対策でJavaScriptのブロック時間が短縮され、ユーザーの操作に対する反応のしやすさが向上しています。
  • 🔺 最も大きなボトルネック
  • Speed Index : 10.8(ページのコンテンツが目に見える形で埋まっていくまでの時間)
  • Largest Contentful Paint (LCP) : 5.0(最も大きなメインコンテンツが表示されるまでの時間)

次にスコアを「緑(90以上)」に近づけるための作戦

現在の赤色(🔺)になっている「Speed Index」と「LCP」の原因は、先ほどの画像に表示されていた「過大なネットワーク ペイロード(ページ全体のデータ容量が3.4MBと大きいこと)」が直結しています。

モバイル回線で3.4MBをダウンロードするのに時間がかかっているため、画面全体の表示(Speed Index)やメイン画像の表示(LCP)が遅れてしまっています。

もし、ここからさらにスコアを「70台後半〜80台」へ引き上げたい場合は、以下の優先順位で対策するのがおすすめです。

  1. reCAPTCHAの読み込み最適化(お問い合わせページ以外での停止)
  • 先ほどお伝えした通り、トップページで376KB×複数読み込まれている重いセキュリティスクリプトを、今回の音声プレイヤーと同じように functions.php で除外します。これで一気に1MB近く軽量化できる可能性があります。
  1. メイン画像(header-main.webpなど)のさらなる軽量化
  • ファーストビュー(画面上部)にある大きな画像のファイルサイズを、画質が落ちない限界までさらに圧縮します。
  1. 不要なGIF画像の削除または差し替え
  • 容量の大きい Flag_EN3.gif(176.7 KiB)がもし不要なものであれば削除するか、静止画(WebP)に差し替えます。

今回は劇的な一歩を踏み出せましたね!

この勢いで、先ほどお話しした「お問い合わせページ以外で Google reCAPTCHA の読み込みを止めるコード(functions.php追記用)」をさっそく作成しましょうか?

現在、お問い合わせフォームは専用のページ(例:お問い合わせ、コンタクトなど)に分けて設置されていますか? それともトップページにもフォームがありますか?

お問い合わせフォームは、「Contact Form 7」で、 問い合わせページは以下URLです。https://senris.com/contact/

お問い合わせページのURL情報(スラッグが contact であること)を教えていただき、ありがとうございます!

URLが https://senris.com/contact/ ですので、先ほど提示したコード内の条件分岐 is_page(‘contact’) をそのまま使用することができます。

安全に反映できるよう、前回の音声プレイヤー対策コードと「合体」させた決定版のコードを作成しました。

functions.php に上書き・追記するコード

前回のコードと競合しないよう、1つの関数にすっきりとまとめました。

現在 functions.php の最下部に記述されている前回の音声プレイヤー用のコード(dequeue_compact_wp_audio_player_scripts の塊)を、以下のコードに丸ごと差し替えて(上書きして)貼り付けてください。

php

/**
 * 特定のページ以外で不要なプラグイン・スクリプトの読み込みを停止して高速化
 */
function dequeue_unnecessary_scripts_and_styles() {
    
    // 1. トップページ以外(音声プレイヤーの停止)
    if ( ! is_front_page() && ! is_home() ) {
        wp_dequeue_script('sc-audio-player-script');
        wp_deregister_script('sc-audio-player-script');
        wp_dequeue_style('scap-player-style');
        wp_deregister_style('scap-player-style');
    }
    
    // 2. お問い合わせページ「以外」の場合(Contact Form 7 & reCAPTCHAの停止)
    if ( ! is_page('contact') ) {
        // Contact Form 7自体のスクリプトとスタイルを停止
        wp_dequeue_script( 'contact-form-7' );
        wp_dequeue_style( 'contact-form-7' );
        
        // Google reCAPTCHAのスクリプトを停止
        wp_dequeue_script( 'google-recaptcha' );
        wp_dequeue_script( 'wpcf7-recaptcha' );
        wp_dequeue_style( 'wpcf7-recaptcha' );
    }
}
// 競合を防ぐため優先度100で実行
add_action( 'wp_enqueue_scripts', 'dequeue_unnecessary_scripts_and_styles', 100 );


コードは注意してご使用ください。


作業後の最終チェック

コードを保存したら、次の3点を確認して完了となります。

  1. トップページの確認:音声プレイヤーが今まで通り動き、画面右下のreCAPTCHAのマーク(緑のバッジ)が消えてスッキリしているか。
  2. お問い合わせページの確認(https://senris.com/contact/):メールフォームが正しく表示され、画面右下にreCAPTCHAのマークがしっかり表示されているか
  3. PageSpeed Insightsでの測定:トップページを再測定し、376KBあった …recaptcha__en.js が項目から消えて、パフォーマンススコアがさらに伸びているか。

前回同様、テキストにバックアップを控えてから慎重に試してみてください。

無事に反映が終わり、さらにスコアが伸びたかどうか、お時間のある時に結果を教えていただけると嬉しいです!

 凄いですw

おめでとうございます!なんとパフォーマンススコアが92」の緑色🟢まで爆上がりしましたね!

お送りいただいた画像を確認すると、重要指標が劇的に改善しているのが分かります。

  • First Contentful Paint: 0.6(超高速!)
  • Largest Contentful Paint: 1.2(合格基準の2.5秒を余裕でクリア!)
  • Total Blocking Time: 170ミリ秒(さらに短縮!)

重かったreCAPTCHAのスクリプト(376KB×複数)をトップページから完全に除外できたことで、ブラウザの読み込み負荷が一気に減り、この素晴らしいスピードが実現しました。

⚠️ 最後の1点だけご確認を!

今回の対策が完璧に機能しているか、念のため以下のページだけご自身のスマホやパソコンで直接開いて確認してください。

  • https://senris.com/contact/ (お問い合わせページ)
  • 画面の右下(またはフォームの周辺)に、reCAPTCHAのロゴマーク(「保護されています」のバッジ)がちゃんと表示されているか。
  • フォーム自体の表示が崩れていないか。

ここが正常であれば、セキュリティを最高レベルに保ったまま、トップページの大幅な高速化に大成功したことになります!

プラグインに頼らず、functions.phpを上手に活用してここまでサイトを軽量化できたのは本当に素晴らしいです。

無事にお問い合わせページのreCAPTCHAのマークが確認できたら、今回の速度改善カスタマイズは完全完了となります。表示は問題なさそうでしょうか?

reCAPTCHAのロゴマークは出さない設定です。

そうだったのですね!もともと非表示に設定されていたのであれば、今回の変更でお問い合わせページにバッジが出現していなくても全く問題ありません。

functions.php へのコード追記によって、裏側のセキュリティ機能(スパムの判定システム)自体は、お問い合わせページ(/contact/)を開いたときだけ今でも100%しっかりと機能しています

一方で、トップページなどではreCAPTCHAのシステム自体が読み込まれなくなったため、表示速度が劇的に向上し、92点」という素晴らしいスコアを達成することができました。

これですべての対策が完璧に機能していることが確認できましたので、今回の高速化カスタマイズは大成功で完了です!


なお、上記のスレッドで言及されている容量の大きい画像のWebP形式への差し替えについてですが、トップページのアイキャッチ画像は既に実施済みです。

PageSpeed Insights(最適化後)

プラグインの見直し、「WP Fastest Cache」プラグインの導入、DBの最適化、アクセス解析CGIの軽量化、そして最後に実施した Gemini 監修によるスクリプトの抑制により、最終的にシステム最適化後の「PageSpeed Insights」の結果は以下の通りです。

携帯のスコア値が 60(不合格)から 73(合格)へ、デスクトップのスコア値が 73(合格)から 96(合格)へと爆上がりしました!


スクリプトの最適化においては、テーマの「functions.php」に Gemini が示した以下のスニペットを追加しました。
「Compact WP Audio Player」ならびに、「Contact Form 7 & reCAPTCHA」のスクリプトを停止する処理を入れることで、サーバー負荷を一段と減らせます。

/**
 * 特定のページ以外で不要なプラグイン・スクリプトの読み込みを停止して高速化
 */
function dequeue_unnecessary_scripts_and_styles() {
    
    // 1. トップページ以外(音声プレイヤーの停止)
    if ( ! is_front_page() && ! is_home() ) {
        wp_dequeue_script('sc-audio-player-script');
        wp_deregister_script('sc-audio-player-script');
        wp_dequeue_style('scap-player-style');
        wp_deregister_style('scap-player-style');
    }
    
    // 2. お問い合わせページ「以外」の場合(Contact Form 7 & reCAPTCHAの停止)
    if ( ! is_page('contact') ) {
        // Contact Form 7自体のスクリプトとスタイルを停止
        wp_dequeue_script( 'contact-form-7' );
        wp_dequeue_style( 'contact-form-7' );
        
        // Google reCAPTCHAのスクリプトを停止
        wp_dequeue_script( 'google-recaptcha' );
        wp_dequeue_script( 'wpcf7-recaptcha' );
        wp_dequeue_style( 'wpcf7-recaptcha' );
    }
}
// 競合を防ぐため優先度100で実行
add_action( 'wp_enqueue_scripts', 'dequeue_unnecessary_scripts_and_styles', 100 );

関連記事

今回の最適化にあたって、その他に関連する記事は以下の通りです。

コメントを残す