# WooCommerce to Shopify Migration: The SEO Playbook

Source: https://www.smartecomseo.com/blog/woocommerce-to-shopify-seo/  
Published: 2026-09-14  
Updated: 2026-09-29

The WooCommerce-specific parts of a Shopify migration: URL patterns and where they go, Yoast and Rank Math titles, products with too many attributes, the WordPress blog and a worked redirect map.

## Key takeaways

- Every WooCommerce URL changes on Shopify: /product/ becomes /products/, /product-category/ becomes /collections/, and root-level blog posts move under /blogs/.
- Root-level WordPress blog posts match no URL pattern, which makes them the most commonly forgotten redirects in a WooCommerce to Shopify migration.
- Take SEO titles from a crawl of the live site, not the database. Yoast and Rank Math titles are often templates like %%title%% %%sep%% %%sitename%%.
- Shopify allows three product options per product, so WooCommerce products with four or more variation attributes need restructuring before import, and that changes the URL map.
- Redirect WooCommerce product tags only if they had traffic or links. Most tag archives can safely return a 404.

WooCommerce stores usually move to Shopify for operational reasons: plugin updates that break checkout, hosting that slows down on sale days, security patches nobody owns. The SEO risk is the same every time. WordPress and WooCommerce give you almost total control over URLs, and Shopify gives you very little. Nearly every product, category and blog URL on the old site will change.

That's manageable. This playbook covers the WooCommerce-specific parts of a WooCommerce to Shopify migration: the URL patterns, what the import tools do and don't carry over, and where Yoast or Rank Math data hides. For the full phase-by-phase process (benchmarks, launch day, the first 90 days), use our [Shopify migration SEO checklist](/blog/shopify-migration-seo-checklist/) alongside it.

> **Scope:** Everything here assumes you keep the same domain. If the domain changes too, add Search Console's Change of Address tool to launch day and expect the settling period to take longer.

## Step 1: Find every URL WooCommerce ever published

A WooCommerce store publishes more URL types than most teams realize. WordPress creates archives, feeds and attachment pages on its own, and plugins add more. Start by listing what exists, then decide what deserves a redirect.

Pull old URLs from four places: a full crawl, Search Console's Pages report (the full 16 months), analytics landing pages, and your backlink tool's top linked pages. The crawl shows what the site links to today. The other three show what Google and other sites still remember.

> **Check your permalink history:** WooCommerce 10.5 changed how product URLs pick a category when a product sits in several categories and the store uses the "shop base with category" structure. It now uses the deepest category, and WooCommerce's canonical redirect handles the old URLs. For your migration, that means Search Console may hold older product URLs than the ones your crawl finds today. Map both.

## Step 2: Map WooCommerce URL patterns to Shopify

Here's how the standard WooCommerce and WordPress URL types translate. The bases shown are WooCommerce's defaults (`product`, `product-category`, `product-tag`). Check **Settings > Permalinks** on the old site for yours.

| WooCommerce / WordPress URL | Example | Shopify destination | Redirect? |
| --- | --- | --- | --- |
| Product (default base) | `/product/barrel-sauna-6-person/` | `/products/barrel-sauna-6-person` | Yes, one row per product |
| Product (shop base with category) | `/shop/outdoor-saunas/barrel-sauna-6-person/` | `/products/barrel-sauna-6-person` | Yes, every category version Google has seen |
| Product category | `/product-category/saunas/outdoor-saunas/` | `/collections/outdoor-saunas` | Yes |
| Product tag | `/product-tag/cedar/` | A real collection, like `/collections/cedar-saunas` | Only with traffic or links |
| Shop page | `/shop/` | `/collections/all` or your main collection | Yes |
| Blog post (Post name permalinks) | `/how-to-heat-an-outdoor-sauna/` | `/blogs/guides/how-to-heat-an-outdoor-sauna` | Yes, and easy to forget |
| Blog category | `/category/sauna-guides/` | `/blogs/guides` | Yes |
| Page | `/delivery-and-installation/` | `/pages/delivery-and-installation` | Yes |
| Pagination | `/product-category/saunas/page/2/` | None | No, let it 404 |
| Feeds | `/feed/`, `/product-category/saunas/feed/` | None | No |
| Add-to-cart links | `/?add-to-cart=4412` | None | No |
| Media attachment pages | `/barrel-sauna-6-person/cedar-interior/` | The product | Only if indexed with traffic |
| Uploaded images | `/wp-content/uploads/2024/03/barrel-sauna.jpg` | The new Shopify image URL | Only images with Image search clicks |

A few WooCommerce-specific notes:

- **Blog posts at the root are the silent loss.** With "Post name" permalinks, posts live at `/post-slug/` with no prefix, so no pattern catches them. Export the post list from WordPress (Tools > Export, or a plugin) and map each one.
- **Tags multiply.** WooCommerce stores often have hundreds of product tag archives, and most never had traffic. Redirect the few that did to a proper collection and let the rest 404. Our guide to [Shopify URL structure](/blog/shopify-url-structure/) explains how to replace tag archives with real collections.
- **Trailing slashes.** WordPress URLs usually end in a slash. Shopify's don't. Put the old URL in "Redirect from" exactly as it appears in Search Console, then test the version without the slash too. Add a second row if it 404s.

