SEO Migration.

shopify migration seo

Shopify migration

Shopify forces a URL structure you do not control. Every migration to or from the platform is therefore also a URL structure change, whether the plan calls it one or not.

By Arsal Riaz, Technical SEO Consultant Published

Primary riskThe platform dictates URL paths, so every product and category URL changes even when nobody planned a restructure.

Definition
A Shopify migration — A Shopify migration moves an ecommerce site to or from the Shopify platform. Because Shopify enforces fixed URL prefixes for products, collections, pages and blogs, the move always involves a URL structure change. The additional risks are collection duplication, variant handling and the volume of redirects a large catalog requires.

Every Shopify migration is a URL migration

This is the fact that reframes the whole project. Shopify enforces path prefixes: products live under /products/, collections under /collections/, informational pages under /pages/, blog posts under /blogs/{blog}/.

You control the handle at the end. You do not control the prefix.

So if your current site serves products at /shop/blue-widget or /p/12345, every single one of those URLs changes. A Shopify migration is therefore also a URL structure change, and it needs the same complete redirect map — regardless of whether the project plan describes it that way.

Preserve handles where you can

The handle is the one lever available, and it is worth using deliberately.

If the old product URL was /shop/blue-widget, making the Shopify handle blue-widget gives you /products/blue-widget. The prefix still changed, so the redirect is still required, but the mapping becomes a clean pattern rule instead of a per-product decision.

Where the old site used numeric IDs — /p/12345 — there is no pattern available and every product needs an explicit mapping row. That is a data export and a join, not a rule, and it is worth knowing before the estimate is given rather than after.

The duplicate product URL pattern

Shopify serves each product at two paths: the bare /products/{handle} and the collection-scoped /collections/{collection}/products/{handle}. A product in five collections is reachable at six URLs.

Shopify canonicalizes the collection-scoped versions to the bare product URL by default, which is the correct behavior and generally works.

The caveat worth checking: theme customization sometimes breaks it. If a developer has modified the head template, the canonical may be missing or pointing at the wrong URL. It is one crawl and a filter to verify, and worth doing on any store with a customized theme.

Variants: a loss to forecast, not to discover

On many custom-built ecommerce sites, product variants have their own indexable URLs — a color, a size, a configuration, each ranking for its own long-tail queries.

Shopify handles variants as query parameters on a single product page. Those separate URLs stop existing.

This is a genuine consolidation loss. Several ranking URLs become one. Combined impressions for those variant queries will drop, and the drop is a consequence of the platform choice rather than a migration error.

Forecast it before launch and put it in front of whoever owns the traffic number. A predicted loss is a business decision. The same loss discovered in month two is a crisis.

Catalog size changes the approach

Under a few thousand SKUs, this is a spreadsheet exercise and Shopify’s own redirect manager handles it comfortably.

Above roughly ten thousand, in-platform redirect management becomes unwieldy and slow to work with. Move pattern-based bulk redirects to the CDN or edge, where they are faster, auditable in one place, and survive platform changes. Keep the in-platform manager for genuine one-off exceptions.

The general platform-migration method is on the replatform page, and if you are consolidating multiple storefronts, site consolidation covers the topic-conflict decisions that come with it.

How this migration type goes wrong

Collection-scoped product URLs indexed as duplicates

What you see The same product is reachable at /products/x and /collections/y/products/x. Both get crawled and compete.

What fixes it Ensure the canonical tag on collection-scoped URLs points at /products/{handle}. Shopify does this by default — verify it survived any theme customization.

Redirect volume exceeds what the platform handles well

What you see A large catalog produces tens of thousands of redirect rules, and the platform’s redirect manager becomes slow or unmanageable.

What fixes it Handle bulk redirects at the CDN or edge rather than in-platform, and reserve in-platform rules for genuine one-off exceptions.

Variants that used to have their own URLs

What you see Each product variant previously had an indexable URL that ranked. On Shopify, variants are query parameters on one product page.

What fixes it Map variant URLs to the parent product with the variant parameter, and accept that several ranking URLs consolidate into one. Forecast this before launch.

