WordPressでページ送りを作った後のSEO的な一工夫

WordPressでページ送りを作った後のSEO的な一工夫

Posted 2014/03/04 by oredayo

ページ送り
とあるサイトのウェブマスターツールを見ていたらタイトルとディスクリプションの重複に関する注意が出ていました。

webマスターツールの画像

ページ送りで分割された2ページ目以降のタイトルやらディスクリプションやらのことをご丁寧に指摘してくれたようです。

WordPressのhomeやカテゴリページって、記事が増えていくと勝手にページを分割してくれるじゃないですか。
たとえば当ブログなら
http://oredayo.net/
http://oredayo.net/page/2/
みたいな感じで。

多くのテーマでは、特に何も設定しない限り、同一のタイトル・メタディスクリプションで2ページ目以降が生成されます。
まぁ大抵の場合、人間が見れば「あーこれって続きの一覧ページなんだなぁ」と理解できますが、Googleのロボットはどんなに進化しても所詮ロボットなので、しっかりと伝えてあげる必要があるのです。

やりたいこと

1.タイトルやらディスクリプションやらに「このページは2ページ目ですよ」と伝わる表記を入れたい。
2.Googleのロボットに「このページには前のページ(または次のページ)があるよ」と伝えたい。

以上の2点になります。
1.は普通にタイトルやディスクリプションなどに「2ページ目|おれだよ!!!」といったように「◯ページ目」の文字を加える作業です。

また、2.に関しては、rel=”next”とrel=”prev”というタグを使用し、Googleに分割されたページの構成を伝えるものになります。
詳しく知りたい方は下記の記事を読んでみてください。
Google、ページネーション問題を解決するrel=“next”タグとrel=“prev”タグをサポート開始 | 海外SEO情報ブログ
http://www.suzukikenichi.com/blog/google-supports-rel-next-and-rel-prev/

具体的な手順

タイトルなどに「◯ページ目」を加える

当ブログでは、タイトルタグとメタディスクリプションに「◯ページ目|」の文字を加えています。

タイトルタグを例にとって説明します。
header.php等のtitleタグを管理しているテンプレートに下記の記述を埋め込んで下さい。

<?php if($paged !=0){echo $paged."ページ目|";} ?>

僕は下記のサイトを参考にさせて頂いたのですが、一部変えている部分があります。
タイトルなどに2ページ目以降何ページ目かを表示する:WordPress | KH-WEBLOG
http://www.kxh-web.com/%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%E3%81%AA%E3%81%A9%E3%81%AB2%E3%83%9A%E3%83%BC%E3%82%B8%E7%9B%AE%E4%BB%A5%E9%99%8D%E4%BD%95%E3%83%9A%E3%83%BC%E3%82%B8%E7%9B%AE%E3%81%8B%E3%82%92%E8%A1%A8%E7%A4%BA/

if($paged !=1)
の部分は1ページ目には表示させないという記述部分なので、
1ページ目にも表示させる場合は

<?php if($paged){echo $paged."ページ目";} ?>

でOK

とのことなのですが、僕が管理している複数のサイトで試したところ下記のような状態になってしまいました。
0ページ目ってなんだよ

ということで、0ページ目に表示させないように

$paged !=1

$paged !=0

に変更して実装しています。

普通に存在している1ページ目が0ページ目としてカウントされている原因は意味不明なのですが、表示がおかしい場合は自己責任でいじってみてください。

rel=nextとrel=prevの実装

下記のような要件で実装したいと思いました。

  • homeページ、categoryページ、searchページなどの複数ページに分割されるページに実装
  • 記事ページ等で前の投稿、次の投稿には付けたくない(別に分割されているわけではないので)

どうやら、WordPressが自動でrel=nextやrel=prevを加えてくれるケースもあるようなのですが(テーマによって出力されるかどうかは違う)、その際、条件2つ目のように記事ページにも勝手に出力されてしまうそうです。
本来の意図違う使い方

これは明らかにGoogleの意図した使用方法とは異なるはずなので、functions.phpに以下の記述を加え、wp_headでrel=nextやrel=prevを自動的に出力させないようにします。

<?php
remove_action('wp_head','index_rel_link'); 
remove_action('wp_head','parent_post_rel_link'); 
remove_action('wp_head','start_post_rel_link'); 
remove_action('wp_head','adjacent_posts_rel_link_wp_head'); 
?>

参考サイト
複数ページの関連性を示すrel=prev/nextとwordpressの問題:APPOFIT
http://appofit.com/seo/seo-news/rel_prev_next/

そして、肝心な分割されるページにrel=prev、rel=nextを加えるためには、おなじみifを使った条件分岐タグで実装します。
header.php内に下記の記述を追加して下さい。

<?php if(!is_single()|| !is_page()) { ?>
<?php
global $paged, $wp_query;
if ( !$max_page )
$max_page = $wp_query->max_num_pages;
if ( !$paged )
$paged = 1;
$nextpage = intval($paged) + 1;
if ( null === $label )
$label = __( 'Next Page &raquo;' );
if ( !is_singular() && ( $nextpage <= $max_page ) )
{
?>
<link rel="next" href="<?php echo next_posts( $max_page, false ); ?>" />
<?php      
}
global $paged;
if ( null === $label )
$label = __( '&laquo; Previous Page' );
if ( !is_singular() && $paged > 1  )
{
?>
<link rel="prev" href="<?php echo previous_posts( false ); ?>" />
<?php      
}
?>
<?php } ?>

1行目の

<?php if(!is_single()|| !is_page()) { ?>

は、記事ページと固定ページ以外の全てのページに加えるための記述です。
ifの中身で「複数ページにまたがっているかどうか」という条件があるので、必要ないっちゃ必要ない記述なのですが、念の為加えています。

下記のサイトがものすごいわかりやすい解説とともに、ソースを紹介してくださっています。
rel nextとrel prevは設定しましたか?WordPressでSEO friendlyなpagingを実現するのに必須!|ウェブシュフ
http://webshufu.com/rel-next-rel-prev/

おまけに色々学びたいという方は下記ページもご覧になられてはいかがでしょうか。
条件分岐タグ – WordPress Codex 日本語版
http://wpdocs.sourceforge.jp/%E6%9D%A1%E4%BB%B6%E5%88%86%E5%B2%90%E3%82%BF%E3%82%B0

以上です。
一応上記内容はGoogleさんのルールに則ったものなので、Googleとか別に気にしねぇという方はわざわざ手間を掛けて(10分で終わりますが)まで実装する必要はないと思います。