この記事は約15分で読めます。

今回はWordPressのはき出すHTMLをキレイにする方法をご紹介します。

WordPressはデフォルトでheadタグ内に様々な情報が書かれるように作られていますが、中には全く必要がないタグもあります。
これらの不要なタグは、普通は人の目に触れることはありませんので気にならないかもしれません。
しかし、それらを整理することで、実はSEOに対しても、ユーザーさんに対してもいいことがあります。

検索エンジンなどのロボット達はサイトを読み込む際、必ずHTMLを上から順に読んでいきます。
不要なタグがheadタグ内にたくさんあると、ロボットにとっては読みづらいサイトになってしまいます。
ソースコードのメンテナンスを行い必要なタグ以外は削除しておくことで、ロボットが読みやすいソースなるべくプラグインを使わずに不要なタグを削除する方法をまとめました。

編集するファイル

具体的な削除方法ですが、WordPressのテーマファイルに含まれているfunction.phpというファイルに、phpのコードを追記するだけで削除することが可能です。

WordPerssの不要タグ

WordPressが純正で吐き出す不要なタグを表示にします。

meta name="generator" の削除

meta generator は、head要素の中で文書の作成に使用したソフトウェア名をしますタグです。
つまり、『このページはWordPressで出来てますよ』ということを示すタグですが、通常は不要だと思いますので、削除で問題ないでしょう。

表示されているソースコード
<meta name="generator" content="Wordpress 5.2.2" />
function.phpに追記するソースコード
// generatorを非表示にする
remove_action('wp_head', 'wp_generator');

link rel="EditURI" の削除

EditURIは外部の投稿ツールからWordPressに記事を投稿する際に必要なタグですが、外部ツールを使用しない場合は、セキュリティ的に削除した方がいいです。

表示されているソースコード
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.site-domain.com/xmlrpc.php?rsd" />
function.phpに追記するソースコード
// EditURIを非表示にする
remove_action('wp_head', 'rsd_link');

link rel="wlwmanifest" の削除

マイクロソフト製のブログ更新アプリの「Windows Live Writer(ウインドウズ ライブ ライター)」からの投稿を受け付けるためのタグ。
このアプリを使ってWordPressに投稿を行わなければ不要なので削除して問題ありません。

表示されているソースコード
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://vccw.dev/wp-includes/wlwmanifest.xml" />
function.phpに追記するソースコード
// wlwmanifestを非表示にする
remove_action('wp_head', 'wlwmanifest_link');

link rel="shortlink" の削除

WordPressはページ毎に短縮URLが出力されますが、短縮URLを使用しない場合は、不要なので削除で問題ありません。

表示されているソースコード
<link rel="shortlink" href="http://site-domain.com/?p=1" />
function.phpに追記するソースコード
// 短縮URLを非表示にする
remove_action('wp_head', 'wp_shortlink_wp_head');

絵文字用のJavaScriptとCSSの削除

絵文字対応用のJavaScriptとCSSです。絵文字を使用しなければ不要なので削除可能です。

表示されているソースコード
<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>
function.phpに追記するソースコード
// 絵文字用JS・CSSを非表示にする
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');

投稿のRSSフィードの削除

RSSフィードのURLを表示している部分ですが、RSSフィードを使用しない、または見せたくないという場合は消しても問題ありません。

表示されているソースコード
<link title="フィード" href="https://www.site-domain.com/" rel="alternate" type="application/rss+xml" />
function.phpに追記するソースコード
// 投稿の RSS フィードリンクを非表示にする
remove_action('wp_head', 'feed_links', 2);

コメントフィードの削除

コメントフィードのURLを表示している部分ですが、こちらもコメントフィードを使用しない、または見せたくないという場合は消しても問題ありません。

表示されているソースコード
<link title="コメントフィード" href="https://www.site-domain.com/" rel="alternate" type="application/rss+xml" />
function.phpに追記するソースコード
// コメントフィードを非表示にする
remove_action('wp_head', 'feed_links_extra', 3);

JavaScriptやCSSに付与されるバージョン番号の削除

