SEOにおけるページネーション

ページネーションがクロールバジェットとインデックス登録に与える影響と、noindexとcanonicalの使い分けを、HTML・PHP・サイトマップのコード例で解説します。

ページネーションは、長いコンテンツ一覧を、固有のURLを持つ複数のページに分割する仕組みです。例は/catalog/page/2、/catalog/page/3です。仕組みは単純ですが、大規模サイトではクロールバジェットを最も消費する要因の1つです。Googlebotが商品ページではなくテンプレートの一覧ページを数百ページもクロールし、カタログの一部がインデックスに登録されないことがあります。

ページネーションとは

ページネーションは、商品・記事・レビューなどの大量のコンテンツを、固有のURLを持つ連続したページに分割します。よくある形式は/catalog/?page=2、/catalog/page/2/、/catalog/2/です。検索エンジンは、各URLを別々のドキュメントとして扱います。

Googlebotはページネーションのページを順にクロールします。大規模なカタログでは深いページほどクロール頻度が下がり、新商品のインデックス登録が大きく遅れます。

ページネーションの形式は3つあり、SEOの観点では挙動が大きく異なります。

形式1番号付きページ

「1 2 3 ... 100」のボタンで移動し、各ページが固有のURLを持ちます。noindex、canonical、全ページのインデックス登録から選べるため、SEOの制御が柔軟です。

形式2無限スクロール

スクロールに応じてURLを変えずにコンテンツを読み込みます。JavaScriptをレンダリングしないと、Googlebotには最初の画面しか見えません。HTMLのフォールバックが必要です。

形式3「もっと見る」ボタン

URLは変わらず、クリックでコンテンツが追加されます。クロールの問題は同じで、JavaScriptをレンダリングしないと、Googlebotには初期表示のコンテンツしか見えません。

クロールバジェットと重複コンテンツ

商品500点を1ページ20点で表示するストアでは、カテゴリごとにページネーションのURLが25個できます。カテゴリが50あれば1,250 URLです。Googlebotは個々の商品ページにたどり着く前に、これらをクロールしなければなりません。

実例家電ECストア、8,000 SKU。ページネーションにnoindexを設定しておらず、カテゴリのURLが400以上ありました。新商品がインデックスに登録されるまで3〜4週間かかっていました。2ページ目以降にnoindex, followを追加したところ、インデックス登録までの期間は3〜5日に短縮されました。

ページネーションがSEOにもたらす問題は、具体的には3つあります。

  • 重複コンテンツ同じカテゴリのTitleとDescriptionが、/page/1と/page/15で同一になります。セクションの見出しも繰り返されます。Googleは似たページを見て、どれを上位に表示すべきか判断できません。
  • PageRankの分散内部リンクが数十のページネーションURLに分散します。10ページ目以降の商品に渡る内部リンクの評価は、ごくわずかです。
  • クロールバジェットの浪費小〜中規模のサイトでも、Googlebotは優先したいコンテンツではなく、テンプレートの一覧ページにクロールバジェットを使ってしまいます。

ページネーション形式の比較

形式クロールのしやすさ重複SEOでの対処
番号付きページ全URLをクロールできるあり(Title/Description)noindex/canonical/全ページのインデックス登録
無限スクロール最初の画面のみ(JSなしの場合)なし(URLが1つ)HTMLフォールバック+レンダリング
「もっと見る」表示済みのコンテンツのみなし(URLが1つ)SSRまたはJSのレンダリング

SEO設定の方針

方針を選ぶ基準は1つだけです。2ページ目以降に、単独で検索される価値があるかどうかです。オーガニック検索から/catalog/page/7に着地するユーザーがいなければ、そのページにクロールバジェットを使う意味はありません。

方針の選び方:ブログはnoindexでページネーションを閉じます。大規模ECは固有のメタタグを付けて全ページをインデックスに登録します。中規模のカタログは、1ページ目を指すcanonicalを使います。

方針1:2ページ目以降をnoindexにするブログ、ニュース、コンテンツサイトに最適です。ページネーションのページには単独の検索価値がないため、noindex, followでインデックスから外し、リンクのクロールは維持します。クロールバジェットが実際のコンテンツに回ります。

方針2:1ページ目を指すrel=canonical noindexより穏やかな方法です。2ページ目以降には(直接リンクや広告のために)アクセスできる状態を残し、canonicalは/page/1を指します。Googleはシリーズ全体を1つのセクションとみなし、1ページ目を正規URLとして扱います。

方針3:全ページのインデックス登録各ページネーションのページに固有の商品があり、インデックスに登録したい大規模ECに向きます。ページごとに固有のTitleとDescription(例:「ノートPCを購入 — 3ページ目」)と、自己参照のcanonicalが必要です。

簡単な確認方法:GSCの[検索パフォーマンス]を開き、URLを/page/で絞り込みます。ページネーションのページがオーガニック流入を生んでいるなら、noindexを設定する前によく検討してください。

技術的な実装

必要になるのは、ほとんどの場合<head>内の3つの記述です。<meta name="robots">、<link rel="canonical">、サイトマップのエントリです。それぞれのコード例を示します。

rel=next/prev:廃止された属性

2019年より前、Googleはページネーションのシリーズを識別するためにrel="next"とrel="prev"に対応していました。2019年3月、Googleはこれらの属性の使用をやめたと発表しました。Google向けに追加しても意味はありません。Bingは正式に対応していますが、多くの市場でBingのシェアはごくわずかです。

