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タ……">
抜粋を設定していないので、このように生成されています。ちゃんと記事の冒頭が使われていますね。