アルコのブログ

アルコブログ TOP > WordPressの高速化とセキュリティ向上を両立させる施策まとめ

2016.11.21 アルコ編集部


WordPressの高速化とセキュリティ向上を両立させる施策まとめ

x02

誰でも扱いやすいオールマイティーなCMSとして不動の地位を確立したWordPress、個人から企業まで多くのユーザがいます。用意された関数で挙動を制御でき、扱いやすさが人気となった理由のひとつでしょう。

しかし単純な関数で扱える反面、どうしてもHTMLのソースコードがゴチャっとしてしまう欠点があります。どんなテンプレートでも大抵含まれているwp_head関数、wp_footer関数は重要で欠かすことが出来ないのですが、場合によっては不要なタグが書き出されてしまったりするので、意図しないSEOで重要なlinkタグ等の出力を制御したい、そんなときのカスタマイズ方法について紹介します。

テンプレートに直接記述されているコードは編集、削除も簡単なのですが、wp_head関数やwp_footer関数といった関数を呼び出すことで制御されているフックされているタグについては、また別に手を加えなければ削除出来ません。

wp_head関数使わずに必要なタグを書いていけばいいとも思うのですが、プラグインがこの関数にフックしてJavaScriptやCSSを出力することが多いので、これら関数をテンプレート内で呼び出さないと正常に動かなくなる可能性があります。

テンプレート内のfunctions.phpに記述することで、そのフックされたアクションを削除することによって、意図しないコードを削除していきます。

フィードに関するlinkタグ

以下のようなlinkタグが出力されます。

<link rel="alternate" type="application/rss+xml" title="XXXX » フィード" href="http://xxxx/feed/" />
<link rel="alternate" type="application/rss+xml" title="XXXX » コメントフィード" href="http://xxxx/comments/feed/" />
<link rel="alternate" type="application/rss+xml" title="XXXX » Hello world! のコメントのフィード" href="http://xxxx/hello-world/feed/" />

様々なフィードがありますが、大抵は投稿に関するフィードのみ出力されれば良いはずなので、削除してしまいます。必要なフィードに関しては手動でテンプレート内に書き込みましょう。そもそも最近はフィードを使うことが主流でなくなってきていますし今後廃れていくものかもしれません。
(GoogleもGoogle ReaderやGoogle Feed APIなどのフィードに関するサービスを次々に終了させています)

// 投稿、コメントのフィードに関するlinkタグを削除
remove_action( 'wp_head', 'feed_links', 2 );
// カテゴリごと、タグごと、投稿者ごと、検索のフィードに関するlinkタグを削除
remove_action( 'wp_head', 'feed_links_extra', 3 );

generator

バージョンいくつのWordPressで動いているか出力されます。

<meta name="generator" content="WordPress x.x.x" />

過去のWordPressには深刻な脆弱性があり、それらは攻撃に使われることも多いです。伏せておける情報は伏せておきたいところです。
悪意のある人に情報を与えるだけなのでこのタグは完全に不要でしょう。こんな情報がなくても攻撃は出来てしまうものですが…百害あって一利なし、少しでもリスクを減らすために削除しましょう。

// generatorを削除
remove_action( 'wp_head', 'wp_generator' );

shortlink

投稿IDのクエリ付きのURLが出力されます。長いパーマリンクを設定していても、このURLで記事にアクセスすることが出来ます。

<link rel='shortlink' href='http://xxxx/?p=1' />

パーマリンク設定している場合は設定したURLにリダイレクトされますが、この短縮URLを使わないのであればbotがこの値を参考にするかは分かりませんがURLの重複を避けSEO的にも削除しておきたいタグ。

// link shortlinkを削除
remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );

EditURI

XML-RPCという規格を使用して、WordPressに記事を投稿する際に使用するタグが出力されます。

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

この機能を使う予定がないのであれば、削除してしまって大丈夫です。

// link rel EditURIを削除
remove_action( 'wp_head', 'rsd_link' );

wlwmanifest

Windows Live Writerというマイクロソフトのブログ投稿編集アプリケーションに必要なタグが出力されます。

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

Office製品のようにブログの記事を書けるアプリケーションのようですが、使う予定がなければ削除してしまいましょう。

// link rel wlwmanifestを削除
remove_action( 'wp_head', 'wlwmanifest_link' );

canonical

重複するページがある場合、検索エンジンに重複コンテンツであると明確に伝えることで評価の低下を避けるために使用するlinkタグrel属性canonicalの値をwp_head関数は出力します。

