Laravelのページネーションでrel=”next”とrel=”prev”を実装する
ページネーションの実装時に、GoogleのGoogle ウェブマスターブログ 複数ページにまたがる記事やコンテンツをお持ちの方へ。rel=”next” と rel=”prev” を使用したページネーションのご紹介とか、Googleウェブマスター向け公式ブログ 検索結果に「すべて表示」ページを優先的に表示する方法のあたりを見ると、以下の方針でマークアップしなさいと書いてあります。
1.「すべて表示」ページがある場合はcanonicalタグを表示
2.「すべて表示」ページがない場合、もしくはページネーションの方を優先させたい場合は、rel=”next”とrel=”prev”を利用して前後のページ関係を表す。
3.「すべて表示」ページを検索結果に表示しないことを強く希望する場合は、「すべて表示」ページに “noindex” を設定。
個人的には、コンテンツ作成側に意思表示させるのではなく、ロボットのほうが頑張って欲しいとおもっています。
さて、Laravelでrel=”next”とrel=”prev”を実装する方法です。かんたんです。
まず、paginateメソッドでコレクションをもってきます。
$cars = Car::onsale()->where('xxxx', 'yyyy')->paginate(20);
画面表示します。大抵の場合、page=1と、ページ指定なしは重複コンテンツのため、page=1の場合は文字列を非表示にしています。
@if($cars->currentPage() > 1) @if($cars->currentPage() == 2) {{-- もしくはcanonicalでもよい --}} <link rel="prev" href="{{ str_replace('?page=1', '', $cars->previousPageUrl()) }}" /> @else <link rel="prev" href="{{ $cars->previousPageUrl() }}" /> @endif @endif @if($cars->hasMorePages()) <link rel="next" href="{{ $cars->nextPageUrl() }}" /> @endif
結果
1ページめ
<link rel="next" href="https://example.com/search/yyyy?page=2" />
2ページめ
<link rel="prev" href="https://example.com/search/yyyy" /> <link rel="next" href="https://example.com/search/yyyy?page=3" />
最後のページ
<link rel="prev" href="https://example.com/search/yyyy?page=17" />
成功しました!