日本語 English(Home)

ページネーションとは?SEOでの正しい実装

一覧を複数のページに分けるときは、検索エンジンがすべてのページを見つけて読めるかが大切です。rel=next/prevの現在の扱い、2ページ目以降のcanonicalとnoindex、URLとリンクの作り方、「もっと見る」と無限スクロールの対応、確かめる手順を説明します。

ページネーションとは?SEOでの正しい実装

この記事の要点:

  • ページネーションとは、記事や商品の一覧を複数のページに分け、「1・2・3…次へ」のリンクで移動できるようにする作りです。SEOでは、分けた各ページが独立したURLを持ち、リンクでたどれることが前提になります。
  • Googleは、rel=”next”とrel=”prev”を現在は使っていません。ページどうしの関係は、通常のaタグのリンクで伝えます。
  • 2ページ目以降のcanonicalは、1ページ目ではなく、そのページ自身のURLにします。1ページ目に向けると、2ページ目以降に載っている内容がインデックスされないおそれがあります。
  • 「もっと見る」ボタンや無限スクロールは、Googlebotがクリックやスクロールをしないため、そのままでは続きの内容が見つからないことがあります。各まとまりにURLを持たせ、リンクでもたどれるようにします。
  • 並び替えや絞り込みで同じ一覧が別のURLになる場合は、noindexやrobots.txtで検索に出す範囲を絞ります。

ページネーションとは:一覧を複数のURLに分ける作り

ページネーションとは、量の多い一覧や長い文章を複数のページに分け、ページ番号や「次へ」のリンクで移動できるようにする作りです。ブログの記事一覧、ネットショップの商品一覧、掲示板、検索結果の画面などで使われます。

SEOで大事なのは、見た目の部品ではなく、検索エンジンがすべてのページを見つけて読めるかどうかです。Googleの説明に沿うと、正しい実装の条件は次の4つにまとめられます(Google 検索セントラル:ページネーション、増分ページ読み込みと Google 検索への影響)。

条件具体的には
ページごとに固有のURL例:?page=2 や /page/2/。URLの「#」より後ろにページ番号を入れない
リンクでたどれる前後のページへ、href属性のあるaタグでリンクする
canonicalは各ページ自身2ページ目以降を1ページ目に正規化しない
同じ一覧の別バージョンを増やさない並び替え・絞り込みのURLは、必要に応じてnoindexやrobots.txtで扱う

一覧ページを分ける利点は、1ページの表示が軽くなること、読者が今どこを見ているかを把握しやすいことです。一方で、奥のページにある記事や商品ほど、トップからのクリック数が増え、見つかりにくくなります。この点は後の節で扱います。

Googleは分割したページをどう扱うか:rel=next/prevの今

以前、Googleは<link rel=”next”>と<link rel=”prev”>で、連続するページの前後の関係を読み取っていました。現在のGoogleの説明では、これらのタグは使っておらず、ほかの検索エンジンが使う可能性はある、とされています。

そのため、rel=next/prevを書いていても、Googleの検索での扱いは変わりません。すでに書かれているものを急いで消す必要もありません。大切なのは、次の点です。

  • Googleは、ページネーションの各URLを、それぞれ別のページとして扱います。
  • ページどうしのつながりは、href属性を持つ通常のリンクから読み取ります。
  • 各ページから1ページ目へのリンクを置くと、一覧の始まりがどこかを示せます。Googleは、1ページ目が入口として適していることの手がかりになりうると説明しています。

「2ページ目以降は重複コンテンツになるのでは」という心配もよく聞かれます。一覧の各ページは載っている記事や商品が違うため、同じ内容のページではありません。同じ内容のページの扱いは「重複コンテンツの原因と直し方」で説明しています。

2ページ目以降のcanonical・noindex・robots.txtの決め方

2ページ目以降の設定は、よく間違えるところです。Googleは、ページネーションの最初のページを、一連のページすべての正規URL(canonical)にしないよう説明しています。canonicalは「同じ内容のページのうち代表はどれか」を示すもので、内容の違うページに使うと、2ページ目以降に載っている内容がインデックスされないおそれがあるためです。

設定2ページ目以降に使うか理由
canonicalをそのページ自身に使う各ページは別の内容のページとして扱われる
canonicalを1ページ目に使わない2ページ目以降の内容が正規化でまとめられ、読まれないおそれがある
noindex原則として使わない2ページ目以降にしか載っていない記事や商品へのリンクが、たどられにくくなるおそれがある
robots.txtでのブロック使わないページそのものが読めず、奥にある記事や商品が見つからなくなる
sitemapへの記載必須ではない一覧よりも、記事や商品のページ自体をXMLサイトマップに載せる方が役に立つ

例外は、並び替えや絞り込みで生まれるURLです。例:?sort=priceや?color=redを付けた一覧は、同じ商品の並びを変えただけのページです。Googleは、こうしたURLのインデックスをnoindexで防ぐか、robots.txtでクロールを抑えるよう説明しています。並び替えと絞り込みの組み合わせは無数に増えるため、検索に出したい一覧を先に決めます。

