Free Shopify store auditSpeed, SEO and conversion leaks — no cost, no obligation.
Claim it
Thriftizer Solutions LLPShopify Select Partner
Book a Growth Audit
Shopify Aug 1, 2026 7 min read

BigCommerce to Shopify Migration: Handling Faceted URLs

BigCommerce's faceted search can mint hundreds of thousands of indexed filter URLs. Here's how we triage them during a Shopify migration: which become collections, which get 301'd, and which you let go.

BigCommerce to Shopify Migration: Handling Faceted URLs

The short answer: treat the facet URLs as three separate buckets, not one migration problem. A small number of BigCommerce filter URLs earn real clicks and should become proper Shopify collections with clean handles. A larger set has impressions but no clicks, and those get 301'd to the closest parent collection. Everything else — and on a big catalogue that's the vast majority — you let go, because you cannot redirect several hundred thousand query-string permutations and Google will drop them within a few crawl cycles anyway. Get that triage wrong on a BigCommerce to Shopify migration and you either lose rankings you were earning or you spend three weeks building redirects for URLs nobody has ever visited.

What BigCommerce leaves behind

Two things generate the mess. Stencil's faceted search appends parameters to category paths, so a category sits at /mens-running-shoes/ and its filtered states look like /mens-running-shoes/?Colour=Black&Size=UK%209. Custom fields and product options each become their own parameter, capitalised however whoever set them up felt that day. Then there's sorting and pagination — ?sort=newest, ?page=4 — which multiply everything again.

The second thing is that BigCommerce serves products from the root by default. /black-merino-crew-neck/, not /products/black-merino-crew-neck. Shopify won't do that. Every product URL changes, every collection URL gains a /collections/ prefix, and your facet URLs are hanging off paths that will no longer exist even before the query string is considered.

Google has usually indexed some of the filtered states. Not all, not evenly. Which ones is an empirical question, and the answer is sitting in Search Console.

Get the facet list out of Search Console first

Before anyone builds a collection or writes a redirect rule, export the full Pages report for the last 16 months, filtered to URLs containing ?. Do it early, because once the domain points at Shopify that history keeps ageing out and you can't get it back.

Then crawl the live BigCommerce store with Screaming Frog, with parameter stripping off, and let it run. It will take longer than you expect. Cross-reference the two: the crawl tells you what exists, Search Console tells you what Google cared about. Server logs, if you have 90 days of them, tell you which facet URLs Googlebot actually revisits, and that's the most useful of the three signals. A URL Googlebot hasn't touched in two months is not going to punish you for disappearing.

Sort the Search Console export by clicks, descending. The shape of that list is almost always the same: a short head of facet URLs doing real work, a long body with impressions and near-zero clicks, and then thousands of rows with one impression from eleven months ago.

The arithmetic that decides your scope

Take a catalogue with 40 categories and four filter dimensions — 12 colours, 6 sizes, 20 brands, 5 price bands. Combinations per category: 12 × 6 × 20 × 5 = 7,200. Across 40 categories, 288,000 URLs. Add three sort orders and it's 864,000. Nobody is redirecting that.

Now look at what earned clicks. On catalogues that size we typically find a couple of hundred facet URLs with any clicks at all in 16 months, and a few dozen with enough to matter. That's the set you rebuild as real Shopify collections. Say it comes to 55 URLs — that's a fortnight of merchandising work, not a quarter.

The middle bucket, impressions but no clicks, gets a path-level redirect to its parent collection and nothing more. You are not obliged to preserve every URL a platform once minted on your behalf.

Which facets earn a collection URL on Shopify

The test is whether the filtered state matches a search someone actually types. "Black running shoes" does. "Black running shoes size UK 9 under ₹4,000 by brand X" does not, and a URL for it will never rank however tidily you build it.

So single-dimension and occasionally two-dimension facets get promoted to automated collections with hand-written handles: /collections/black-running-shoes. Set the conditions on tag, vendor or product type, write 60 words of intro copy that isn't boilerplate, set a unique title and meta description, and let it be self-canonical. That last bit matters more than people think. Shopify's tag-filter URLs — /collections/running-shoes/black — look like a free shortcut, but most themes including Dawn point their canonical at the parent collection, so the tag view will not rank and shouldn't. If you want the URL to rank, build the collection.

One awkward case: automated collection conditions can only reference a limited set of fields, so a facet built on a metafield in BigCommerce may need the value copied into a tag during import. We usually script that in the product CSV rather than fix it after the fact, because retagging 8,000 products in the admin is nobody's idea of a good week.