Discontinued products left to 404

What you see Seasonal or sold-out products return 404 in volume, and the pages that carried their links lose everything.

What fixes it Redirect discontinued products to the closest relevant collection, or return 410 where removal is deliberate. Make it a policy rather than a default.

The URL prefixes Shopify enforces for each content type, with the migration implication of each.
Content type Shopify path Can it be changed? Migration implication
Product /products/{handle}Handle only, not the prefixEvery product URL changes unless the old site used the same prefix
Collection /collections/{handle}Handle onlyCategory URLs all change; deep category trees flatten
Product within collection /collections/{c}/products/{handle}NoCreates duplicate product URLs — canonical handling is essential
Page /pages/{handle}Handle onlyTop-level informational pages gain a prefix they did not have
Blog post /blogs/{blog}/{handle}Handles onlyBlog URLs gain two path segments
Cart and checkout /cart, /checkoutNoShould not be indexable; confirm they are excluded
Shopify forced URL patterns

When this page applies

  • You are migrating an ecommerce site to Shopify from another platform.
  • You are migrating off Shopify to a custom or headless build.
  • You are consolidating several storefronts onto one Shopify instance.

When it does not

  • You are changing Shopify theme without changing handles or structure.
  • The site is not ecommerce.
  • You are moving between Shopify plans, which changes nothing about URLs.

Shopify migration checks

Catalog size drives everything here. A thousand products is a spreadsheet; fifty thousand is an engineering problem.

  1. 01

    Export the full catalog URL inventory

    Products, collections, pages, blog posts, filtered and paginated URLs. Include discontinued products that still have URLs and links.

    Output Complete catalog inventory

  2. 02

    Decide the handle strategy

    Handles are the only part of the URL you control. Preserving old slugs as handles keeps mapping simple, even where the prefix still changes.

    Output Handle mapping rules

  3. 03

    Plan for collection-scoped duplicates

    Confirm canonicals on /collections/{c}/products/{h} point at the bare product URL, and that theme customization has not broken that behavior.

    Output Canonical verification

  4. 04

    Map variants explicitly

    Where variants previously had their own indexable URLs, decide which product page they consolidate into and forecast the ranking loss.

    Output Variant consolidation map

  5. 05

    Move bulk redirects to the edge

    Large catalogs generate redirect volumes that in-platform managers handle poorly. Put pattern rules at the CDN and keep exceptions in-platform.

    Output Redirect implementation plan

  6. 06

    Set the faceted navigation policy

    Filtered and sorted collection URLs multiply quickly. Decide what is indexable before launch and enforce it with canonicals and robots rules.

    Output Faceting and parameter policy

  7. 07

    Confirm cart and account paths are not indexable

    Cart, checkout and account URLs should never appear in the index. Verify in production after cutover, not on staging.

    Output Directive check on transactional paths

Questions people ask before starting

Can I change Shopify URL structure to match my old site?

Not the prefixes. Products always sit under /products/, collections under /collections/, pages under /pages/. You control the handle after the prefix. That means a migration to Shopify is always a URL structure change, and the redirect map is not optional.

Why do my products have two URLs?

Shopify serves products both at /products/{handle} and at /collections/{collection}/products/{handle}. The collection-scoped version canonicalizes to the bare product URL by default. Verify that behavior survived any theme customization, because customization sometimes breaks it.

How do I handle discontinued products?

Redirect to the closest relevant collection where one exists, or return 410 Gone where the removal is permanent and deliberate. Leaving them to 404 in volume discards accumulated links. Set this as a standing policy so it is handled routinely rather than in batches.

Is Shopify bad for SEO?

No, but it is opinionated. The forced URL structure, the collection-scoped duplicate pattern and limited control over some technical output are constraints to plan around rather than defects. Sites migrate to and from Shopify successfully all the time; the ones that struggle skipped the mapping.

Planning this move?

Send the launch date and what is changing. We will tell you which parts of this page apply to your situation and which do not.

Reply
Typically within one business day.
Hours
Monday to Friday, 9am–6pm US Eastern.
First call
Scoping, not a pitch. No deck.