WordpressでページネーションSEOのrel prev/next とcanonicalを実装する

2017-09-12 2017-09-13

Google様は検索ロボットがページ構成をちゃんと理解できるよう、ページネーションを伴ったページ遷移に対しては、「link rel=”prev”」「link rel=”next”」タグを使えとおっしゃられています。

ところが、これの設定がかなりめんどくさい。特にWordpressは凄くめんどくさい。pathを取得する関数が大量にある割に、本当に取りたいpathが中々取れなくて本当にめんどくさい。

ということで、canonical出力も合わせて一つの関数にまとめてみました。

コピペで使えるようにしてあるので、参考にしてください。

rel=”prev”、rel=”next”の意味

その前に、最低限の意味だけ説明しておきます。

「rel=”next”」は、「このページの次のページのURLはこれです」という意思表示のようなものです。上の例だと、「/page/3」が次のページということになっているので、今表示されているページは「/page/2」です。

ページネーションを利用した一覧画面において、今表示しているページの次のページのURLを指定するのが「rel=”next”」ということです。

「rel=”prev”」は「このページの前のページのURLはこれです」という意思表示のようなものです。上の例だと「/page/2」が前のページということになっているので、今表示されているページは「/page/3」です。

ページネーションを利用した一覧画面において、今表示しているページの前のページのURLを指定するのが「rel=”next”」ということです。

めんどくさい部分

WordPressに限らず、「rel prev/next」の設定にはめんどくさい点があります。

一つ目は、最初のページ、最後のページにおいて、prevかnextどちらかが必要なくなるという点です。

ページネーションの最初のページでは、前のページが無いため「rel=”prev”」のタグが必要ありません。逆に、ページネーションの最後のページでは、次のページが無いため「rel=”next”」のタグが必要なくなります。今表示しているページはページネーションの最初のページなのか、最後のページなのか、どちらでもないのか、判定を入れる必要があります。

二つ目は、1ページ目の存在です。

例えばこのサイトのTOPページのURLは「http://suzumenote.com」ですが、ページ下部にあるページネーションから2ページ目に飛ぶと、そのページのURLは「http://suzumenote.com/page/2」になっていることが確認出来ます。

単純にプログラムを組むと、prevのURLは「http://suzumenote.com/page/1」になってしまいますが、そこは「http://suzumenote.com」にしたいと思うのが人情です。

また、Wordpressのページネーションでは、1ページ目を「/page/1」と表示してしまいます。「http://suzumenote.com」が表示されている時と、「http://suzumenote.com/page/1」が表示されている時、両方を考慮する必要があります。めんどくさい。

コピペで利用できるソース(※注意点有り)

function.php

functions.phpにcanonical_prev_nextの関数を追加して、header.phpのhead部に上の関数を1行入れれば動きます。

「関数名とか変数名がダサい」
「if文がスマートじゃない」

など色々言いたいことはあるかと思いますが、良いんだよWordpressなんてこんなもんで。

TOPページにページネーションがある前提になっているので、無い方はコメント読んで調整してください。if文1行変えるだけです。