wp_head()から不要なタグを削除したい

wp_head()は、テーマが何も実装していなくても、name属性の値がgeneratorのmetaタグやshortlink、RSD、フィード案内リンクなど複数のタグを自動的に出力します。これらは、サイトの表示や記事の投稿・編集の動作には関わっていないタグです。

functions.phpremove_action()を追加するだけで、次の4つを削除できます。

  • name属性の値がgeneratorのmetaタグ
  • rel属性の値がshortlinkのlinkタグ
  • rel属性の値がEditURIのlinkタグ(通称RSD)
  • rel属性の値がalternateのlinkタグ(フィード案内用)

この記事では、それぞれのタグが何を出力していて、消さないとどうなるか、どう消すかを順番に説明します。

name属性の値がgeneratorのmetaタグを消す

<meta name="generator" content="WordPress X.X.X">は、name属性の値がgeneratorのmetaタグで、使用しているWordPressの正確なバージョンをページ内に出力します。

このタグを残しておくと、サイトが使っているWordPressのバージョンが外部から分かる状態になります。バージョンが特定できると、そのバージョンの既知の脆弱性を狙われやすくなります。

削除は次の1行をfunctions.phpに追加するだけです。

// name属性がgeneratorのmetaタグを削除
remove_action('wp_head', 'wp_generator');

rel属性の値がshortlinkのlinkタグを消す

<link rel='shortlink' href='https://example.com/?p=123'>は、rel属性の値がshortlinkのlinkタグで、投稿や固定ページの短縮URLを出力します。

投稿ID(?p=123123部分)は連番の数値なので、外部から見えても特に問題はありません。見た目を整理する目的で削除する、という位置づけです。

削除は次の1行をfunctions.phpに追加するだけです。

// rel属性がshortlinkのlinkタグを削除
remove_action('wp_head', 'wp_shortlink_wp_head');

rel属性の値がEditURIのlinkタグ(通称RSD)を消す

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://example.com/xmlrpc.php?rsd" />は、rel属性の値がEditURIのlinkタグで、外部のブログ投稿ツールがxmlrpc.phpの場所を自動的に見つけられるように案内しています。

xmlrpc.phphttps://example.com/xmlrpc.phpのように、常に決まった場所にあるファイルです。案内タグがなくても場所は変わらないので、これを消しても防御にはなりません。見た目を整理する目的で削除する、という位置づけです。

削除は次の1行をfunctions.phpに追加するだけです。

// rel属性がEditURIのlinkタグ(RSD)を削除
remove_action('wp_head', 'rsd_link');

なお、XML-RPCもadd_filter('xmlrpc_enabled', '__return_false')で機能の一部を無効化できますが、影響を受ける外部連携(Jetpackなど)があるかどうかの見極めが必要なため、今回はこれ以上は書きません。より強くセキュリティ対策をしたい場合は、サーバー側でxmlrpc.php自体をブロックする方法もあります。

rel属性の値がalternateのlinkタグ(フィード案内)を消す

feed_links_extra()は、個別記事のコメントフィードや、カテゴリー・タグ・投稿者・検索結果ページのフィードを案内する<link rel='alternate' type='application/rss+xml' title="..." href="https://example.com/...">を、ページの種類ごとに複数出力します。

コメント機能やRSS購読を使っていないなら、これらのリンクは特に意味を持ちません。消しても問題ありません。

削除は次の1行をfunctions.phpに追加するだけです。第3引数に優先度3を指定する必要があります(WordPressコア側がこの優先度で登録しているため、remove_action()側も合わせないと削除されません)。

// rel属性がalternateのlinkタグ(フィード案内)を削除
remove_action('wp_head', 'feed_links_extra', 3);

まとめ

  • wp_head()が出力するgeneratorタグ・shortlinkタグ・RSDタグ・フィード案内リンクは、remove_action()で削除できる。
  • これらはいずれも<head>内の案内タグを消すだけで、投稿ID・xmlrpc.phpの場所・フィードそのものといった実際の機能を無効化するわけではない。
  • フィード案内リンクを消しても、フィードのURLを直接知っていれば購読は可能。自動検出ができなくなるだけ。

適用後は、実際にブラウザでページのソースを表示し、該当タグが消えているか確認すると安心です。

この記事の内容はWordPress 7.0.2で確認しています。