Migrating from WooCommerce to Shopify in under 10 days: the real playbook
Step-by-step: how to move from WooCommerce to Shopify without losing orders, SEO, or customer trust. The exact playbook we use on every migration.
Ashraful
Shopify Select Partner

WooCommerce stores migrate to Shopify for the same reasons every year: hosting headaches, security patches, plugin conflicts, payment-gateway tax, and the slow realization that "self-hosted = cheaper" was never actually true.
The migration itself is what scares people. Everyone has a horror story — lost orders, broken redirects, search rankings tanked for 6 months. We've done 30+ of these and the bad outcomes are 100% preventable with a real plan.
Here's the actual 10-day playbook.
The phases
| Day | Phase | What ships |
|---|---|---|
| 1 | Discovery + inventory | Migration spec doc, gap list |
| 2–3 | Data extraction + transformation | Clean CSV bundle |
| 4–5 | Shopify setup + import | Live data on dev store |
| 6–7 | Theme + checkout configuration | Visually complete dev store |
| 8 | Redirect map + analytics | Redirect CSV, GA4 reconfigured |
| 9 | Soft launch (staging) | Final QA pass |
| 10 | Cutover (DNS) | Live on Shopify |
Day 1: Discovery and inventory
The single most expensive mistake is starting the migration without a written inventory of what exists.
Make a doc with these sections:
- Products — how many SKUs, variants, custom fields, downloadable products, subscriptions?
- Customers — how many, GDPR-compliant export available?
- Orders — how many to migrate? (Hint: usually only last 12 months matters)
- Pages — every CMS page, blog post, landing page URL
- Custom code — checkout customizations, custom plugins, custom checkout fields
- Integrations — email (Klaviyo / Mailchimp), reviews (Judge.me / Yotpo), shipping, ERP, analytics, ads
- Payment gateway — Stripe, PayPal, both?
- SEO state — current rank for top 50 queries, current sitemap
Without this doc, you'll discover surprises on day 8 that push launch by 2 weeks.
Day 2–3: Data extraction + transformation
WooCommerce stores data as WordPress post-types with serialized PHP arrays in postmeta. It's a mess.
Three tools we use:
- WP All Export for products, orders, customers — gives you CSV with the right columns
- Direct SQL for things All Export struggles with (custom fields, ACF data, custom order line items)
- Custom Node scripts to transform Woo's data shape into Shopify's import shape
The transformations that always need custom code:
- Variants — Woo stores them as child products; Shopify wants them on the parent
- Categories → Collections — Woo's nested hierarchies don't map 1:1 to Shopify
- Custom fields — ACF data goes into Shopify metafields; you have to define the metafield definitions first
- Tax classes — Woo lets you mix shipping classes per item in ways Shopify can't replicate exactly
Pro tip: dedupe customer emails before import. Woo allows multiple customer rows with the same email; Shopify doesn't.
Day 4–5: Setup + import
In Shopify:
- Create the store, choose plan (Plus only if Plus features are required)
- Define metafield definitions (these are easier to create before the import)
- Import customers first, then products, then orders
- Use Matrixify or a custom CSV importer — Shopify's built-in CSV import truncates long descriptions
Validate after each import:
# Quick sanity checks:
# 1. Product count matches export
# 2. Random sample of 10 products — open and verify all images, variants, descriptions
# 3. Customer count matches; one random customer's order history is intact
# 4. Total order count matches; one paid order's line items match Woo's
Catch problems here, not on day 10.
Day 6–7: Theme + checkout
If the merchant wants a same-look-as-before migration, we build a custom theme that mirrors the old WooCommerce design. This is usually a mistake — the migration is the cheapest moment to redesign.
If you want a redesign instead, this is where you'd plug in Verso or commission a custom theme build.
Shopify checkout-specific config to verify:
- Express payments (Apple Pay, Shop Pay, Google Pay) — enable all
- Address autocomplete — on
- Email vs. phone at checkout — match what customers expect
- Custom checkout fields → Functions (Shopify Plus) or scripts
- Discount stacking rules
Day 8: Redirects and analytics
This is the single most important phase for SEO. Mess this up and you'll lose 6 months of rankings.
Build a redirect CSV from your old WooCommerce URL structure to Shopify's structure. The patterns differ:
| WooCommerce | Shopify |
|---|---|
/product/awesome-tee/ | /products/awesome-tee |
/product-category/men/ | /collections/men |
/blog/post-slug/ | /blogs/news/post-slug |
/page-name/ | /pages/page-name |
Import into Shopify → Navigation → URL Redirects. Test 20 URLs manually before launch.
Analytics:
- Set up GA4 with new view; tag every Shopify event (purchase, add_to_cart, etc.)
- Reconnect Facebook Pixel / Meta CAPI
- Reconnect Google Ads conversion tracking — this will break for a week if you don't reconfigure conversion IDs
Day 9: Soft launch (staging)
Run the dev store under a password. Have your team place real test orders end-to-end:
- One paid order (use Bogus Gateway or live with $0.50 product)
- One refund
- One discount-code order
- One shipping-method test order
- One email signup
- One abandoned-cart recovery email check
If all six work clean, you're ready for cutover.
Day 10: Cutover
The actual DNS swap takes 5 minutes; the work is everything around it.
- Final inventory sync (orders placed on Woo in the last 24h)
- Update DNS apex A record → Shopify's IP
- Update
wwwCNAME →shops.myshopify.com - Wait ~10 min for propagation
- Validate: store loads on the canonical domain, checkout completes a real order
- Switch off WooCommerce orders (set it to maintenance mode for 48h, then archive)
We do every cutover during the merchant's slowest 2-hour window. For most stores that's Tuesday 3am UTC. Sales tank during that window anyway; if anything breaks, we have time to fix before the morning rush.
What we don't migrate (on purpose)
Three things we deliberately leave behind:
- Old reviews if the original review widget data is malformed. Cleaner to start fresh with a real review-ask flow.
- Stale customers — anyone who hasn't bought in 24 months. Importing them just bloats your Shopify customer count (and Plus bill).
- Cancelled / refunded historical orders — only migrate orders that actually represent revenue.
When 10 days isn't enough
Three scenarios where the timeline stretches:
- Subscriptions — Woo Subscriptions → Shopify Subscriptions API takes another 3–5 days
- B2B / wholesale — custom catalogs, customer-specific pricing tiers
- Multi-currency — if you're going Shopify Markets and need country-specific stores
If any of these apply, we'd quote 14–20 days instead.
We do this end-to-end as a fixed-quote service starting at $1,999. Send us your store and we'll quote yours.
About the author
Ashraful
Shopify Select Partner, Top Rated Plus on Upwork. 700+ Shopify projects shipped over 7+ years — themes, apps, migrations, speed, Hydrogen. Solo shop, no agency middlemen.
Read the full storyWorking on a Shopify project?
That's what I do every day. Pick whichever feels lower-friction.
More from the blog
Keep reading

The Shopify Migration Redirect Map I Use on Every Project to Save Your SEO
I'm sharing the exact Shopify 301 redirect map I use for migrations, detailing specific patterns for products, collections, and blogs. Learn the 5 common mistakes that cost merchants 30% of their organic traffic and how to avoid them.
Read
My 7-Step Plan: WooCommerce to Shopify Migration with Zero SEO Rank Loss
I'm sharing the exact 7-step redirect map I use for every WooCommerce to Shopify migration, ensuring no SEO rank loss. It covers URL patterns, 301 vs. 302, and critical meta inheritance.
Read
Metaobjects vs. Metafields in Shopify: The Decision Tree I Use to Avoid Costly Refactoring
Confused about Shopify Metafields vs. Metaobjects? I'll show you my practical decision tree, with real-world examples, to pick the right tool for structured data and save yourself costly refactoring later.
Read