<!-- 例:https://example.com/blog/page/3/ のhead要素 -->
<link rel="canonical" href="https://example.com/blog/page/3/">

<!-- 誤り:すべてのページで1ページ目を指している -->
<link rel="canonical" href="https://example.com/blog/">

URLとリンクの作り方:ページ番号の付け方と、たどれるリンク

ページ番号をURLのどこに入れるか

ページ番号は、クエリパラメータ(?page=2)か、パス(/page/2/)に入れます。どちらでもかまいません。WordPressは標準で /page/2/ の形を使います。大事なのは、サイトの中で形を1つに決めることです。

書き方例使えるか
パラメータ/blog/?page=2使える
パス/blog/page/2/使える
フラグメント/blog/#page=2使わない。Googleは「#」より後ろを無視するため、1ページ目と同じURLと見なされる
JavaScriptで中身だけ入れ替えURLが変わらない使わない。2ページ目以降の内容にたどり着けない

1ページ目は、/blog/ と /blog/?page=1 のように2つのURLにならないようにします。一覧の中のリンクは、1ページ目へは /blog/ を使い、?page=1 は出力しないか、/blog/ へ転送します。

Googleがたどれるリンクにする

Googleは、主にhref属性に書かれたURLをたどってページを見つけます。ボタンのクリックで動くJavaScriptは、基本的に実行しません。ページ送りの部品は、次のようにaタグで書きます。

<nav aria-label="ページ送り">
  <a href="/blog/">最初</a>
  <a href="/blog/page/2/">前へ</a>
  <a href="/blog/">1</a>
  <a href="/blog/page/2/">2</a>
  <span aria-current="page">3</span>
  <a href="/blog/page/4/">4</a>
  <a href="/blog/page/4/">次へ</a>
</nav>

上は3ページ目の例です。前後のページと1ページ目へのリンクを置き、今いるページはリンクにせず、読み上げソフトにも分かるようにaria-currentで示しています。読み手の使いやすさのため、ページ送りは一覧の下に置き、押しやすい大きさにします。

「もっと見る」と無限スクロールの扱い

ページ番号の代わりに、「もっと見る」ボタンで続きを読み込む方法や、下までスクロールすると自動で続きが出る無限スクロールもあります。読み手には便利ですが、Googlebotはボタンを押したりスクロールしたりしないため、後から読み込まれる内容を見つけられないことがあります。

Googleは、無限スクロールや増分読み込みを検索に対応させる方法として、次のことを挙げています(Google 検索セントラル:遅延読み込みされたコンテンツを修正する)。

  1. 読み込むまとまりごとに、固有で変わらないURLを持たせる。例:?page=12のように、絶対的なページ番号を使う。「昨日の分」のように意味が変わる値は使わない。
  2. 同じURLを開けば、いつも同じ内容が表示されるようにする。
  3. 各まとまりのURLへ、リンクで順にたどれるようにする。
  4. 新しいまとまりが画面の主な部分になったら、History APIで表示中のURLを更新する。
// 例:3ページ目のまとまりを読み込み、画面の主な部分になったとき
history.pushState({ page: 3 }, "", "/blog/?page=3");

// ページ送りのリンクも残しておく(JavaScriptが動かなくても続きへ行ける)
// <a href="/blog/?page=4">次のページ</a>

つまり、見た目が無限スクロールでも、裏側ではページネーションと同じ「URLのある分割」を用意するのが基本です。JavaScriptで表示を作るページ全般の注意点は「JavaScript SEOの確認点」にまとめています。

1ページにまとめるか、分けるかの判断

ページを分けるかどうかに、Googleが決めた件数や文字数の基準はありません。読み手の目的と、ページの重さで判断します。

場面向いている形理由
ブログの記事一覧ページネーション新しい順に並び、目的の記事を探して移動する
商品の一覧ページネーション、または「もっと見る」+URL付きのページ比べながら見る人が多く、位置を覚えて戻りたい場面がある
SNSのような流れて見る一覧無限スクロール+URL付きのページ目的なく続けて見る使い方に合う
1本の記事(解説や手順)原則として1ページ途中で分けると、読み手が全体を見通せず、検索からの入口も分かれる

記事を複数のページに分ける作りは、読み手が何度もクリックすることになります。分けるなら、各ページが単独でも意味の通るまとまりにし、それぞれにふさわしい題名を付けます。

一覧の奥にある記事を見つけやすくするには、ページネーションだけに頼らない作りも大切です。カテゴリーやタグで一覧を短く分ける、関連する記事どうしをリンクでつなぐ、といった方法があります。考え方はサイト構造の考え方や内部リンクの設計で説明しています。

範囲外のページ番号と、記事の無い一覧の扱い

