ファセットナビゲーション

ファセットナビゲーションは、色、サイズ、価格、ブランドでカテゴリを絞り込める一方、クロールバジェットを浪費しランキングシグナルを薄める、重複に近いURLを数百万個生み出します。どのフィルターURLをインデックス登録し、どれを抑制するかを決める方法と、canonical・noindex・robots.txtの判断表を説明します。

初回公開:2026年6月25日 · 最終更新:2026年8月23日 · 上級者向け

ファセットナビゲーションは、検索エンジンが報告を受けるクロールの無駄の最大の発生源です。Gary IllyesはGoogleに報告されるクロール問題の約50%に達するとしています。すべてのフィルター組み合わせがクロール可能なURLを生むため、1万商品カタログが重複に近いページ数百万個へ変わります。まず実際の検索需要がある組み合わせをインデックス登録可能なランディングページにし、純粋なUXの組み合わせはブロックするかURLを作らないようにします。robots.txtはクロールを止めますがインデックス登録は止めず、noindexはインデックスから削除しますがクロールバジェットを節約せず、canonicalはシグナルを統合するヒントですがクロールを止めません。Search ConsoleのURL Parametersツールは2022年に廃止され、Googleではサーバー側の制御が必要です。BingにはURL Normalizationが残っています。

TL;DR — ファセットナビゲーションは、Googleに報告される過剰クロールの第1位の要因で、Gary Illyesによればクロール問題の約50%を占めます。フィルターの組み合わせごとにURLが作られると、小規模なカタログにも重複に近いページが数百万件潜み、重複コンテンツ、インデックス肥大、クロールバジェットの浪費、PageRankの分散を招きます。まず、実需がある組み合わせはインデックス可能なランディングページにし、UX専用の組み合わせは抑制します。手段は交換可能ではありません。robots.txtはクロールを止めてもインデックス登録は止めず、noindexはインデックスから除外しますがクロールが必要で、canonicalはシグナルを統合するヒントでもクロールを止めません。URLフラグメント(#)はGoogleが無視するため、このURL問題自体を回避できます。GSCのURL Parametersツールは廃止済みで、Googleではサーバー側の制御が必要です。BingにはURL Normalizationが残っています。

仕組み:フィルターがURL空間を爆発させる方法

ファセットナビゲーションは、クローラーがたどれる形でフィルターがURLを変えた瞬間にSEO上の問題になります。ここでは3つの別々の概念が混同されがちです。UI操作(買い物客がフィルターをクリックすること)、取得可能なURL状態(クリックによってクローラーが実際にリクエストできるアドレスへ変わるか)、インデックス可能なランディングページ(そのURLをGoogleのインデックスへ載せる意図があるか)です。ファセットシステムは、このうち1つ、2つ、または3つすべてを公開できます。URLを変えないクライアント側フィルターは1つ目だけ、クエリ文字列を使うフィルターは最初の2つ、「青いベルベット製ソファ」用に選定したページは意図的に3つすべてを備えます。

代表的な実装は3種類です。

パターン例クロール・インデックス登録の挙動
クエリパラメータ/sofas?color=blue&size=large最も一般的。既定でクロール・インデックス可能なので制御が必要
パスセグメント/sofas/blue/large/見た目は整うが、robots.txt で体系的にブロックしにくい
URLフラグメント/sofas#color=blueGooglebotはフラグメントを無視するため、クロール・インデックス登録への影響はない

問題の全体像は算術にあります。商品10 000件 × 色20種類 × サイズ15種類 × 並び順5種類なら、潜在的なURLは15 000 000+件です。 この主張の根拠 Combinatorial filters can turn a modest catalog into millions of possible URL states. 対象範囲: The arithmetic is illustrative; Google documents the underlying infinite-space risk. 信頼度: 高 · 検証日: Google: Managing faceted navigation Gary IllyesはLinkedInで次のように説明しました。“Sometimes you might create these new fake URLs accidentally, exploding your URL space from a balmy 1000 URLs to a scorching 1 million, exciting crawlers that in turn hammer your servers unexpectedly.” (翻訳)「意図せず新しい偽URLを作り、穏やかな1 000件のURL空間を灼熱の百万件へ爆発的に増やし、興奮したクローラーがサーバーへ予期せぬ負荷をかけることがある」

GoogleはフィルターURL空間を見ただけで、無視すると決められるわけではありません。Illyesは Search Off the Record で次のように説明しました。“Once it discovers a set of URLs, it cannot make a decision about whether that URL space is good or not unless it crawled a large chunk of that URL space.” (翻訳)「URL集合を発見した後、その大部分をクロールしなければ、そのURL空間の良否を判断できない」これがクロールに関する最大の苦情になる理由です。Googleが不要なURLだと判断できる時点では、すでに多くをクロールしています。

調査例:フィルターは罠の半分にすぎなかった

Googleの2025年末のクロール総括は、実務を考えるうえで有用です。Gary Illyesは、議論されたクロール問題の約50%をファセットナビゲーション、さらに25%をアクションパラメータによるものとしました。後者も重要です。Eコマース監査でcolor、size、brandだけを数えると、add-to-cart、比較、ウィッシュリスト、並べ替え、セッション、トラッキングの操作が作るURLを見落とします。

典型的な基準値とは主張せず、例示的な件数で調査手順を示します。ある小売サイトにはインデックス可能な商品とカテゴリが18 000件ありますが、クロールでは640 000 URLが見つかりました。クロールとログのサンプルをパラメータ別にまとめると、次のようになりました。

URL群観測URL数判明したこと
フィルター(color、size、brand)290 000組み合わせとパラメータ順の重複
アクション(add、compare、wishlist)170 000利用者の操作を実行するクロール可能なリンク
並べ替えとページネーション96 000同じ集合が別の順序と深さで出現
セッションとトラッキング71 000内部リンクに付いた受動的な重複
不明13 000自動ブロック対象ではなく、要確認のキュー

対策は一律のDisallowではありません。クロール可能なアクションリンクを削除し、内部リンクにセッションやキャンペーンのパラメータを付けず、重複するフィルター順を正規化し、不可能な組み合わせには404を返します。需要の裏付けがある少数のフィルターは安定したランディングページとして残します。サーバーログで、クローラーのリクエストがカテゴリURLと商品URLへ移ったことを確認します。クロール出力が小さくなっただけでは成功とはいえません。

それが引き起こす4つの問題

  1. 重複に近いコンテンツ。 /washing-machines/samsung/と /washing-machines/?brand=samsungが同じ商品集合を返すと、ランキングシグナルが 統合されず、2つのURLへ分散します。
  2. インデックスの肥大化。 数百万件あるURLの一部だけでもインデックスに入れば、 サイト全体の品質シグナルを押し下げます。
  3. クロールバジェットの浪費。 価値の低いファセットに使われたクロールは、 本当に新しい商品に回らなかったクロールです。影響は積み重なり、新しいコンテンツの 発見も遅らせます。(クロールバジェットが実際に問題になるのは大規模サイトです。 対象についてはクロールバジェットを参照してください。)
  4. PageRankの希薄化。 500通りのフィルター組み合わせへリンクするカテゴリページは、 本来順位を付けたい商品へ内部オーソリティを流す代わりに、501のリンク先へ分散させます。

顧客からよく聞かれるため明確にしておくと、これはペナルティの問題ではありません。 Googleはファセットナビゲーションによる重複だけを理由に手動対策を行いません。問題はクロールとインデックスの_効率_、そしてシグナルの_分散_です。

戦略的な判断が先に来る

robots.txtやmetaタグを変更する前に、URLごとに判断します。このフィルターの組み合わせはインデックスに残す価値があるか、それともないか。

  • 「ハイライズのスキニージーンズ」「防水ハイキングブーツ」「青いベルベットのソファ」のように、実際に入力される検索語へ対応するならインデックス登録する価値があります。適切なランディングページにします。
  • 任意の組み合わせ、並べ替え順、誰も検索しない深い多重ファセットなら価値はありません。これらは抑制します。

境界線はキーワード調査で決めます。候補となるファセット修飾語を抽出し、検索ボリュームを 確認して基準を設定します。実務上、独立したインデックス可能なファセットページを作る おおよその目安は**月間検索数300+**です。それ未満はブロックするか、フラグメントで 表現します。ここで重要なのがロングテールです。キーワードの99,84%は月間検索数が 1 000未満ですが、検索需要全体の39,33%を占めます。 大半のファセット組み合わせには 需要がありません。しかし需要のある少数の組み合わせは本当の機会であり、その需要を 取り込むには、該当ページだけをインデックス登録可能にする必要があります。

需要だけでは不十分です。インデックス可能なランディングページへ昇格するには、検証済みの需要、固有の価値(基準カテゴリと実際に異なる内容と商品集合)、継続的な監視(クロール、インデックス、成果)の3つが必要です。昇格したページは、長期的な成果が保証されたものではなく、価値を実証し続ける実験として扱います。追跡項目はMetricsタブを参照してください。

技術的な手段 — その違い

3つの主な制御は似て見えても交換できないため、多くの実装はここで失敗します。

robots.txtのdisallow — クロールを止める、Google推奨の予防策。 商品ページとフィルターなし一覧を許可しながら、フィルターパラメータ空間を拒否する方法は、クロールバジェットに最も強く効きます。Googleの例は次のとおりです。

disallow: /*?*products=
disallow: /*?*color=
disallow: /*?*size=
allow: /*?products=all$

注意点は、robots.txt が止めるのはクロールであり、インデックス登録ではないことです。被リンクがあるブロック済みURLは、Googleが本文を読めないためスニペットなしのURLだけの結果としてインデックスへ残る場合があります。したがって、目的が「この領域へのクロール浪費を止める」ことなら適切ですが、「インデックスから削除する」ための手段ではありません。

noindex — インデックスから削除するが、クロールは必要。 Googleの文言は “Google has to crawl the page in order to find the noindex rule.” (翻訳)「Googleはnoindexルールを見つけるためにページをクロールする必要がある」です。したがって noindex が制御するのはインデックス登録であり、クロールではありません。タグを読むためにページ取得が必要なので、クロールバジェットの節約にはならず、目的がインデックス削除のときに使います。

rel="canonical" — 統合を示すヒントで、クロール抑制としては最も弱い。 フィルター済みページから未フィルターのカテゴリへ向けると重複シグナルを統合し、Googleによれば、“may, over time, decrease the crawl volume of non-canonical versions” (翻訳)「時間の経過とともに非正規版のクロール量を減らす場合がある」一方、robots.txtやフラグメントより “generally less effective in the long term” (翻訳)「長期的には一般に効果が弱い」とされます。これは命令ではなくヒントなので無視される場合があり、Googleはcanonicalタグを見るために非正規ページもクロールするため、短期的なサーバー負荷は減りません。

URLフラグメント(#)— 問題そのものを回避する。 “Google Search generally doesn’t support URL fragments in crawling and indexing,” (翻訳) 「Google検索は通常、URLフラグメントのクロールとインデックス登録をサポートしない」ため、 /sofas#color=blueのようにハッシュでフィルター状態を表せば、クロールやインデックスへの 影響はありません。検索需要のないフィルターを防ぐ最も簡潔な方法です。フィルターは クライアント側で適用され、新しいクロール可能なURLは作られません。

フィルターリンクの rel="nofollow" — 全リンクで徹底する必要があります。 フィルターリンクをGoogleがたどりにくくできますが、Googleによれば、“every anchor pointing to a specific URL must have the rel=‘nofollow’ attribute in order for it to be effective.” (翻訳)「有効にするには、特定URLを指すアンカーすべてにrel=‘nofollow’属性が必要である」とされます。サイト内のどこかに通常リンクが1つでも残ると、この方法は漏れます。また、現在の nofollow は命令ではなくヒントです。

詳しい判断表はCheat Sheetsタブを参照してください。

重要な禁止事項

気づかないうちに問題を起こすのは、次の組み合わせです。

  • 同じURLに noindex と robots.txt の拒否を併用する。 典型的な失敗です。URLが拒否されるとGooglebotは取得できず、noindex タグを見られないため、ページがインデックスに残ることがあります。削除するにはクロールを許可して noindex を返します。
  • 同じURLに noindex と canonical を併用する。 矛盾したシグナルです。Muellerは “noindex doesn’t tell Google that you want it combined with something else and that signals should be forwarded.” (翻訳)「noindexは、別のものと統合してシグナルを転送してほしいとGoogleに伝えるものではない」と説明しています。どちらか一方を選んでください。
  • canonicalだけでクロールバジェットが減ると期待する。 canonicalはクロールを止めません。Googleはタグを確認するため非正規URLも取得し続けます。

_インデックス登録する_ファセットのURL構造ベストプラクティス

インデックス登録すると決めた少数のフィルターページについて、Googleのドキュメントは明確なルールを示しています。

  1. 区切りにはカンマ、セミコロン、パイプ、角括弧ではなく、標準の&を使います。
  2. フィルター順を統一します。/sofas/blue/fabricと/sofas/fabric/blueは2つではなく、1つのcanonical形式へ解決させます。
  3. ?color=blue&color=blueのような値の重複は200ではなく404にします。
  4. 空または不可能な組み合わせでは、/sofas/redに結果がないなら正しい404を返し、noindexを付けた200の「結果なし」ページで代用しません。
  5. インデックス可能なファセットにはクエリ文字列より分かりやすいパスを使います。/sofas?color=blue&style=&sort=より/sofas/blue/が適します。

JavaScript/AJAXファセットナビ — トレードオフを伴う予防

フィルターURLへの実際の<a href>リンクを出さないクライアント側AJAXとしてフィルターを構築すれば、ブラウザー内で絞り込みが行われ、クロール可能なURLは作られません。クロールバジェットには有利ですが、Googlebotもその状態へ到達できないため、価値のあるロングテールの組み合わせもインデックス登録されません。

大規模カタログの理想はハイブリッド構成です。需要の高いフィルター組み合わせは事前レンダリングまたはサーバーレンダリングし、固有の導入文を持つ実ページとしてリンクし、インデックス登録とサイトマップ掲載の対象にします。 一時的で需要のない状態は、AJAX、フラグメント、またはベースURLへのcanonicalを伴う pushState パラメータとしてクライアント側だけに保ちます。GoogleはJavaScriptをレンダリングしますが、HTMLのクロールより遅く、処理待ちも発生します。確実にインデックス登録したいページをクライアント側レンダリングだけに依存させないでください。詳しくはJavaScript SEOを参照してください。

URL Parametersツールは廃止された

クライアントには早い段階で説明してください。Googleは2022年4月にURL Parametersツールを廃止しました。Googleの説明は “only about 1% of the parameter configurations currently specified in the URL Parameters tool were useful for crawling.” (翻訳)「URL Parametersツールに指定されたパラメータ設定のうち、クロールに有用だったものは約1%だけだった」というものです。 この主張の根拠 Google removed the URL Parameters tool after determining that very few configurations remained useful. 対象範囲: This is a historical Search Console change, not a claim that Google never crawls parameters. 信頼度: 高 · 検証日: Google: URL Parameters tool deprecated 復活の可能性についてIllyesは “In theory yes. In practice no.” (翻訳)「理論上はあり得るが、実際には行わない」と答えています。現在、Search Consoleから特定パラメータを無視させる機能はなく、robots.txt、noindex、フラグメントなどをサーバー側で管理する必要があります。

Bingは異なります。 Bing Webmaster ToolsにはURL Normalizationが残っており、除外できるパラメータを指定できます。Fabrice Canelによれば、“our crawler will not visit the URLs with extra parameters except for an occasional test.” (翻訳)「臨時テストを除き、クローラーは余分なパラメータを持つURLへアクセスしない」とされます。Bingと、そのインデックスを利用するAI検索を重視する場合は、約5分で設定する価値があります。

パラメータの一律ブロックについて

広範なrobots.txtルールには注意してください。たとえば?type=が不要なファセットと、別の場所にある正当なページネーションまたはcanonical表示の両方に使われる場合、disallow: /*?*type=は正当なURLまで拒否します。ブロック前に各パラメータの用途を監査し、有用なページまで消す包括ルールより、対象を絞ったルールとallow例外を優先します。

自分のサイトを監査する方法

  • クロール: Ahrefs Site AuditやScreaming Frogで、URLの増殖、パラメータパターン、フィルターページの深さを把握します。
  • site:件数と実商品数: site:example.comの結果数が実カタログを大きく上回れば、ファセットによるインデックス肥大の兆候です。
  • GSC Page Indexingレポート: 「Crawled — currently not indexed」と「Duplicate without user-selected canonical」の大量発生を探します。ファセットはここに現れます。
  • サーバーログ: クロール浪費の実態を示します。Googlebotの時間が商品ではなくパラメータURLへどれだけ使われているかを確認できます。
制御を選ぶ前に、提供された棚卸しを分類します。頻出するクラスはレビュー優先度を示しますが、その中のすべてのURLをブロックすべき証明ではありません。

このサンプルにはパラメータの出現が240件あります。フィルターパラメータ108件、トラッキングパラメータ54件、並べ替えパラメータ34件、ページネーションパラメータ28件、未知のパラメータ16件です。フィルターパラメータは提供された棚卸しの45パーセントを占めます。

ピラー内での位置付け

ファセットナビゲーションは、Ecommerce SEOを代表する技術課題です。EコマースSEOが通常のSEOと別物なのではなく、難しくなる主因です。Eコマースのサイト構造ではフィルターがカテゴリ階層へ接続し、カテゴリページSEOではフィルターが置かれるページを扱います。さらに、クロールとcanonicalizationにも直結します。情報設計からこの問題へ入る技術SEO担当者も多いですが、実務上の中心はストア側にあります。

専門家メモを追加

専門家の引用を固定

新しい人物ですか?まず、 /admin/experts/ → 専門家の引用を固定 から未登録プロフィールを作成してください。