Search OS
ブログ一覧
GuidesShopify

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が存在しえます。

  1. 単体URL: /products/商品ハンドル。これが正のURLです。

  2. コレクション経由URL: /collections/コレクションハンドル/products/商品ハンドル。コレクションページから商品をクリックしたときに、テーマが作るURLです。

  3. タグ・フィルタ・ソート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の中間

クロール自体は続く

タグ・フィルタURLの処理方針: 3つの選択肢

多くのストアでは、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で止める順序が安全です。

あわせて読みたい

参考資料

既存のウェブサイトを維持したまま、

検索とAIが情報を読み取れる状態を確認します。

SEOの基盤からAI検索での可視性まで、継続して運用します。

まずは製品資料で、Search OSの仕組みをご確認ください。