Migrating to Shopify without losing your SEO.

Most of the traffic lost during a replatforming is not lost to Shopify. It is lost to URLs that changed without anyone writing down where they went. Here is the process we follow when we move a store from WooCommerce, Squarespace or PrestaShop, and the parts that are easy to get wrong.

The platform is not what costs you rankings

We get asked regularly whether Shopify ranks worse than WooCommerce. It does not. Search engines index pages, not admin panels. What actually happens during a bad migration is simpler and more boring: a few hundred URLs stop existing, nothing tells Google where they went, and the authority those pages had accumulated over years disappears with them.

That is the whole risk, and it is a project management problem before it is a technical one. If you can produce a complete list of your current URLs and a defensible destination for each one, a migration is mostly safe. If you cannot, no amount of post-launch fixing will fully recover it.

Start with a crawl, not with the design

Before anyone opens Figma, we crawl the existing site and export every URL that returns a 200. Then we pull the last twelve months from Search Console and Analytics, and we cross-reference. The crawl tells you what exists. Search Console tells you what matters.

That second list is the one that governs decisions. A store with 400 products often has 30 or 40 URLs doing most of the organic work, and they are rarely the pages the owner assumes. Product pages that rank for a long-tail query, an old blog post that picked up links, a category page that ranks for a generic term. Those are the URLs you protect at all costs.

We also export the current title tags, meta descriptions, H1s and image alt text at this stage. They are content, they were written by someone, and rebuilding them from scratch on the new site is wasted work.

Shopify decides part of your URL structure, and you cannot argue with it

This is the single biggest difference from WordPress, and the thing that surprises people coming from WooCommerce. Shopify enforces its own path prefixes: products live under /products/, categories under /collections/, static pages under /pages/, and articles under /blogs/<blog-handle>/<article-handle>.

So a WooCommerce store with /product/leather-tote/ and /product-category/bags/ cannot keep those paths. Neither can a PrestaShop store with numeric IDs in the URL, nor a Squarespace store with its own store-page structure. Every product and every category URL changes. That is not a mistake in the migration, it is the migration.

What you can control is the handle, the last segment. Keep it identical to the old slug wherever the old slug was sensible. It keeps the redirect map readable and it preserves whatever keyword relevance the URL carried.

Write the redirect map by hand for the pages that matter

A redirect map is a two-column file: old URL, new URL. For the bulk of the catalogue you can generate it programmatically from the product export, matching on slug. For the pages that showed up in the Search Console list, do it manually and check each one.

Three rules we do not break. Every redirect is a 301, not a 302. Every redirect points to the closest equivalent page, never to the homepage, because a mass redirect to the homepage is treated as a soft 404 and loses the value entirely. And no redirect points to a URL that is itself redirected, because chains dilute and slow everything down.

When a product genuinely no longer exists, redirect it to the collection it belonged to. When a whole category disappears, redirect it to its closest parent. When there is truly no equivalent, let it 410 rather than 301 it somewhere irrelevant.

Shopify accepts a bulk CSV import of redirects, so the map can be loaded in one operation on launch day. One catch worth knowing in advance: Shopify's redirect tool only applies to paths that do not resolve to an existing page on the store. If a path is live, a redirect on it will be ignored.

Migrate the metadata with the content

Product descriptions usually survive a migration because they are part of the product export. Title tags and meta descriptions frequently do not, because on WooCommerce they live in Yoast or RankMath fields that no standard export picks up.

Export them deliberately, then map them into Shopify's SEO fields during import. If you are rewriting them anyway, that is fine, but rewrite them on purpose rather than discovering three weeks after launch that 300 products are all using the theme's default title pattern.

The same applies to image alt text, which is a real ranking factor for image search on a fashion or product-led store and which almost always gets dropped in a CSV import.

Understand what Shopify handles and what your theme does not

Shopify generates and maintains sitemap.xml automatically, and it sets canonical tags on product pages so that /collections/bags/products/leather-tote canonicalises to /products/leather-tote. That solves a duplication problem WooCommerce sites often struggle with. You can also edit robots.txt now through robots.txt.liquid, which was not the case for years.

What is not handled for you is structured data. Most themes ship some Product markup, and its quality varies from decent to broken. Before launch, run the key page templates through a validator and check that price, availability, brand and review markup are actually present and correct. Rich results on product pages are worth more than most of the on-page work people spend time on.

Faceted navigation is the other area that needs a decision. Filtered collection URLs can generate a large number of thin, near-duplicate pages. Decide which filter combinations deserve to be indexable, and block the rest.

Launch day, and the six weeks after

We launch, then immediately verify a short list of things: the redirect file is live and a sample of ten old URLs actually resolves to the right destination, robots.txt is not blocking the store, the sitemap is submitted in Search Console, the analytics tags fire, and no template is carrying a noindex left over from staging. That last one has caught more sites than any other single mistake.

Then you wait, and you watch. Expect a dip. Rankings usually move around for two to four weeks while Google recrawls and re-evaluates the new URLs, and a temporary drop is not evidence that something is broken. What you monitor during that window is the coverage report and the 404 log, not the traffic graph. A rising 404 count means a gap in the redirect map, and that is fixable in an afternoon. Traffic that has not recovered after six to eight weeks, with a clean 404 log, means something structural to investigate.

We keep the old site's crawl export for at least three months, because the fastest way to diagnose a missing page is to check what used to be there.

What this actually costs

On a catalogue of a few hundred products, the SEO work of a migration is roughly one to two days: the crawl and export, the redirect map, the metadata mapping, the pre-launch checks. It is not the expensive part of the project. It is simply the part that is invisible when done well and very visible when skipped.

If you are considering a move to Shopify and want a second opinion on the URL structure before committing, we are at bonjour@dellamattia.com.

Still here?