head要素内に自動で出力される情報を削除したい

WordPressでテーマを作成するとhead要素内に自動で出力される情報があります。もちろん必要な情報もありますが、場合によっては出力されなくても良い情報もあります。これらはテーマ関数ファイルのfunctions.phpに削除処理を記述することで、出力しないようにできるのでそれをまとめておきます。

meta name="generator"の削除

meta情報のname属性の値「generator」は、文書の作成に使用したソフトウェアが何かということと、そのバージョンをcontent属性に設定しています。これって今だに何の役に立つのか不明で単なる宣伝か制作者側のバージョン管理?などと思っているのですが、要するに必要ないと思っているので削除。

<meta name="generator" content="WordPress 4.8.2" />

functions.phpファイルに以下のように記述することで削除できます。

remove_action( 'wp_head', 'wp_generator' );

そもそもバージョンが表示されていると、古いバージョンだとわかれば脆弱性をつかれて攻撃されてしまうと思うんですけどね。

link rel="wlwmanifest"の削除

マイクロソフトが開発したWindows Live Writer(ウインドウズ ライブ ライター)というブログ投稿ができるソフトウェアからの投稿を受け付けるための記述。このソフトウェアを使ってWordPressに投稿を行わなければ不要なので削除。

<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://vccw.dev/wp-includes/wlwmanifest.xml" /> 

functions.phpファイルに以下のように記述することで削除できます。

remove_action( 'wp_head', 'wlwmanifest_link' );

link rel="EditURI"の削除

EditURIは外部の投稿ツールからWordPressに記事の投稿を行う時に必要な設定です。これも先程のWindows Live Writer同様、外部ツールからの投稿を行わないのであれば不要なので削除。

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://vccw.dev/xmlrpc.php?rsd" />

functions.phpファイルに以下のように記述することで削除できます。

remove_action( 'wp_head', 'rsd_link' );

link rel="shortlink"の削除

投稿記事のページには短縮URLが出力されます。短縮URLを使用しない場合は、不要なので削除

<link rel='shortlink' href='http://example.com/?p=1' />

functions.phpファイルに以下のように記述することで削除できます。

remove_action( 'wp_head', 'wp_shortlink_wp_head' );

link rel="dns-prefetch"の削除

DNSプリフェッチを使用すると、外部ドメインでの名前解決を事前(Pre)に強制できるため表示速度を上げることができます。WordPressでは、絵文字をCDNしているドメインをプリフェッチしている設定があります。絵文字を使用しないのであれば、名前解決は不要なので削除。

参考:Code Reference:wp_resource_hints()
<link rel='dns-prefetch' href='//s.w.org' />

functions.phpファイルに以下のように記述することで削除できます。

add_filter( 'emoji_svg_url', '__return_false' );

絵文字用のJavaScriptとStyleSheetの削除

絵文字用のJavaScriptとStyleSheetがhead要素内にそのまま出力されます。(外部ファイルにしないのだろうか…) これらも絵文字を使用しなければ不要なので削除。

<script type="text/javascript">
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/2.3\/72x72\/","ext":".png","svgUrl":false,"svgExt":".svg","source":{"concatemoji":"http:\/\/vccw.dev\/wp-includes\/js\/wp-emoji-release.min.js?ver=4.8.2"}};
!function(a,b,c){function d(a){var b,c,d,e,f=String.fromCharCode;if(!k||!k.fillText)return!1;switch(k.clearRect(0,0,j.width,j.height),k.textBaseline="top",k.font="600 32px Arial",a){case"flag":return k.fillText(f(55356,56826,55356,56819),0,0),b=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,56826,8203,55356,56819),0,0),c=j.toDataURL(),b!==c&&(k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447),0,0),b=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447),0,0),c=j.toDataURL(),b!==c);case"emoji4":return k.fillText(f(55358,56794,8205,9794,65039),0,0),d=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55358,56794,8203,9794,65039),0,0),e=j.toDataURL(),d!==e}return!1}function e(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var f,g,h,i,j=b.createElement("canvas"),k=j.getContext&&j.getContext("2d");for(i=Array("flag","emoji4"),c.supports={everything:!0,everythingExceptFlag:!0},h=0;h<i.length;h++)c.supports[i[h]]=d(i[h]),c.supports.everything=c.supports.everything&&c.supports[i[h]],"flag"!==i[h]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[i[h]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(g=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1)):(a.attachEvent("onload",g),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),f=c.source||{},f.concatemoji?e(f.concatemoji):f.wpemoji&&f.twemoji&&(e(f.twemoji),e(f.wpemoji)))}(window,document,window._wpemojiSettings);
</script>
<style type="text/css">
img.wp-smiley,
img.emoji {
	display: inline !important;
	border: none !important;
	box-shadow: none !important;
	height: 1em !important;
	width: 1em !important;
	margin: 0 .07em !important;
	vertical-align: -0.1em !important;
	background: none !important;
	padding: 0 !important;
}
</style>

functions.phpファイルに以下のように記述することで削除できます。

remove_action( 'wp_head',             'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'wp_print_styles',     'print_emoji_styles' );
remove_action( 'admin_print_styles',  'print_emoji_styles' );