WordPressのテンプレートで、metaタグdescriptionを自動で生成してみる。

SEO対策というより、基本は基本で書き方は守っておいた方がいい。たとえ今は無駄だと省かれていてもね。

EW-SYS.INFO

metaタグdescriptionを生成するソースコード

ある日、気がついたのですが、ウェブページのheadタグの中に、descriptionのmetaタグが無い。ということ。あれ?今は要らないの?ページの概要とか趣旨みたいなものを書いておくところだったよね。あっれ~?となったので、面倒くさがりなわたしは、Wordpressのテーマの中にある function.php に、metaタグdescriptionを、自動で生成してくれる以下のソースを追加してみました。

// meta description
function my_description(){
	$post_data = get_post();
	$description = strip_tags($post_data->post_content);

	if ( is_front_page() ) {
		$description = get_bloginfo( 'description' );
	}
	elseif ( is_category() ) {
		$description = category_description();
	}
	elseif ( is_single() ) {
		if ($post_data->post_excerpt) {
			$description = $post_data->post_excerpt;
		}
	}
	
	$description = str_replace("\n", "", $description);
	$description = str_replace("\r", "", $description);
	$description = mb_strimwidth( $description, 0, 256, "……", "utf-8" ); 
	echo "<meta name='description' content='" . $description . "'>";
}
add_action('wp_head', 'my_description');

丸写しでも働くでしょうけど、内容を理解すると、安心安全なので、phpの書き方の基本は省きますが、何をしているのか内容を解説します。

	$post_data = get_post();
	$description = strip_tags($post_data->post_content);

この一文で、$post_dataという変数に、ページの全ての内容を格納しています。

そこから、$descriptionという変数に、strip_tag()関数で、htmlタグを省いたページの記事部分を格納しています。

	if ( is_front_page() ) {
		$description = get_bloginfo( 'description' );
	}
	elseif ( is_category() ) {
		$description = category_description();
	}
	elseif ( is_single() ) {
		if ($post_data->post_excerpt) {
			$description = $post_data->post_excerpt;
		}
	}

次に、ページごとに、欲しい内容を取得します。

  • フロントページに設定されたページでは、WordPressの[設定 – 一般]にある「キャッチフレーズ」に入力された内容を取得します。
  • カテゴリーページでは、WordPressの[投稿 – カテゴリー]の「説明」に入力された内容を取得します。
  • 投稿記事のページでは、記事の「抜粋」が入力されていれば、その内容を取得します。

それぞれのページで、$descriptionの内容を変えています。まず最初に、記事の全文を入れたのは、ここであげたページ以外で、$descriptionが空っぽにならないように、すべての内容を入れておいたのです。処理負荷は上がるかもしれませんが、複雑な条件分岐の構文を避けるためです。

	$description = str_replace("\n", "", $description);
	$description = str_replace("\r", "", $description);
	$description = mb_strimwidth( $description, 0, 256, "……", "utf-8" ); 

それぞれのページで利用する内容が取得できたところで、内容の消毒、本来のdescriptionタグで要らない文字を取り除き、必要な文字数に減らす作業を行います。

まず、改行コード(¥nや¥r)は要りません。全文では長すぎるので、内容の先頭から、半角で256文字(全角で128文字)に削っています。

この方法だと、ページを作成するにあたって、書き始めはページの趣旨を書くようにすると良いでしょう。

このあたりのソースコードをもっと工夫すると、SEO対策の強化になりますよね。

	echo "<meta name='description' content='" . $description . "'>";

いろいろ加工した$descriptionを、<meta>タグとして、こういう風に書き出しなさい。ということをしています。

add_action('wp_head', 'my_description');

そして最後に、記事の内容を取得して<meta>タグをつくる関数を、wp_headの中で実行させなさい。という趣旨のことが書いてあります。

これで、普通に投稿や固定ページを書くだけで、descriptionの<meta>タグが自動で出力され、検索サイトに叱られる要素が減りました。

今後、WordPressが標準でやってくれるようになったら、function.phpから、このソースコードを消せば良いだけ。

ちなみに、この投稿の場合は

<meta name="description" content="WordPressのテンプレートで、metaタグdescriptionを自動で生成してみる。SEO対策というより、基本は基本で書き方は守っておいた方がいい。たとえ今は無駄だと省かれていてもね。metaタグdescriptionを生成するソースコードある日、気がついたのですが、ウェブページのheadタ……">

抜粋を設定していないので、このように生成されています。ちゃんと記事の冒頭が使われていますね。

scroll page top ▲