タグの記事リストを使ったSEO対策

関連した記事リストを表示してページセッション数を上げる

プログラムでやる事

個別の記事ページに、特定のタグが設定された記事リストを表示します。表示する場所は、コメントフォームの下に記事リストを追加します。

タスクリストとしては、

  • タグの取得
  • 引数の設定
  • WP_Queryの実行
  • ループ処理内でHTMLの生成
  • フィルターフックに関連付け

WordPressのタグを使って、類似する記事をまとめておくことで、ページを閲覧したユーザーに少しでも多くの記事を見てもらうことができるようになります。また、タグ名がh3タグで設定されるようにしてみます。

タグの取得

各記事に設定されたタグを取得するコードは以下の通りです。

$t = get_the_tags(get_the_ID());

$tにはオブジェクト配列が返されるので、foreachでデータを整えます。

引数の設定

foreachを利用して、WP_Queryで設定する引数を$argsとして作成し、タグ名を格納する専用の変数も用意します。

foreach($t as $tag) {
  $args['tag'] = $tag->slug;
  $args['showposts'] = $tag->count;
  $name = $tag->name;
  break;
}

showpostsとして取得したい記事の数を指定することが可能です。この引数を指定しないと記事が1件しか取得できないので注意が必要です。

$name変数にはタグ名を設定しておき、h3タグ内で使います。

WP_Queryの実行

foreachを使って$args配列を生成したので、WP_Queryの引数としてそのまま指定します。

$query = new WP_Query($args);

ループ処理内でHTMLの生成

必要なデータが揃いましたので、記事リストを構成するHTMLを生成します。冒頭でh3にタグ名を設定しています。

if ( $query->have_posts() ) {
  echo '<h3>'.$name.'</h3>';
  echo '<ul>';
  while ( $query->have_posts() ) {
    $query->the_post();
    echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
  }
  echo '</ul>';
} else {
	
}

生成されるHTMLは、通常のUnordered List(ul li)です。記事ページの下部にまとまった数の関連記事を配置しておくことでSEO対策が出来ます。

フィルターフックに関連付け

コメントフォーム下に記事リストを配置するに、

comment_formフィルターフック

を利用します。

コメントフォームの下を広告スペースにする

使い方の詳細は、上のページで記事にしてあります。

add_filter('comment_form', 'comment_form_insert_post');

コード全体

記事にタグを設定してあれば、以下のコードをfunctions.phpの最後に追加することで、記事リストをコメントフォーム下に表示することが出来ます。

function comment_form_insert_post(){

if( is_single() )
{
  // タグの取得
  $t = get_the_tags(get_the_ID());
	
  if($t)
  {
    // 引数の設定
    foreach($t as $tag) {
      $args['tag'] = $tag->slug;
      $args['showposts'] = $tag->count;
      $name = $tag->name;
      break;
    }

    // データベースからデータを取得	
    $query = new WP_Query($args);

    // HTMLの生成
    if ( $query->have_posts() ) {
      echo '<h3>'.$name.'</h3>';
      echo '<ul>';
      while ( $query->have_posts() ) {
        $query->the_post();
        echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
      }
      echo '</ul>';
    } else {
    
    }
		
    wp_reset_postdata();
  }
}

}

add_filter('comment_form', 'comment_form_insert_post');