出典:Google Search Central Blog、2019年3月「An update on rel-prev-next」。Googleは次のように述べています。「we've been using these as a hint, but dropping them doesn't affect indexing」

ページネーションのページにnoindexを設定する

2ページ目以降の<head>に追加します。要点は、noindex, nofollowではなくnoindex, followを使うことです。nofollowにすると、Googlebotはページネーションのページからのリンクをたどらず、そこからリンクされている商品や記事もインデックスに登録しません。

html
<!-- Page /catalog/page/2/ and above -->
<head>
  <meta name="robots" content="noindex, follow">
</head>

<!-- Page /catalog/ (first page) — no noindex -->
<head>
  <meta name="robots" content="index, follow">
</head>

WordPressでは、wp_headフックでis_paged()を判定して実装します。

php
// functions.php
add_action('wp_head', function() {
    if (is_paged()) {
        echo '<meta name="robots" content="noindex, follow">' . "\n";
    }
});

1ページ目を指すrel=canonical

2ページ目以降にアクセスできる状態を残しつつ、セクションとして重複させたくない場合は、canonicalで1ページ目を指します。1ページ目には自己参照のcanonicalを設定します。

html
<!-- /catalog/page/3/ -->
<head>
  <link rel="canonical" href="https://example.com/catalog/">
</head>

<!-- /catalog/ — self-canonical (required) -->
<head>
  <link rel="canonical" href="https://example.com/catalog/">
</head>
canonicalとnoindexは、伝える意図が異なります。ユーザーに見せるページネーションの方針と合致する場合にだけ使い、公開したいコンテンツをGoogleが引き続き発見できるか確認します。どちらも、URLとリンクの設計を丁寧に考える代わりにはなりません。

sitemap.xmlのページネーション

ルール:sitemap.xmlには、インデックスに登録したいページだけを含めます。noindexのページをサイトマップに入れると、シグナルが矛盾し、クロールバジェットを浪費します。

xml
<!-- sitemap.xml — indexable pages only -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

  <!-- Page 1 — always include -->
  <url>
    <loc>https://example.com/catalog/</loc>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>

  <!-- Pages 2+ — only with full indexing strategy -->
  <url>
    <loc>https://example.com/catalog/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.4</priority>
  </url>

</urlset>

よくあるページネーションの間違い

間違いの多くは、概念の誤解ではなく、実装時の見落としから生じます。CMSのサイトマップ生成機能やメタタグのテンプレートは、ページネーションを考慮していないことがよくあります。

1ページ目にnoindexが付く

if page > 1の条件の書き方が誤っていて、カテゴリのメインページにもnoindexが付いてしまいます。セクションのトラフィックは数週間でゼロになります。

間違い1
noindexのページがサイトマップに含まれる

サイトマップ生成機能が全URLを自動で追加します。サイトマップは「インデックスに登録して」、meta robotsは「しないで」と伝え、Googleは矛盾したシグナルを受け取ります。矛盾の解消にクロールバジェットが使われます。

間違い2
canonicalが存在しないURLを指す

1ページ目は/catalog/にあるのに、2ページ目以降のcanonicalが/catalog/page/1/(404を返すURL)を指しています。Googleは壊れたcanonicalチェーンを受け取ることになります。

間違い3
HTMLフォールバックのない無限スクロール

ページネーションがすべてJavaScriptのみで、静的なURLがありません。Googlebotには最初のN件しか見えず、カタログの残りはインデックスに登録されません。

間違い4
全ページネーションで同一のTitle

全ページのインデックス登録を採用しているのに、全ページが同じtitleタグを使っています。Googleは重複コンテンツとみなし、セクションの関連性を下げます。ページ番号を入れた固有のメタタグが、ページごとに必要です。

間違い5

これらのエラーの多くは、Google Search Consoleの[カバレッジ]で見つかります。noindexが付いたページ、除外されたURL、canonicalの競合は、レポートにすぐ表示されます。

ページネーションのページはインデックスをブロックすべきですか?
サイトの種類によります。ブログやコンテンツサイトでは、2ページ目以降に単独の検索価値がなく、クロールバジェットを消費するため、ブロックします。大規模ECでは、各ページに固有の商品があり、インデックスに登録する必要があるため、ブロックしません。
Googleはrel=next/prevに対応していますか?
いいえ。2019年3月以降、Googleはrel=nextとrel=prevの処理を正式にやめています。Bingは正式に対応していますが、Googleではこれらの属性はインデックス登録に影響しません。
ページネーションにはcanonicalとnoindexのどちらが確実ですか?
確実性ではなく、ページの目的に応じてディレクティブを選びます。固有で有用な商品やアイテムを持つページネーションのページには、順にたどれるクロール可能なリンクが必要な場合があります。絞り込みや重複のバリエーションには、別のcanonicalやインデックス登録の方針が必要なことが多くあります。
無限スクロールはSEOにどう影響しますか?
HTMLフォールバックがなければ悪影響があります。JavaScriptをレンダリングしないと、Googlebotには最初の画面のコンテンツしか見えません。対策は、コンテンツのまとまりごとに静的なURLを用意するか、サーバーサイドレンダリング(SSR)を使うことです。
ページネーションのページはサイトマップに含めるべきですか?
インデックス登録を許可しているページだけです。noindexのページをサイトマップに入れると、シグナルが矛盾し、クロールバジェットを浪費します。サイトマップには、Googleにインデックス登録してほしいURLだけを含めます。

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it