Where Shopify's redirect tool helps, and where it quietly doesn't

Shopify's URL Redirects will accept a path with a query string, and it matches exactly. Parameter order matters. Case matters. ?Colour=Black&Size=9 and ?Size=9&Colour=Black are two rules, and if Google indexed both you need both. Test every single one after import rather than assuming — this is the part we get wrong on the first pass more often than any other step of a migration.

Because of that, the practical approach is layered:

  • Path-level redirects for every old category and product URL. Non-negotiable, and this is the bulk of the file.
  • Exact-match redirects with query strings for the short head of facet URLs that had clicks, pointing at the new collections you built for them.
  • Nothing at all for the long tail. The path redirect fires, the query string is dropped, the visitor lands on the parent collection. Which is roughly what they wanted.

Import in CSV batches. We keep files under about 10,000 rows because when an import partially fails, a smaller file is far easier to diagnose. And never point a dead facet URL at the homepage — Google treats that as a soft 404 and you get no credit for the redirect. Closest relevant collection, every time.

If a handful of facet URLs are genuinely commercially important and the exact-match rules won't behave, a Cloudflare Worker in front of the domain can handle the rewriting before the request reaches Shopify. Be honest about the trade-off: proxying a Shopify storefront through Cloudflare complicates certificate management and puts you outside what Shopify supports. We've done it. We don't recommend it for the sake of forty URLs.

Don't rebuild the same trap on Shopify

Shopify's own filtering generates parameters too: ?filter.v.option.colour=Black, ?filter.p.vendor=, ?filter.v.price.gte=, plus sort_by and page. Themes canonicalise those to the collection root, which is correct, but Googlebot still crawls them and on a large catalogue that eats crawl budget you'd rather spend on products.

Two things to do. Edit robots.txt.liquid to disallow the filter parameter prefixes you don't want crawled, and keep your sitemap free of anything with a question mark in it. Google retired the URL Parameters tool in 2022, so there's no longer a dashboard where you can declare a parameter irrelevant. It's robots.txt and canonicals now.

On filtering quality itself: Shopify's Search & Discovery covers a straightforward catalogue well enough, and if it does, use it and save the money. Once you're past a few thousand SKUs with multi-select filters, colour swatches and search that has to tolerate spelling mistakes, it stops being enough. That's the point at which a dedicated filter and search layer earns its keep — FilterPro is ours, and it's the app we reach for when a migrated catalogue needs faster faceting without the parameter sprawl.

Brand pages and nested categories

BigCommerce gives brands their own indexable URLs at /brands/name/. Shopify's equivalent is /collections/vendors?q=Name, which is thin, ugly and canonicalises badly. If those brand pages have rankings — and for multi-brand retailers they usually do, sometimes more than the categories — build them as real collections filtered on vendor and redirect each one. Skipping this is the single most common cause of a traffic drop after a BigCommerce to Shopify move in retail catalogues.

Nested categories are the other structural mismatch. BigCommerce happily serves /mens/footwear/running/trail/. Shopify collections are flat. You keep the depth in breadcrumbs, internal linking and menu structure, and the URL becomes /collections/mens-trail-running-shoes. Match the old page's intent in the handle, not its hierarchy.

The first three weeks after cutover

Submit the new sitemap on day one. Keep the old sitemap accessible for a fortnight if you can — it gives Googlebot a list of URLs to recrawl and discover the 301s faster.

Watch the Coverage report daily for the first ten days, specifically "Not found (404)" and "Page with redirect". Every 404 that appears with impressions attached is a mapping row you missed. Redirect chains show up here too, and they will exist: BigCommerce may already have been redirecting an older URL, so your new rule creates a two-hop chain. Flatten them to single hops.

Expect ranking wobble for two to four weeks on collection pages and less on products. If you're planning a migration in September for the Diwali run-up, that wobble lands in the worst possible fortnight. Move in the quiet months or wait until January.

If you're scoping this now, the useful first step is a facet inventory: export the 16-month Pages report from Search Console, filter to URLs containing a question mark, and count how many have more than five clicks. That number tells you whether this is two weeks of work or two months. We do the same triage as part of a migration audit, and the mechanics of the wider move — theme, apps, data, checkout, Razorpay and COD setup — are covered on our Shopify migration page.

Previous postNext post

Ready to scale your D2C brand profitably?

Let's build a growth engine that drives more traffic, more conversions and more profit.

Book a Growth Audit
📅 Free Audit💬 WhatsApp