ページネーションでは、存在しないページ番号の扱いも決めておきます。例:記事が30本で、1ページに10本ずつ表示する一覧なら、ページは3ページまでです。/blog/page/99/ のようなURLを開いたとき、空の一覧を200(正常)で返すと、中身の無いページが検索の対象になりえます。

状態返す応答の例
範囲外のページ番号(/page/99/)404
記事がまだ1本も無いカテゴリーの一覧noindex。XMLサイトマップにも載せない
記事を消して最終ページが減った減った番号は404。内部リンクから外れているかを確かめる

当サイト(seoagent.jp)では、記事がまだ無い一覧ページや、範囲外のページ番号が検索の対象になりうる状態でした。記事の無い一覧はnoindexにしてサイトマップから外し、範囲外のページ番号は404を返すようにしました。サイトの反映のたびに、404・noindexが意図どおりかを確認しています。

また、記事一覧 /ja/blog/ のcanonicalが存在しないURLを指していたことがあり、canonicalをページ自身のURLに直す処理を加えました。現在は、全ページのcanonicalが自分自身を指すことを自動の確認で確かめています。

正しく動いているかを確かめる手順と、よくある間違い

設定は画面の見た目では分からないため、次の手順で確かめます。

  1. URLを直接開く:2ページ目、最終ページ、最終ページの次の番号を、それぞれブラウザで直接開きます。最終ページの次が404になるかを見ます。
  2. 応答とcanonicalを見る:ターミナルで応答の番号とcanonicalを確かめます。
  3. リンクを確かめる:ページのソースで、ページ送りがhref属性付きのaタグになっているかを見ます。
  4. Search Consoleで見る:URL検査で2ページ目以降を調べ、「Google が選択した正規 URL」がそのページ自身かを確かめます。
$ curl -s https://example.com/blog/page/2/ | grep -io '<link rel="canonical"[^>]*>'
<link rel="canonical" href="https://example.com/blog/page/2/">

$ curl -s -o /dev/null -w "%{http_code}n" https://example.com/blog/page/99/
404
よくある間違い起きること直し方
2ページ目以降のcanonicalが1ページ目奥のページの内容が読まれないおそれ各ページ自身に直す
2ページ目以降をnoindexにしている奥にしか載っていない記事が見つかりにくくなるおそれnoindexを外し、記事の無い一覧だけに使う
ページ送りがボタンとJavaScriptだけGooglebotが2ページ目以降に進めないhref付きのaタグを出力する
範囲外のページ番号が空の一覧で200中身の無いページが増える404を返す
?page=1と1ページ目が両方ある同じ一覧のURLが2つになる?page=1を出さないか、1ページ目へ転送する

ページネーションと関わるテクニカルSEOの記事は「テクニカルSEOの記事一覧」にまとめています。

よくある質問

rel=”next”とrel=”prev”は削除したほうがよいですか?

Googleは使っていないため、残しても削除しても、Googleの検索での扱いは変わりません。ほかの検索エンジンが使う可能性はあるとされているため、すでに正しく出力されているなら、急いで消す必要はありません。

2ページ目以降が検索結果に出てしまいます。問題ですか?

多くの場合、問題ではありません。Googleは各ページを別のページとして扱います。ただし、1ページ目より2ページ目が出やすい場合は、各ページから1ページ目へのリンクがあるか、1ページ目の題名や説明が一覧の内容を表しているかを見直します。

2ページ目以降のtitleは1ページ目と同じでよいですか?

同じでも動作に問題はありませんが、「2ページ目」のように番号を加えると、読み手がどのページかを区別しやすくなります。WordPressのテーマやSEOプラグインには、自動で番号を加える設定があるものもあります。

無限スクロールをやめてページネーションに戻すべきですか?

見た目を変える必要はありません。各まとまりに固有のURLを持たせ、リンクでもたどれるようにし、表示中のURLを更新すれば、無限スクロールのままでも検索に対応できます。

SEOAGENTでできること

SEOAGENTでは、記事同士の内部リンクを提案・挿入し、一覧の奥にある記事にも関連する記事からたどれるようにできます。トピッククラスターの機能では、テーマごとの記事のまとまりを整理できます。ページネーションの出力やcanonicalの設定は、WordPressのテーマやプラグイン側で行います。

参考情報

関連する記事

「テクニカルSEO」の記事をすべて見る →

クロールバジェットとは:Googleの説明と、気にすべきサイト・しなくてよいサイト
テクニカルSEO

クロールバジェットとは:Googleの説明と、気にすべきサイト・しなくてよいサイト

クロールバジェットは、多くのサイトでは気にする必要がありません。Google の「クロール バジェットの管理」の原文に沿って、決まる仕組み、対策が必要なサイトの目安、クロールの統計情報での確かめ方、クロールを無駄にする原因と対処を、当サイトの点検結果とあわせて説明します。

AIでSEO対策を、もっと続けやすく。

機能と使い方、料金・契約条件は、サービス資料でご案内します。