For products, a spreadsheet formula does most of the mapping:

```text
=REGEXREPLACE(A2, "^/product/([^/]+)/?$", "/products/$1")
```

That only works when the Shopify handle matches the WooCommerce slug. Import tools usually keep slugs, but check. If an import tool adds `-1` to a handle because of a collision, your formula-built rows point at a 404.

## Step 3: Know what the import tools won't do

Shopify's help center describes several routes off WooCommerce: Shopify's own Store Migration app, CSV imports, third-party migration apps from the Shopify App Store, or a partner. It also lists the limits. Read the current version when you plan, because the details change.

| Data | What usually moves | What to watch |
| --- | --- | --- |
| Products | Titles, descriptions, images, prices, variants | Shopify allows three product options, and the help center warns that options beyond three won't import. The variant limit is 2,048 per product. |
| Short descriptions | Often dropped or merged | WooCommerce has a long and a short description. Shopify has one description field. Decide how to merge them before import. |
| Categories | Recreated as collections | Nested categories become flat collections. The hierarchy survives only in menus and breadcrumbs. |
| SEO titles and meta descriptions | Depends on the tool | Yoast and Rank Math store them as post meta, and titles are often templates with variables. |
| Reviews | Not by default | The help center points to third-party review apps. Keep review dates and star ratings. |
| Blog posts | Not part of the basic product and customer import | Plan an app or a manual move, with images and internal links. |
| Customers | Yes, by CSV or app | Passwords don't transfer, so customers must activate new accounts. Not an SEO issue, but it hits repeat revenue. |

### Rebuild SEO titles from the rendered page

The Yoast and Rank Math template trap catches a lot of teams. Import the raw title field and you get `%%title%% %%sep%% %%sitename%%` in your Shopify SEO title, or nothing at all because the page used the default template.

The fix is simple. Take titles and meta descriptions from your crawl of the live WooCommerce site, which captures the rendered output, and put them in the SEO title and SEO description columns of the Shopify product CSV. Then improve them. A title written for WordPress four years ago rarely matches what page one rewards today.

### Products with more than three attributes

High-ticket WooCommerce stores often sell configurable products: a sauna in three sizes, two woods, with or without a porch, with a choice of heater. That's four variation attributes, and Shopify won't take it as-is.

Your options:

1. **Move one attribute to a product add-on or line-item property.** Heater choice is a good candidate. One URL, same as before.
2. **Split the product in two,** for example by wood type. You now have two URLs where you had one. Redirect the old URL to the version with the most traffic, and link the two products to each other.
3. **Use combined listings** if you're on Shopify Plus. See [moving to Shopify Plus](/blog/moving-to-shopify-plus-seo/).

Decide this before import, because it changes the URL map.

## Step 4: Protect the content Google ranked

Redirects move the signals. Content keeps the rankings. On WooCommerce migrations we check four things page by page.

- **Category descriptions.** WooCommerce category descriptions usually sit above the grid, and many stores add a second block of copy below it with a plugin or theme field. Shopify collections have one description field by default. Move both, and build a second content area into the theme if the lower block carried buying-guide copy.
- **Long product descriptions.** High-ticket product pages carry sizing tables, electrical requirements and installation notes. A new theme that puts the description behind a tab is fine. One that drops the table isn't.
- **Schema.** WooCommerce, Yoast and Rank Math output Product and BreadcrumbList structured data. Your Shopify theme may output less. Validate the new templates with Google's Rich Results Test before launch. Our [schema markup service](/shopify-seo-services/schema-markup/) covers what themes usually miss.
- **Internal links in blog posts.** Every old post links to `/product/...` and `/product-category/...` URLs. After import, those links point at redirects. Replace them with final Shopify URLs.

## A worked example: an outdoor sauna store

Here's what the map looks like for a typical high-ticket WooCommerce store. The numbers are illustrative, not a client's.

| Old URL | New URL | Clicks (12 mo) | Note |
| --- | --- | --- | --- |
| `/product-category/outdoor-saunas/` | `/collections/outdoor-saunas` | 9,800 | Carry over 600 words of intro copy |
| `/product/barrel-sauna-6-person/` | `/products/barrel-sauna-6-person` | 4,100 | Four attributes; heater moved to an add-on |
| `/shop/outdoor-saunas/barrel-sauna-6-person/` | `/products/barrel-sauna-6-person` | 310 | Older URL still in Search Console |
| `/product-tag/cedar/` | `/collections/cedar-saunas` | 1,250 | New collection with its own copy |
| `/product-tag/sale-2023/` | None (404) | 0 | No traffic, no links |
| `/how-to-heat-an-outdoor-sauna/` | `/blogs/guides/how-to-heat-an-outdoor-sauna` | 6,300 | Root-level post the pattern rules missed |
| `/wp-content/uploads/2024/03/barrel-sauna.jpg` | New image URL | 420 (Image search) | Redirect only images with clicks |

And the import file:

```csv
Redirect from,Redirect to
/product-category/outdoor-saunas/,/collections/outdoor-saunas
/product/barrel-sauna-6-person/,/products/barrel-sauna-6-person
/shop/outdoor-saunas/barrel-sauna-6-person/,/products/barrel-sauna-6-person
/product-tag/cedar/,/collections/cedar-saunas
/how-to-heat-an-outdoor-sauna/,/blogs/guides/how-to-heat-an-outdoor-sauna
/delivery-and-installation/,/pages/delivery-and-installation
```

Shopify redirects only fire when the old path would otherwise return a 404, and standard plans hold up to 100,000 redirects. Most WooCommerce stores fit comfortably. Our guide to [Shopify redirects at scale](/blog/shopify-redirects-at-scale/) covers testing and chains.

**Moving off WooCommerce?** We build the URL map from your crawl, Search Console and backlink data, fix the Yoast titles and test every redirect before launch. [See WooCommerce migration SEO](/shopify-migration-seo/woocommerce-to-shopify/)

## Step 5: Keep, move or retire the WordPress blog

Some brands want to keep WordPress for the blog. There are three ways to handle it, and we usually recommend the first.

1. **Move the blog to Shopify.** One domain, one sitemap, internal links from guides straight to collections. Shopify's blog editor is simpler than WordPress, which matters less than people expect once the templates are built.
2. **Keep WordPress on a subdomain** like `blog.example.com`. Easy to set up. In our experience, guides on a subdomain do less for your collection pages than the same guides on the main store.
3. **Serve WordPress in a subfolder through a reverse proxy.** Possible with an edge worker or CDN in front of Shopify, but it adds a moving part someone has to own. Rarely worth it for a store.

## Step 6: Clean up the duplicate URLs Shopify creates

WooCommerce had its own duplicate URL problems: `?orderby=price`, tag archives, feeds. Shopify has different ones. The main one is that products can be reached at `/collections/outdoor-saunas/products/barrel-sauna-6-person` as well as `/products/barrel-sauna-6-person`. The canonical tag points to the `/products/` version, but many themes link to the collection-aware URL from the grid. Fix the theme so internal links go to canonical URLs. More in our guide to [Shopify duplicate content](/blog/shopify-duplicate-content/).

## WooCommerce migration mistakes we see

- **Mapping products and categories, then forgetting the blog.** Root-level posts don't match a pattern, so they fall through.
- **Importing Yoast template variables as titles.** Search results show `%%title%%` until someone notices.
- **Letting the migration app rename handles.** Handles like `barrel-sauna-6-person-1` break a formula-built map. Check handles before you import redirects.
- **Shutting down WordPress before the crawl is saved.** Keep a full crawl export and a database backup. You'll need old titles and copy for months.
- **Renaming products on the way over.** Rename after launch, once rankings settle, with Shopify's "Create a URL redirect" box ticked.

## The short version

1. List every URL from the crawl, Search Console, analytics and backlinks, including older category paths.
2. Map products, categories, tags with traffic, blog posts and pages. Let pagination, feeds and cart links 404.
3. Fix option limits, merged descriptions and SEO titles before import.
4. Carry over every word of content that ranked, and rebuild the schema.
5. Import redirects, test them, and rewrite internal links to final URLs.

If you'd rather hand the whole thing to a team that does this every month, see our [Shopify migration SEO service](/shopify-migration-seo/).

## FAQs

### Will I lose SEO rankings moving from WooCommerce to Shopify?

Not if the migration is planned. Google says rankings can fluctuate while it recrawls a moved site, so a short dip is normal. Lasting losses come from missing redirects, dropped category and product copy, and SEO titles that did not survive the import. Map every URL with traffic, links or revenue, carry the content over in full and test the redirects before launch.

### Can I keep my WooCommerce URLs on Shopify?

Not the paths. Shopify uses fixed prefixes, so /product/ becomes /products/, /product-category/ becomes /collections/ and WordPress posts move under /blogs/. You can usually keep the final slug as the Shopify handle, which makes the redirect map simple: most product rows can be built with one spreadsheet formula. Blog posts at the root of the domain need mapping one by one.

### Does Shopify import Yoast or Rank Math SEO titles?

It depends on the tool, and even when it does, the stored value is often a template such as %%title%% %%sep%% %%sitename%% rather than the title Google saw. The reliable method is to crawl the live WooCommerce site, take the rendered titles and meta descriptions, and put them in the SEO title and SEO description columns of the Shopify product CSV before import.

### Should I redirect WooCommerce product tag pages?

Only the ones with traffic, rankings or backlinks. Most WooCommerce tag archives were never visited from search, and redirecting hundreds of them adds noise to your redirect list. For tags that did rank, build a real Shopify collection with its own copy, like Cedar Saunas, and redirect the tag URL there. Let the rest return a 404.

### How long does a WooCommerce to Shopify migration take for SEO?

Plan six to ten weeks of SEO work before launch for a typical store: benchmarking, building the URL map, fixing products with too many attributes, moving content and testing redirects. After launch, monitor daily for the first week and weekly for about three months. Larger catalogs and stores with a big WordPress blog need more time on the map.