<link rel="canonical" href="http://xxxx/xxxx/" />

適切に出力してくれる分には大変ありがたいのですが、自分で意図的に設置したい場合などに不要なcanonicalが出力されてしまうことによってSEO的によくない評価を受けてしまうことを避けます。

wp_head関数で自動的に出力させると投稿ページに同URLへのcanonicalという不要なcanonicalが出力されてしまうので、スマートにするためにも出力されないように設定して必要なところに適切に設定しましょう。

// link rel canonicalを削除
remove_action( 'wp_head', 'rel_canonical' );

link rel=”prev” link rel=”next”

wp_head関数にフックされているadjacent_posts_rel_link_wp_head関数は前の投稿に対してprev、次の投稿に対してnextの値を持つタグを出力します。
prevとnextの値は本来、例えばnextの値が入るのはその記事の2ページ目といったページネーションされているページに対して使用されるものであって、次の記事や前の記事がその記事に対して全ての場合において適しているものとは言えません。その記事に続いている内容である場合は良いのですが、通常のBlog記事などの場合はそうでもないと思いますので削除します。

ブラウザのFireFoxがnextのURLへアクセスする機能を有しているようで、場合によっては負荷が増えることが考えられます。先読みして読み込みを早くするらしいので良いとも悪いとも言い難いですが、気になるようだったらやはり削除しておくのが望ましいでしょう。

// link rel prevとnextを削除
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );

WordPress 3.3.0より以前のものの場合、rel=”index”、rel=”up”、rel=”start”というlinkタグも出力されるのでこちらも削除するには

// link rel indexを削除
remove_action( 'wp_head', 'index_rel_link' );
// link rel startを削除
remove_action( 'wp_head', 'start_post_rel_link', 10 );
// link rel upを削除
remove_action( 'wp_head', 'parent_post_rel_link', 10 );

絵文字関連のjsとcss

WordPress 4.2から投稿に絵文字が使えるようになりました。絵文字を使わないのであれば削除してしまってもよいでしょう。

// 絵文字出力のためのjsを削除
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
// wp_head関数ではないが、上のjsを削除するならcssも不要
remove_action( 'wp_print_styles', 'print_emoji_styles' );

さらにWordPress 4.6からはdns-prefetchというlinkタグが出力されるようになりました。

<link rel='dns-prefetch' href='//s.w.org' />

予め外部のURLに対し強制的に名前解決を行っておくことによって表示が早くなる、というものです。
DNS プリフェッチの制御
絵文字関連でCDNに対するdns-prefetchが出力されるようになっているので、絵文字を使わない場合はこれを削除しても構わないでしょう。

// 絵文字関連のdns-prefetchを削除
add_filter( 'emoji_svg_url', '__return_false' );

oEmbed関連

WordPress 4.4で「oEmbed」という機能が追加されました。他のWordPress等でURLを投稿するだけで記事のタイトルや抜粋、アイキャッチを埋め込めこむことが出来ます。このような仕組みは最近SNSでよく見かけますね。埋め込まれた場合は視覚的にも目立ちますし、ユーザの流入数増加も望めます。
残していても良いと思いますが、アクセスの多いサイトに埋め込まれた場合、こちらのサイトへの負荷も大きくなります。

これらメリットやデメリットを検討して不要な場合は削除してしまいましょう。

remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
remove_action( 'wp_head', 'rest_output_link_wp_head' );
// wp_head関数ではないが、embedを停止するなら不要になる
remove_action( 'template_redirect', 'rest_output_link_header', 11 );

これら関数のフックを外したらだいぶhead内がスッキリしたのではないでしょうか?
ちなみにWordPressの標準テンプレートである「twentysixteen」に上記の施策を行う前と行った後のhtmlのhead内を見てみると…

01

↓↓

02

かなりスッキリしましたね。そのサイトに対して意味のないタグは存在していても気持ちが悪いですし、負荷が増える原因にもなってしまいます。

不要と判断したものは外す方が、高速化、SEO、セキュリティの面でみてもメリットがあります。

集客改善、コンバージョン率改善などお気軽にお問い合わせください。

お電話でのご相談窓口はこちら 03-5428-3177

この記事の著者

アルコはインターネットマーケティングのコンサルティング会社です。このブログではインターネットを活用した企業の経営改善に関するノウハウををお届けします。

定期購読

  • RSSを登録する
  • feedly

最新記事

人気の記事

カテゴリ

▲ページの先頭に戻る