SmartEcomSEO
Migrations

Magento to Shopify Migration Without Losing Rankings

How to move from Magento or Adobe Commerce to Shopify with your rankings intact: the url_rewrite table, redirect counts, category copy in CMS blocks, layered navigation and store views.

Illustration for “Magento to Shopify Migration Without Losing Rankings”
Key takeaways
  • Magento's url_rewrite table is the best source for a Magento to Shopify URL map: it holds every live URL and every historic 301, by product, category and store view.
  • Shopify allows 100,000 URL redirects, or 20,000,000 on Plus. A Magento store with category paths, several store views and years of URL key changes can come close to the lower limit.
  • Point Magento's old 301s straight at the final Shopify URL, not at the Magento URL they used to redirect to. That is how you avoid redirect chains.
  • Category copy stored in Magento CMS blocks is not in a normal category export, and losing it is one of the most common causes of collection ranking drops after a Magento move.
  • Adobe's lifecycle policy ended standard support for Adobe Commerce 2.4.6 on August 11, 2026, with extended support running to August 31, 2027.

Magento stores arrive at Shopify with the most complicated URL history of any platform we migrate. Years of category paths, .html suffixes, store views, layered navigation parameters and system URLs, plus a table of historic redirects the old team forgot existed. None of that is a reason to stay. It's a reason to plan a Magento to Shopify migration properly.

The timing pressure is real. Adobe's lifecycle policy puts the end of standard support for Adobe Commerce 2.4.6 at August 11, 2026, with extended support to August 31, 2027, and standard support for 2.4.7 ends May 31, 2027. Magento 1 lost official support back in June 2020. Many brands are choosing between an expensive upgrade and a replatform right now.

This guide covers what's specific to Magento and Adobe Commerce. For the general process, use the Shopify migration SEO checklist.

Magento URL patterns and where they go#

Magento builds URLs from the settings under Stores > Configuration > Catalog > Catalog > Search Engine Optimization: the product and category URL suffix (.html by default), whether product URLs include the category path, and whether a permanent redirect is created when a URL key changes. Look at these settings first. They tell you how many URL versions of each product exist.

Magento URL typeExampleShopify destination
Product, no category path/walnut-dining-table.html/products/walnut-dining-table
Product, with category path/furniture/dining/walnut-dining-table.html/products/walnut-dining-table
Category/furniture/dining.html/collections/dining-tables
Subcategory/furniture/dining/extendable.html/collections/extendable-dining-tables
System product URL/catalog/product/view/id/4412/products/walnut-dining-table
System category URL/catalog/category/view/id/38/collections/dining-tables
Store view prefix/de/furniture/dining.htmlThe German market URL for /collections/dining-tables
CMS page/delivery-information/pages/delivery-information
Blog (extension)/blog/choosing-a-dining-table.html/blogs/guides/choosing-a-dining-table
Layered navigation/furniture/dining.html?color=49&material=112Usually none (see below)
Sorting and pagination?product_list_order=price, ?p=2None
Product review list/review/product/list/id/4412/The product
Search results/catalogsearch/result/?q=walnutNone

When "Use Categories Path for Product URLs" is on, a product in three categories has three category-path URLs plus the short one. Multiply by store views and years of URL key changes and the list gets long fast.

Export the url_rewrite table#

Magento 2 keeps every URL it knows in the url_rewrite table: the requested path, the internal target, the redirect type, the entity type (product, category or CMS page), the entity ID and the store. That includes the historic 301s Magento created each time someone changed a URL key.

That makes it the best starting point for your map, better than any crawl. Ask your developer for an export:

texttext
SELECT request_path, target_path, redirect_type,
       entity_type, entity_id, store_id
FROM url_rewrite
WHERE entity_type IN ('product', 'category', 'cms-page')
ORDER BY entity_type, entity_id, store_id;

How to use it:

  1. Rows with redirect_type = 0 are live URLs. Each one maps to the Shopify URL for its entity_id.
  2. Rows with redirect_type = 301 are old URLs that already redirect. Point them straight at the final Shopify URL, not at the Magento URL they used to redirect to. That's how you avoid chains.
  3. Join entity_id to your product and category exports (SKU, URL key) so every row gets its Shopify handle automatically.
  4. Merge in Search Console, analytics and backlink URLs to catch parameter URLs and anything the table doesn't hold.

