Migrating from WooCommerce to Shopify without losing the SEO you already had
By Aarón Briceño, ecommerce consultant and Shopify specialist.

Shopify migrations rarely fail where people fear they will. Products transfer fine, images transfer fine, customers transfer fine: there are tools for all of that and they work. What breaks, and it breaks almost every time, is the URLs.
It is a silent failure. The new store looks better than the old one, everything works when you click it, nobody notices anything odd. And three weeks later organic traffic has halved, because the hundred pages Google had indexed now return 404 and the new ones start from zero, without the authority they had spent years accumulating.
It is entirely avoidable, but the work happens before the migration, not after.
Why WooCommerce and Shopify cannot share URLs
This is nobody’s decision: Shopify imposes its route structure and it cannot be changed. The /products/, /collections/ and /pages/ prefixes are fixed.
| On WooCommerce | On Shopify |
|---|---|
/product/linen-shirt/ | /products/linen-shirt |
/product-category/shirts/ | /collections/shirts |
/shop/ | /collections/all |
/about-us/ | /pages/about-us |
/blog/post-title/ | /blogs/news/post-title |
Every row in that table is a redirect you have to write. If you do not write it, that is a page that dies.
And watch the trailing slash: WooCommerce on WordPress normally serves URLs with a trailing slash, and Shopify without. If you map /product/linen-shirt and forget the slash, the redirect never catches the URL Google actually has indexed, which is /product/linen-shirt/. It is the silliest mistake in the whole migration and the most common.
The inventory, before touching anything
This happens while the old store is still standing. You need two lists:
1. Everything Google has indexed. In Search Console, Pages report → “View data about indexed pages”, and export. This is the list that matters: not what you think you have, but what Google knows about.
2. Everything that gets traffic or links. In the Performance report, export pages for the last twelve months. And in the Links report, the pages with external links.
The intersection gives you the priority. A URL with external links pointing at it is the one you cannot afford to lose: that authority took years to arrive and does not come back by writing new content.
With both lists, build a sheet with three columns: old URL, new URL, and what to do when there is no equivalent.
The URLs with no equivalent
This is the part that takes judgement, and where a spreadsheet will not decide for you:
- Discontinued product → to the collection it belonged to. Never to the homepage.
- Category that disappears → to the closest collection.
- Page that no longer exists → to the page that answers the same question.
- Content with no equivalent at all → leave it as a 404.
That last one is deliberate. Redirecting everything spare to the homepage is a common reflex and it is worse than the 404: Google treats it as a soft 404, no authority passes, and on top of that you create a mess of pages redirecting somewhere that answers nobody’s question. An honest 404 is a correct answer.
The redirects, in Shopify
Shopify has its own redirect manager, under Online Store → Navigation → URL Redirects, and it takes a bulk CSV upload with two columns:
Redirect from,Redirect to
/product/linen-shirt/,/products/linen-shirt
/product-category/shirts/,/collections/shirts
/about-us/,/pages/about-us
Three rules that save grief:
- One hop only.
A → B → Cdilutes and slows things down. If you change a new URL later, update the old redirect so it points straight at the final destination. - Check both forms of every URL, with and without the trailing slash, if the old store answered on both.
- They are 301s, permanent. That is what tells Google to pass the authority along. A 302 tells it “this is temporary, stick with the old one”.
What to check on switchover day
With the new store live:
- The canonicals. That every page declares itself and not the old store. A canonical pointing at the old domain is the mistake I have seen most often after a migration onto a new domain.
robots.txtandnoindextags. Almost every staging environment blocks crawling. If that configuration travels to production, the store disappears from Google entirely. Check it on day one.- The sitemap. That it lists the new URLs and only the new ones. And that the URLs it lists answer 200, not a redirect: a sitemap full of redirects wastes crawl budget.
- Submit it to Search Console as soon as it is ready.
The four weeks after
A migration done well also loses traffic in the first weeks. That is normal: Google has to crawl every redirect and move the signals across, and that takes time. What you watch is not the dip, but whether it recovers.
In the Search Console Pages report:
- “Not found (404)” rising → a redirect is missing. That is the most urgent alarm.
- “Page with redirect” growing → that is expected, the sign it is working.
- “Discovered – currently not indexed” growing → Google knows the new URLs but is not crawling them. Check that internal links actually point at them.
And always compare against the same period last year, not against last month.
When the migration comes with a custom theme or integrations that had to be rebuilt, that work is on custom Shopify development. And if you are still deciding whether to migrate — or whether the store’s problem was ever the platform — that gets answered first with an audit.