Moving a store from WooCommerce to Shopify is mostly a data problem with a few traps that only show up after launch: product URLs that suddenly return 404 errors, variants that lost their SKUs, and customers who can't log in. This guide walks through the whole migration in the order I work through it, from the first audit to the day the domain switches.
It applies whether you're moving a full WooCommerce store or a plain WordPress site that's adding a shop on Shopify.
What moves, and where it lands
Start by mapping every type of data to its Shopify equivalent. Nothing should be imported until this map exists.
| WooCommerce / WordPress | Shopify | Notes |
|---|---|---|
| Simple and variable products | Products with options and variants | Shopify allows up to 2,048 variants per product |
| Product categories | Collections | Manual collections, or automated ones built on tags or product type |
| Product tags and attributes | Tags, options, and metafields | Attributes that aren't options usually become metafields |
| Customers | Customers | Addresses and order history move; passwords can't |
| Orders | Orders | Imported as history, without re-sending notifications |
| Blog posts | Blog articles | Shopify blog URLs live under /blogs/<blog-name>/ |
| Pages | Pages | Shopify page URLs live under /pages/ |
| Coupons | Discounts | Simple codes move; complex rules need rebuilding |
| Reviews | A review app | Exported as CSV and imported into the app |
| Plugins | Shopify apps or theme features | Each plugin needs a replacement decision |
Step 1: Audit the WooCommerce store
Before exporting anything, write down what the store actually contains and does:
- Counts: products, variations, categories, customers, orders, posts, and pages. These are what you'll compare against after the import.
- Plugins: every active plugin, what it does, and whether it's still needed. Subscriptions, bookings, memberships, and product add-ons need special planning, because their data doesn't fit standard product and order records.
- Custom fields: any extra product data stored by ACF or other plugins, such as specifications or size guides. These usually become Shopify metafields.
- URLs: a full list of current URLs. Your XML sitemap is the quickest source, combined with a crawl of the live site.
- Top pages: your highest-traffic and highest-ranking pages from Google Search Console. These are the URLs you can't afford to break.
Step 2: Choose how to move the data
There are three main routes, and many migrations combine them.
| Approach | Good for | Watch out for |
|---|---|---|
| Shopify's product CSV import | Small catalogs of simple products | Customers and orders need separate handling; the CSV format is unforgiving |
| A migration app (Matrixify, Cart2Cart, LitExtension, or a dedicated WooCommerce importer app) | Large catalogs, full order history, repeatable test runs | You still need to map edge cases, check the results, and set up redirects |
| A WordPress plugin that pushes data to Shopify (such as W2S) | Stores that prefer working from the WordPress side | Check what each plan includes, especially customers and orders |
| Custom scripts using the Shopify Admin API | Unusual data, custom fields, very large stores | Requires development time and careful rate limiting |
A migration app is usually the fastest way to move the bulk of the data. The work that decides whether the migration succeeds is everything around it: mapping, cleanup, theme, redirects, and verification.
Step 3: Clean the data first
A migration is the best chance you'll get to fix years of mess. Fixing it in WooCommerce before export is much easier than fixing it in Shopify afterwards.
- Delete or archive products you'll never sell again.
- Give every product and variation a unique SKU.
- Make product slugs consistent, since they become the Shopify product handles in your URLs.
- Merge duplicate categories, and decide which will become collections.
- Check that variation attributes are named consistently (for example "Size", not a mix of "Size" and "size").
Step 4: Run a test import into a development store
Never run the first import into your live store. Use a development or trial store, import everything, and then compare:
- Counts: products, variants, customers, and orders should match your audit.
- Spot checks: open 20 or so products of different types. Check variants, prices, stock, images, and descriptions.
- Customers: open a few customer records and confirm their orders are attached.
- Formatting: WooCommerce shortcodes in descriptions or blog posts won't work in Shopify. Search for
[in imported content to find leftovers.
Fix the mapping and repeat until the test import is clean.
Step 5: Rebuild the storefront and features
While the data is being finalized, build the shop itself:
- Theme: choose a Shopify theme and customize it, or build a custom theme from your design. WooCommerce themes can't be converted directly.
- Payments, shipping, and taxes: these are configured fresh in Shopify settings. Nothing about them imports.
- Plugin replacements: match each plugin from your audit to a Shopify app, a theme feature, or a custom app.
- Emails: update order confirmation and shipping templates with your branding.
Step 6: Map every old URL to a 301 redirect
This step protects your search rankings, and it's the one most often skipped.
Shopify uses fixed URL patterns, so almost every URL changes:
| WooCommerce URL | Shopify URL |
|---|---|
/product/blue-hoodie/ |
/products/blue-hoodie |
/product-category/hoodies/ |
/collections/hoodies |
/my-blog-post/ |
/blogs/news/my-blog-post |
/about-us/ |
/pages/about-us |
Shopify's URL redirects don't support wildcard patterns, so every old URL needs its own row. Build a two-column CSV, with the old path in the first column and the new path in the second, and import it from the URL redirects section of the Shopify admin. Generate the list from your URL inventory rather than by hand, and include old URLs that already redirect within WordPress.
Carry your SEO data across as well: product and page meta titles, meta descriptions, and image alt text.
Step 7: Plan customer accounts
Customer passwords can't be migrated to Shopify. They're stored as one-way hashes, and no platform can convert them. Your customers, their addresses, and their order history all move. They just need a new way to sign in:
- With Shopify's newer customer accounts, customers sign in with a one-time code sent to their email, so there's no password to reset.
- With classic customer accounts, you can send account invitations so customers set a new password.
Tell customers before launch: an email explaining the move and how to sign in prevents a wave of support requests.
Step 8: Launch
- Freeze changes on the WooCommerce store, or note the time of the final export.
- Import new orders and customers created since the test import.
- Re-check the counts one last time.
- Connect your domain to Shopify and check that the SSL certificate is active.
- Test a real order end to end: checkout, payment, confirmation email, and fulfilment.
- Keep the WooCommerce site offline but intact for a few weeks, in case anything needs to be checked.
After launch: the first 30 days
- Submit the new sitemap in Google Search Console and watch the coverage report for 404 errors.
- Add redirects for any old URLs that still return 404s.
- Compare organic traffic and conversions week by week against the same period before the move.
- Check that review apps, analytics, and marketing pixels are recording correctly.
Common mistakes to avoid
- Launching without redirects. Rankings built over years can drop within weeks.
- Skipping the test import. Mapping errors are far cheaper to fix before launch.
- Forgetting order history. Customers expect to see their past orders in their account.
- Moving the mess. Duplicate products and broken data cost more to fix after the move.
- Underestimating plugins. Subscriptions, bookings, and custom checkout logic need their own plan.
A WooCommerce to Shopify migration is very manageable when it's planned in this order. The data import itself is usually the easy part. Careful mapping, redirects, and verification are what make a migration invisible to your customers and to Google.