WordPressはJavaScriptやCSSに、WordPressやプラグインもしくはスクリプトそのもののバージョン番号を付与します。 ブラウザがこのバージョン番号が変わったことで、古いキャッシュを使わないようにするためのものです。 JavaScriptやCSSの更新が頻繁ではない場合は削除しても構わないでしょう。
function.phpに追記するソースコード
// 全てのver=〜 を非表示にする
function vc_remove_wp_ver_css_js( $src ) {
if ( strpos( $src, 'ver=' ) )
$src = remove_query_arg( 'ver', $src );
return $src;
}
add_filter( 'style_loader_src', 'vc_remove_wp_ver_css_js', 9999 );
add_filter( 'script_loader_src', 'vc_remove_wp_ver_css_js', 9999 );
function.phpに追記するソースコード
// WordPressのバージョンが付与されたver=〜 を非表示にする
function vc_remove_wp_ver_css_js( $src ) {
    if ( strpos( $src, 'ver=' . get_bloginfo( 'version' ) ) )
        $src = remove_query_arg( 'ver', $src );
    return $src;
}
add_filter( 'style_loader_src', 'vc_remove_wp_ver_css_js', 9999 );
add_filter( 'script_loader_src', 'vc_remove_wp_ver_css_js', 9999 );

link rel="dns-prefetch" の削除

WordPress4.6から実装された「DNS Prefetching(DNSプリフェッチ)」を利用するための記述です。
DNSプリフェッチは、事前に外部ドメインDNSの名前解決しておくようにするもので、読み込み時間が若干早くなります。
WordPressでは、絵文字の保存ドメインをプリフェッチしていますが、絵文字を使用しないのであれば、不要なので削除しましょう。

表示されているソースコード
<link rel="dns-prefetch" href="//s.w.org" />
function.phpに追記するソースコード
// dns-prefetchを非表示にする
add_filter( 'wp_resource_hints', 'remove_dns_prefetch', 10, 2 );
function remove_dns_prefetch( $hints, $relation_type ) {
  if ( 'dns-prefetch' === $relation_type ) {
    return array_diff( wp_dependencies_unique_hosts(), $hints );
  }
  return $hints;
}

link rel="https://api.w.org/" の削除

WordPress4.4から実装された「REST API」を呼び出すための記述です。
これは、ウェブサイトをAPI化し、ユーザーがウェブサイトからデータを抜き出しやすくする仕組みで、外部のWebアプリケーションとの連携を取りやすくなります。
使う心当たりがなければ削除しましょう。

表示されているソースコード
<link rel="https://api.w.org/" href="https://site-dimain.com/wp-json/">
function.phpに追記するソースコード
// wp versionを非表示にする
remove_action('wp_head','rest_output_link_wp_head');

oEmbed の削除

oEmbedはYouTubeやTwitterなどの外部コンテンツを埋め込むための機能です。
外部コンテンツを埋め込まない場合は消しましょう。

表示されているソースコード
<link rel="alternate" type="application/json+oembed" href="https://site-domain.com/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fwww.poroanet.com%2Fblog%2Fwordpress%2F58.html" />
<link rel="alternate" type="text/xml+oembed" href="https://site-domain.com/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fwww.poroanet.com%2Fblog%2Fwordpress%2F58.html&format=xml" />
function.phpに追記するソースコード
// oEmbedを非表示にする
remove_action('wp_head','wp_oembed_add_discovery_links');

プラグイン派生のもの

Jetpackで自動挿入されるogタグの削除

function.phpに追記するソースコード
// Jetpackで自動挿入されるogタグを非表示にする
remove_action('wp_head','jetpack_og_tags');

WPML generator の削除

function.phpに追記するソースコード
// WPML generatorを非表示にする
global $sitepress;
remove_action( 'wp_head', array( $sitepress, 'meta_generator_tag' ) );

revslider generator の削除

function.phpに追記するソースコード
// revslider generatorを非表示にする
function remove_revslider_meta_tag() { return ''; }
add_filter( 'revslider_meta_generator', 'remove_revslider_meta_tag' );
中村 一浩

中村 一浩

株式会社ココログラフ代表。SEO歴10年。