Count your redirects before you pick a plan#

Shopify allows up to 100,000 URL redirects per store, or 20,000,000 on Shopify Plus. Magento catalogs can get close to the first number.

An illustrative example: 4,000 products, category paths on, two categories per product on average, three store views.

URL sourceCount
Short product URLs (4,000 × 3 store views)12,000
Category-path product URLs (4,000 × 2 × 3)24,000
Category URLs (300 × 3)900
Historic 301s from URL key changes15,000 to 60,000
CMS, blog and system URLs with traffic2,000
Totalroughly 54,000 to 99,000

That's close to the ceiling on a standard plan. You have two choices. Prioritize: every live product, category and CMS URL, plus every old URL with traffic, links, rankings or revenue. Or move to Shopify Plus. Shopify also says a redirect applies across market subfolders automatically, so if your Shopify subfolders match your Magento store codes you may not need a row per language. Test that on your own Markets setup before you count on it.

Rebuild the catalog, not just the URLs#

Magento's product model doesn't map one-to-one onto Shopify's.

Magento conceptShopify equivalentSEO decision
Configurable productProduct with variantsUp to three options and 2,048 variants. Redirect the configurable URL.
Simple products visible on their ownSeparate products, or variants of one productIf simples had their own URLs and rankings (common for colors), decide per product. Merging means redirects; keeping means unique copy.
Bundle and grouped productsA bundles app, or a product linking its componentsMake sure the old bundle URL lands somewhere useful.
Attribute setsMetafieldsSpecs like dimensions and weight move to metafields and power filters.
Layered navigationSearch & Discovery filtersFilter URLs change format. Map only the valuable ones.
CMS blocks on category pagesCollection description or theme sectionsCopy them over by hand.
Customer groups and tier pricesB2B catalogsKeep wholesale-only pages out of the index.

Two of these cause most of the ranking losses we see.

CMS blocks on categories. Magento categories with the display mode "Static block and products" show content from a CMS block. That copy isn't in the category's description field, so migration tools often skip it. The category loses its 500 words of buying advice, and the new collection slides a few weeks later.

Layered navigation pages that ranked. Some Magento stores made filter pages indexable, often with an SEO extension that gave them clean paths like /sofas/leather/black.html. If one of those ranks for "black leather sofa", the right Shopify destination is a real collection with that name, not a filter URL. Build the collection, write the copy, redirect the old URL. Our guide to faceted navigation on Shopify covers which filter pages deserve to exist.

Flatten the category tree without flattening relevance#

Shopify collections are flat: /collections/extendable-dining-tables, never /collections/furniture/dining/extendable. The hierarchy survives in menus, breadcrumbs and internal links, not in the URL. That's fine for rankings, as long as the handle still says what the page is. Our guide to Shopify URL structure covers how we name handles.

Rules we use:

  • One collection per Magento category that had traffic, with the same or better copy.
  • Handles that describe the page on their own: extendable-dining-tables, not extendable.
  • Unique handles across the catalog. Magento happily serves /dining/tables.html and /office/tables.html. Shopify can't have two tables collections.
  • Breadcrumbs and parent collection links in the theme, so the old hierarchy still shows to shoppers and crawlers.

Store views, languages and hreflang#

Many Magento stores run a store view per language, with store codes in the URL and an extension for hreflang, since Magento doesn't output it out of the box. Shopify's version is Markets: one store, several markets, each on a subfolder or domain, with hreflang tags generated for you.

  • Map each store view to a market, and each store view URL to the matching Shopify market URL.
  • Import translations before launch, with Shopify's Translate & Adapt app or a translation app. A German subfolder full of English copy is a thin duplicate.
  • If you ran separate Magento websites on country domains, you're consolidating domains too. That's a bigger move, and our international SEO team plans it as its own project.

Getting the data out#

Shopify's Store Migration app connects directly to several platforms, but Magento isn't among the direct connections Shopify lists. Most Magento moves use one of three routes:

  1. CSV exports from Magento, reshaped into Shopify's product and customer CSV templates.
  2. Third-party migration apps from the Shopify App Store that connect to Magento.
  3. A developer script using the Shopify Admin API. For large catalogs with complex attributes, this is what we'd pick.

Whatever the route, import to a development store first and compare it with the old site page by page: titles, meta descriptions, descriptions, images with alt text, specs and reviews. Magento's meta title and meta description fields map to Shopify's SEO title and description. Check that they arrived, because tools handle them differently.

