Shopify コレクション・タグの重複URLとクロール

Shopifyでは、同じ商品が /collections/コレクション名/products/商品名 と /products/商品名 の両方で開きます。タグで絞り込んだURLも生まれます。この重複がクロールに影響するのか、という相談がよく寄せられます。
答えは「影響する。ただし索引の重複と、クロールの無駄は別の問題」です。Shopifyの標準テーマは、コレクション経由の商品URLに、単体URLを指すcanonicalを出力します。どちらが正かは伝わっているため、索引が二重になることは通常ありません。クローラーは、ページを読み取っていくプログラムです。一方で、クローラーはcanonicalを読む前に、そのURLを取得しなければなりません。取得した分のクロールバジェットは消費されます。
この記事では、重複URLが生まれる構造と、canonicalが解決すること・しないことを整理します。クロールバジェットの観点で確認すべき点、タグ・フィルタURLの処理方針も取り上げます。
結論: 索引の重複はcanonicalで防げる。クロールの無駄は別途管理が必要
問題 | Shopify標準の状態 | 影響 | 対処 |
|---|---|---|---|
同じ商品が複数URLで開く | canonicalが単体URLを指す | 索引の重複はほぼ起きない | テーマがcanonicalを正しく出しているか確認 |
コレクション経由URLがサイト内リンクに使われる | テーマの設定次第 | クローラーが重複URLを大量に取得 | 内部リンクを単体URLに統一 |
タグフィルタURLが無数に生まれる | 索引可能な状態のことが多い | 低価値ページがクロールバジェットを消費 | noindexまたはrobotsで制御 |
ソート・フィルタのクエリパラメータ | 索引可能 | 同上 | canonicalとrobotsで制御 |

商品数が数百点で、コレクションとタグが少ないうちは、この問題は実害になりにくいです。商品が数千点、タグが数百種類になり、コレクションの組み合わせが増えると話は変わります。クローラーが「本当に索引してほしいページ」にたどり着く前に、予算を使い切ります。
重要な考え方: クロールバジェットは、ドメイン単位で「クローラーが一定期間に処理するURL数」の上限です。重複URLは索引されなくても、取得はされます。取得された分だけ、新商品や更新した商品ページの発見が遅れます。
重複URLが生まれるところ
Shopifyの商品には、次の3系統のURLが存在しえます。
単体URL: /products/商品ハンドル。これが正のURLです。
コレクション経由URL: /collections/コレクションハンドル/products/商品ハンドル。コレクションページから商品をクリックしたときに、テーマが作るURLです。
タグ・フィルタ・ソートURL: /collections/コレクションハンドル/タグ名、または ?sort_by= や ?filter.v.option= などのクエリパラメータ付きURLです。
1と2はcanonicalで統一されます。3は商品ページではなく、一覧ページの派生です。canonicalの向きがテーマによって異なり、索引可能なまま放置されていることがよくあります。タグで絞り込んだURLを開き、canonicalがどこを向いているか確認してください。
canonicalが解決すること、しないこと
canonicalは「このURLの正は別のURLです」と検索エンジンに伝える宣言です。解決するのは、索引の統合と評価の集約です。クローラーの行動そのものは制限しません。
解決すること: 同じ商品が検索結果に2回出ることを防ぎます。リンク評価を単体URLに集めます。
解決しないこと: クローラーが重複URLを取得すること。サイトマップに重複URLが載っていること。内部リンクが重複URLを指していること。
内部リンクがコレクション経由URLを指していると、クローラーは毎回そのURLを取得してからcanonicalを読み、単体URLへ移動します。サイト全体でこの往復が積み重なると、クロール効率ははっきり下がります。商品カードのリンク先が /products/ 直下になっているか確認してください。
クロールバジェットの観点で確認すること
確認項目 | 確認方法 | 判断基準 |
|---|---|---|
索引されたURLのうち、コレクション経由URLの割合 | Search Consoleのページレポート、site:検索 | ゼロに近いほど良い |
クロール済み・未索引URLの数と種類 | Search Consoleの「クロール済み、インデックス未登録」 | タグ・パラメータURLが大半なら要対処 |
内部リンクが単体URLを指しているか | テーマの商品カードのリンク先を確認 | すべて /products/ 直下が理想 |
サイトマップの内容 | /sitemap.xml とその配下 | 単体URLのみが載っているか |
ボットの取得ログ | サーバーログまたはボットログ | 重複URLの取得回数が多いなら要対処 |
最後の項目が、最も直接的な証拠です。ただ、Shopifyの管理画面からはボットの取得ログが見えません。ここは別の手段が要ります。まずはSearch Consoleの「クロール済み、インデックス未登録」を確認します。
タグ・フィルタURLの処理方針: 3つの選択肢
方針 | 内容 | 向いているケース | 注意点 |
|---|---|---|---|
A. 索引させない | タグ・パラメータURLにnoindexを付与、またはrobots.txt.liquidでクロール自体を制限 | タグが検索需要を持たない場合(色・サイズなど) | robotsで止めるとcanonicalも読まれない |
B. 一部を正式なページに昇格 | 検索需要のあるタグ(用途・シーンなど)を独立したコレクションにして説明文を付ける | 「ギフト」「夏用」など検索される絞り込み | 説明文のないページを増やさない |
C. canonicalで親コレクションに集約 | フィルタURLのcanonicalを親コレクションに向ける | 方針AとBの中間 | クロール自体は続く |

多くのストアでは、AとBの併用が現実的です。「ギフト」のように検索される絞り込みだけを、Bで正式なページにします。色やサイズのようなそれ以外は、Aで止めます。タグを、検索需要のある・なしで二つに分けるところから始めます。
商品数が増えたときに起きること
商品が数千点、コレクション数十、タグ数百になると、理論上のURL数は商品数の何倍にもなります。この状態で新商品を追加しても、クローラーが見つけるまでに時間がかかります。季節商品の索引が、販売期間に間に合わないことも起きます。
Search OSは、この段階のストアに対して、ボットログでGooglebotやGPTBotがどのURLをどれだけ取得しているかを確認します。重複URL・低価値URLの取得比率を可視化します。そのうえで、canonical・noindex・サイトマップ・内部リンクの修正を優先順位つきで整理します。Shopifyのテーマや商品データを変えるのではありません。ボットが読む層の無駄を減らし、索引してほしいページに予算を回す考え方です。
よくある質問
コレクション経由の商品URLをすべて無くすべきですか
無くさなくて問題ありません。canonicalが正しければ、索引は統一されます。ただし、内部リンクは単体URLに統一するほうがクロール効率は上がります。
タグページをnoindexにすると、タグで検索している人を逃しませんか
検索需要のあるタグは、noindexにしないでください。説明文のある独立したコレクションに昇格させます(方針B)。需要のないタグだけを止めます。
robots.txtでフィルタURLを止めるのとnoindexはどちらが良いですか
robotsで止めるとクロール自体が減ります。ただし、canonicalやnoindexは読まれません。すでに索引されているURLを外すなら、noindexを先に使ってください。索引が消えてからrobotsで止める順序が安全です。
あわせて読みたい
参考資料
Google Search Central: Managing crawl budget for large sites
Google Search Central: Consolidate duplicate URLs
Google Search Central: Faceted navigation best practices
Shopify Help Center: SEO