WordPress 3分間フッキング:セキュリティとパフォーマンスを向上させるremove_actionテクニック
こんにちは!埼玉県川越市を拠点にWordPressの開発・カスタマイズサービスを提供しているWebエンジニアです。今回の「WordPress 3分間フッキング」では、サイトのセキュリティとパフォーマンスを向上させる強力なテクニック、remove_action
について解説します。
特に「remove_action('wp_head', 'wp_generator')
」を中心に、WordPressのヘッド部分をクリーンアップする方法と、その効果について詳しく見ていきましょう。
今回のフックコード
1 |
remove_action( 'wp_head', 'wp_generator' ); |
この一行のコードで、WordPressのバージョン情報を表示するメタタグを削除できます。小さな変更ですが、セキュリティ向上に大きく貢献します!
wp_generatorとは?その削除が重要な理由
WordPressのデフォルト設定では、サイトのHTMLの<head>
部分に以下のようなメタタグが自動的に追加されています:
1 |
<meta name="generator" content="WordPress 6.4.2"> |
これはwp_generator
関数によって生成されており、使用しているWordPressのバージョンを明示しています。一見便利そうに見えますが、実はセキュリティ上の大きな問題を含んでいます。
バージョン情報を公開することは、悪意ある攻撃者にとって「この特定のWordPressバージョンの既知の脆弱性」を狙う手がかりになってしまいます。
例えば、あるバージョンに脆弱性が発見された場合、攻撃者はバージョン情報を見て「このサイトは脆弱性のあるバージョンを使っている」と判断し、攻撃の標的にする可能性があります。
remove_actionの仕組みと基本構文
remove_action
は、WordPressのアクションフックから、すでに登録されている関数を削除するための関数です。これにより、WordPressの標準的な動作を変更・抑制することができます。
基本的な構文は次の通りです:
1 |
remove_action( 'フック名', '関数名', 優先度 ); |
- フック名:アクションフックの名前(例:
wp_head
) - 関数名:削除したい関数の名前(例:
wp_generator
) - 優先度:オプション。関数が複数登録されている場合の優先度
多くの場合、優先度は省略できますが、特定の状況では指定が必要な場合があります。この場合、元のadd_action
で設定されたのと同じ優先度を指定する必要があります。
WordPressヘッドをクリーンアップする主要なremove_action一覧
バージョン情報の削除以外にも、remove_action
を使ってWordPressサイトを最適化できる箇所はたくさんあります。それらを目的別に見ていきましょう。
remove_actionコード | 効果 | 推奨度 | 注意点 |
---|---|---|---|
remove_action('wp_head', |
WordPressバージョン情報の非表示化 | ★★★★★ | ほぼすべてのサイトで推奨 |
remove_action('wp_head', |
Really Simple Discovery(RSD)リンクの削除 | ★★★★☆ | XML-RPCを使用しない場合に推奨 |
remove_action('wp_head', |
Windows Live Writer用リンクの削除 | ★★★★☆ | Windows Live Writerを使用しない場合に推奨 |
remove_action('wp_head', |
絵文字変換スクリプトの削除 | ★★★★☆ | 絵文字を多用するサイトでは注意 |
remove_action('wp_print_styles', |
絵文字用CSSの削除 | ★★★★☆ | 絵文字を多用するサイトでは注意 |
remove_action('wp_head', |
短縮URLリンク情報の削除 | ★★★★☆ | 短縮URLを使用しない場合に推奨 |
remove_action('wp_head', |
前後記事へのリンクタグ削除 | ★★☆☆☆ | SEOに影響する可能性あり |
remove_action('wp_head', |
追加フィードリンクの削除 | ★★★☆☆ | フィードを使用する場合は注意 |
remove_action('wp_head', |
REST APIリンクの削除 | ★★☆☆☆ | REST APIを使うテーマ・プラグインに影響 |
remove_action('rest_api_init', |
oEmbed REST APIルートの無効化 | ★★☆☆☆ | oEmbedを使うコンテンツに影響 |
remove_action('wp_head', |
DNSプリフェッチヒントの削除 | ★☆☆☆☆ | パフォーマンスに悪影響の可能性 |
推奨度の見方:★5つが最も推奨度が高く、★1つが最も慎重に検討すべきものを表します。
WordPressヘッドクリーンアップの包括的な実装例
複数のremove_action
を組み合わせて、より包括的なヘッドクリーンアップを実現できます。以下に実装例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
/** * WordPress headのクリーンアップ関数 */ function wp3min_cleanup_head() { // バージョン情報を削除(セキュリティ向上) remove_action('wp_head', 'wp_generator'); // XML-RPC関連のリンクを削除 remove_action('wp_head', 'rsd_link'); remove_action('wp_head', 'wlwmanifest_link'); // 絵文字関連のスクリプトとスタイルを削除(パフォーマンス向上) remove_action('wp_head', 'print_emoji_detection_script', 7); remove_action('wp_print_styles', 'print_emoji_styles'); // その他の不要なリンクを削除 remove_action('wp_head', 'wp_shortlink_wp_head'); remove_action('wp_head', 'feed_links_extra', 3); // REST API関連(必要に応じて) // remove_action('wp_head', 'rest_output_link_wp_head'); // remove_action('template_redirect', 'rest_output_link_header', 11); } // 初期化時に実行 add_action('init', 'wp3min_cleanup_head'); |
このコードをテーマのfunctions.php、または専用のプラグインに追加することで、WordPressのヘッドをクリーンアップし、セキュリティとパフォーマンスを向上させることができます。
セキュリティ向上のためのremove_action
1. WordPressバージョン情報の非表示化
1 |
remove_action('wp_head', 'wp_generator'); |
前述のとおり、これはセキュリティ上最も重要な対策の一つです。バージョン情報を非表示にすることで、脆弱性を狙った攻撃を防ぎます。
2. XML-RPC関連リンクの削除
1 |
remove_action('wp_head', 'rsd_link'); |
XML-RPCは外部アプリケーションからWordPressを操作するための仕組みですが、セキュリティ上の問題を引き起こす可能性もあります。この機能を使用していない場合は、関連リンクを削除することで攻撃対象となる可能性を減らせます。
XML-RPCを利用した「総当たり攻撃」が多発しています。実際に使用していない場合は、XML-RPC自体を無効化することも検討してください。
3. Windows Live Writer用リンクの削除
1 |
remove_action('wp_head', 'wlwmanifest_link'); |
Windows Live Writerは既に廃止されたブログエディタですが、WordPressはまだこのツール用のマニフェストリンクを生成しています。使用していないツール関連のコードは削除することで、攻撃対象となる表面積を減らせます。
パフォーマンス向上のためのremove_action
1. 絵文字関連のコードを削除
1 2 |
remove_action('wp_head', 'print_emoji_detection_script', 7); remove_action('wp_print_styles', 'print_emoji_styles'); |
WordPressは自動的に絵文字をサポートするためのスクリプトとスタイルを読み込みます。しかし、絵文字を使用しないサイトにはこれらの追加リソースは不要であり、パフォーマンスに悪影響を与える可能性があります。
速度テストツールでも、これらの絵文字スクリプトは「不要な JavaScript」として指摘されることがよくあります。削除することで読み込み速度の改善が期待できます。
2. その他のリンクを削除
1 2 |
remove_action('wp_head', 'wp_shortlink_wp_head'); remove_action('wp_head', 'feed_links_extra', 3); |
短縮URL機能や追加のフィードリンクも、使用していない場合は不要なHTMLを生成します。これらを削除することで、HTMLのサイズを小さくし、ページ読み込み速度を改善できます。
注意が必要なremove_action
すべてのremove_action
が無条件に推奨できるわけではありません。特に注意が必要な例をいくつか見ていきましょう。
1. 前後の記事リンクの削除
1 |
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head'); |
このコードは前後の記事への関連付けを示すlinkタグを削除します。しかし、これによりGoogleなどの検索エンジンがコンテンツの関連性や順序を理解する助けとなる情報が失われる可能性があります。
2. REST API関連の削除
1 2 |
remove_action('wp_head', 'rest_output_link_wp_head'); remove_action('template_redirect', 'rest_output_link_header', 11); |
REST APIはモダンなWordPressテーマやプラグイン、そしてGutenbergエディタが使用する重要な機能です。これらを無効化すると、サイトの様々な機能に影響を与える可能性があります。
REST API関連のコードを削除する場合は、十分なテストを行い、サイトの機能に問題がないことを確認してください。
3. DNSプリフェッチヒントの削除
1 |
remove_action('wp_head', 'wp_resource_hints', 2); |
DNSプリフェッチは、外部リソースへのアクセスを高速化するための機能です。これを削除すると、サイトのパフォーマンスに悪影響を与える可能性があります。特に外部リソース(フォント、CDNなど)を多用するサイトでは注意が必要です。
実装方法と注意点
実装手順
- WordPressの管理画面にログイン
- 「外観」→「テーマエディター」を選択(または「外観」→「テーマファイルエディター」)
- 右側のファイル一覧から「functions.php」を選択
- functions.phpの最後に適切なremove_actionコードを追加
- 「ファイルを更新」ボタンをクリック
直接テーマファイルを編集する場合は必ず事前にバックアップを取っておきましょう。テーマの更新時にコードが上書きされる可能性があります。
より安全な実装方法として、子テーマを使用するか、専用の小さなプラグインを作成してremove_actionコードを管理することをおすすめします。
実装例(プラグイン形式)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<?php /** * Plugin Name: WP 3分間 - ヘッドクリーンアップ * Description: WordPressのヘッド部分をクリーンアップし、セキュリティとパフォーマンスを向上させます。 * Version: 1.0 * Author: あなたの名前 */ // 直接アクセスを禁止 if (!defined('ABSPATH')) { exit; } /** * WordPressヘッドのクリーンアップ */ function wp3min_cleanup_head() { // セキュリティ向上のためのクリーンアップ remove_action('wp_head', 'wp_generator'); remove_action('wp_head', 'rsd_link'); remove_action('wp_head', 'wlwmanifest_link'); // パフォーマンス向上のためのクリーンアップ remove_action('wp_head', 'print_emoji_detection_script', 7); remove_action('wp_print_styles', 'print_emoji_styles'); remove_action('wp_head', 'wp_shortlink_wp_head'); // オプションのクリーンアップ(必要に応じてコメントを解除) // remove_action('wp_head', 'feed_links_extra', 3); // remove_action('wp_head', 'adjacent_posts_rel_link_wp_head'); // REST API関連(慎重に検討) // remove_action('wp_head', 'rest_output_link_wp_head'); // remove_action('template_redirect', 'rest_output_link_header', 11); } // 初期化時にクリーンアップ関数を実行 add_action('init', 'wp3min_cleanup_head'); |
このコードを「wp-3min-head-cleanup.php」などのファイル名で保存し、wp-content/pluginsディレクトリにアップロードすることで、独立したプラグインとして実装できます。
実際の効果を確認する方法
実装後、本当にバージョン情報などが削除されているか確認しましょう。
1. ソースコードの確認
- サイトを表示し、ブラウザで右クリック
- 「ページのソースを表示」を選択
- <head>セクションをチェックし、<meta name=”generator”>タグが削除されていることを確認
2. セキュリティスキャンツールの活用
WPScan(https://wpscan.org/)などのWordPressセキュリティスキャナーを使用して、バージョン情報が外部から検出できるかテストする方法もあります。
よくある質問(FAQ)
Q1: remove_action
でエラーが発生する場合は?
A1: エラーが発生する主な原因は、該当のアクションが追加される前に削除を試みていることです。remove_action
は必ずinit
フックなど、元のアクションが追加された後のタイミングで実行するようにしてください。
1 2 3 4 |
// 正しい実装例 add_action('init', function() { remove_action('wp_head', 'wp_generator'); }); |
Q2: 全てのremove_actionを実装しても安全ですか?
A2: サイトの用途や使用しているテーマ・プラグインによって異なります。段階的に実装し、各変更後にサイトの機能をテストすることをお勧めします。特にREST API関連の削除は慎重に行ってください。
Q3: 実装後、Gutenbergエディタが動作しなくなりました。なぜですか?
A3: REST APIに関連するremove_action(特にrest_output_link_wp_head
やrest_api_init
関連)を実装すると、Gutenbergエディタが正常に動作しなくなる場合があります。これらのコードは削除するか、条件分岐で管理画面では実行されないようにしてください。
まとめ
今回は「remove_action('wp_head', 'wp_generator')
」を中心に、WordPressのヘッド部分をクリーンアップして、セキュリティとパフォーマンスを向上させる方法を解説しました。
特にバージョン情報の削除は、WordPressサイトのセキュリティ向上に大きく貢献します。それに加えて、不要なコードの削除によるパフォーマンス向上も期待できます。
ただし、すべてのremove_action
が全てのサイトに適しているわけではありません。サイトの要件に合わせて取捨選択し、段階的に実装してテストすることをお勧めします。
私たちは埼玉県川越市を拠点に、WordPressの開発・カスタマイズサービスを提供しています。WordPressのセキュリティやパフォーマンス最適化についてお悩みがありましたら、ぜひWordPressトラブル対応・お悩み相談サービス(https://edel-hearts.com/wordpress-trouble-shooting/)をご利用ください。