Images and media URLs#

Magento serves product images from paths like /media/catalog/product/w/a/walnut-dining-table.jpg, often with cache folders in between. For furniture, grills and other visual categories, Google Images can send real traffic to those files.

Check Search Console with the search type set to Image. If a handful of images carry clicks, redirect those files to the new Shopify image URLs, and keep descriptive file names and alt text when you upload the images to Shopify. Ignore the cache variants; there are too many of them and they rarely carry traffic on their own.

Timeline for a mid-size Magento store#

WhenWork
12 to 10 weeks before launchBenchmark rankings and revenue by landing page; export url_rewrite, Search Console and backlinks
10 to 7 weeks beforeBuild the URL map; count redirects; decide on Plus; plan collections and handles
7 to 4 weeks beforeTest import; content parity checks; schema, hreflang and speed on the new theme
4 to 1 weeks beforeRedirect CSV finished and tested on the dev store; internal links rewritten
Launch weekImport redirects, crawl the old URL list, submit sitemaps, check Merchant Center
1 to 12 weeks afterDaily, then weekly, checks against the benchmark

Stores with tens of thousands of SKUs need longer. Our large catalog SEO work usually starts during the migration rather than after it.

Magento migration mistakes we see#

  • Mapping from a crawl alone. The url_rewrite table and Search Console hold URLs no crawler will find.
  • Leaving historic 301s pointing at dead Magento paths. Every old redirect must end at a final Shopify URL in one hop.
  • Losing CMS block copy on categories. The most common cause of slow collection losses after a Magento move.
  • Trying to redirect every layered navigation URL. Shopify warns that redirects from URLs with query strings might not work as expected, and most filter URLs never had traffic anyway.
  • Ignoring Shopify's own duplicates. Collection-aware product URLs and market versions need canonical and internal link checks. See Shopify duplicate content.

Magento gave you control and a maintenance bill. Shopify gives you less control and a simpler operation. A good migration keeps the rankings you built on the first while you move to the second. For the redirect mechanics in detail, read Shopify redirects at scale, or talk to our Shopify migration SEO team.

People also ask

Questions people ask about this

Is migrating from Magento to Shopify bad for SEO?

Not in itself. Rankings drop after Magento migrations when redirects are incomplete, when category copy stored in CMS blocks gets left behind, or when historic redirects create chains. Built from the url_rewrite table, Search Console and backlink data, with content carried over page by page, a Magento to Shopify move usually shows a short dip while Google recrawls, then settles.

How do I redirect Magento .html URLs to Shopify?

Import a CSV into Shopify's URL redirects with the old path in Redirect from and the new Shopify path in Redirect to, for example /furniture/dining.html to /collections/dining-tables. Build the list from Magento's url_rewrite table so every category-path version and historic URL is included. Shopify only fires a redirect when the old path would otherwise return a 404, so test a sample after import.

Do I need Shopify Plus to migrate from Magento?

Only if your redirect count is near Shopify's standard limit of 100,000, or you need Plus-only features. Plus raises the limit to 20,000,000. Count redirects early: live product and category URLs across store views plus historic 301s and URLs with traffic. Many mid-size Magento stores fit under 100,000 once low-value parameter URLs are left out.

What happens to Magento layered navigation URLs on Shopify?

Most should simply stop existing. Parameter URLs such as ?color=49 rarely had search traffic, and Shopify warns that redirects from URLs with query strings might not work as expected. The exceptions are filter pages that ranked, often with clean URLs from an SEO extension. Rebuild those as real Shopify collections with their own copy and redirect the old URL there.

How do Magento store views work on Shopify?

Shopify replaces store views with Markets. Each language or country becomes a market on a subfolder or domain, and Shopify generates hreflang tags for them. Map every store view URL to its matching market URL, import translations before launch, and check the hreflang output. Separate Magento websites on country domains are a bigger consolidation and need their own plan.

Next step

Want this done on your store?

Magento and Adobe Commerce to Shopify migrations that protect rankings: .html URLs, category-path duplicates, layered navigation parameters, store views and years of old URL rewrites all mapped.

Talk to Zack directlyUsually replies within 24 hours
WeChatSearch this ID in WeChat
WhatsApp +86 186 8214 2136