How to Migrate from WooCommerce to Shopify Without Killing Your SEO
A field-tested playbook for moving a WooCommerce store to Shopify — data export, URL redirects, theme rebuild, and the 90-day post-migration plan.
The most common reason I get a migration brief is the same one every time: the WooCommerce store is slow, the merchant has lost confidence in their developer, and a checkout problem just cost them a weekend of sales. By the time we talk, they have already decided to move. The conversation is about how, not if.
This post is the migration playbook I use. It is biased toward stores with €500k–€5M annual revenue and a few thousand SKUs — large enough that data integrity matters, small enough that a 6-month migration project is not justifiable. Two weeks of focused work, one cutover weekend, then 90 days of monitoring.
What you are actually migrating
Before scoping anything, write down what exists. WooCommerce stores accrete plugins like nothing else, and “WooCommerce” usually means six pieces of software glued together:
| Component | Typical WooCommerce | Shopify equivalent |
|---|---|---|
| Catalog | WooCommerce core + WPML / Polylang | Shopify Markets + native locales |
| Checkout | WooCommerce checkout + Stripe/PayPal plugin | Shopify Checkout (managed) |
| Mailchimp WooCommerce, AutomateWoo | Shopify Email, Klaviyo | |
| Subscriptions | WooCommerce Subscriptions | Recharge, Shopify Subscriptions |
| Inventory sync | ERP plugin (e.g., WooCommerce <> Pohoda) | Custom Shopify app or middleware |
| Custom fields | ACF Pro + Meta Box | Shopify metafields |
| Page builder | Elementor / WPBakery | Shopify sections + custom blocks |
The first four are trivial. The last three are where migrations slip. Allocate time accordingly.
Phase 1 — Pre-migration audit (1 day)
1.1 SEO inventory
Run Screaming Frog against the WooCommerce site. Export:
- Every URL and its HTTP status
- Every URL’s organic traffic from the last 12 months (cross-reference with GA4 + Google Search Console)
- Top 50 URLs by traffic — these get the most careful redirect handling
- Top 100 URLs by external backlinks (use Ahrefs or
gsc:linkedfromsite:*.* refdomainqueries)
Rule of thumb: the top 50 URLs typically account for 70–85% of organic traffic. Get those redirects perfect; everything else can be a pattern-based 301.
1.2 Data inventory
Run from the WooCommerce admin:
- Products — export to CSV via WooCommerce → Products → Export. Include variations, attributes, images.
- Customers — Customers → Export. Note that GDPR forbids transferring passwords; customers will need to set new ones.
- Orders — last 24 months minimum. Required for re-displaying past purchases and for any subscription / RMA workflows.
- Reviews — usually Yotpo, Judge.me, or WooCommerce Reviews. Export native format.
- Blog posts — via WordPress export (WXR XML). Yes, you migrate the blog.
1.3 Tracking inventory
List every tag and pixel: GA4, Meta Pixel, TikTok Pixel, Pinterest Tag, Google Ads conversion, Klaviyo, Hotjar, anything else. Note where each one fires (page-view vs. add-to-cart vs. purchase) and what its Measurement ID / Pixel ID is. You will replicate this on Shopify, ideally through Google Tag Manager.
Phase 2 — Shopify build (5–8 days)
2.1 Theme
Two options:
- Start from Shopify Dawn. Modern, fast (98+ on PageSpeed Insights mobile out of the box), free, and maintained by Shopify. Customize sections to match the visual identity. Best for stores that want a long-term platform.
- Buy a premium theme (Impact, Symmetry, Showcase from Out of the Sandbox; Broadcast from We Are Underground). Faster to launch, slightly slower performance, harder to keep up with platform updates.
Pick Dawn unless the merchant has a non-negotiable design requirement that needs a premium theme’s specific section types.
Either way, do not migrate the WooCommerce design pixel-perfect. Most WooCommerce sites accrete UX debt over years. The migration is a free chance to fix the worst of it. Mock up 3–5 key templates (home, collection, product, cart, checkout) in Figma first; get sign-off; then build.
2.2 Products
Shopify’s bulk CSV importer handles most things but has rough edges:
- Image URLs — the importer accepts external URLs, but they must be publicly accessible during the import. If your WooCommerce site is behind staging credentials, temporarily expose
/wp-content/uploads/. - Variants — Shopify caps at 100 variants per product. WooCommerce has no such cap. For products that exceed it (often configurable industrial / B2B items), you either split into multiple products or use a third-party app like Infinite Options — discuss with the client.
- Metafields — every custom field from ACF maps to a Shopify metafield. Define the namespace + key + type up front, then map via Matrixify which handles bulk metafield import.
2.3 Redirects
This is the single biggest SEO risk in any migration. Build the redirect map before cutover; do not hope to do it afterward.
Map structure should be a CSV with two columns: from_path, to_path. Example for a WooCommerce → Shopify product URL change:
| from_path | to_path |
|---|---|
/product/blue-widget/ | /products/blue-widget |
/product-category/widgets/ | /collections/widgets |
/product-tag/sale/ | /collections/sale |
/?p=1234 | /products/blue-widget |
/blog/how-to-clean-widgets/ | /blogs/news/how-to-clean-widgets |
Shopify’s URL Redirects (Admin → Online Store → Navigation → URL Redirects) handles all of these. Upload via Matrixify in bulk. For very large stores (>5000 redirects) the storefront ones get slow; consider handling some at the Cloudflare layer instead.
Test top 50 redirects by hand before cutover. The cost of a broken redirect on a high-traffic URL is days of lost ranking. Automate the test with a small script that fetches each
from_pathand checks the final URL.
2.4 Email auth and DNS
Plan DNS changes a week before cutover:
- A / CNAME for the apex domain → Shopify nameservers (or Shopify A record
23.227.38.65if keeping current DNS provider). - SPF / DKIM — Shopify sends transactional email from
[email protected]by default. To send from[email protected], add the Shopify DKIM records and update SPF to includeinclude:shops.shopify.com. - Cloudflare proxy — if you use Cloudflare in front of WooCommerce, you cannot proxy Shopify the same way (Shopify requires the apex to point to their IP). Switch to DNS-only mode for the storefront subdomain on cutover.
2.5 Apps
Install the minimum viable app set, not the WooCommerce-plugin-equivalent for everything. Common essentials:
| Need | App |
|---|---|
| Reviews | Judge.me (cheap, fast) or Yotpo (if already used) |
| Klaviyo | |
| Currency / market | Shopify Markets native |
| Subscriptions | Recharge or Shopify Subscriptions |
| Local pickup / shipping rules | Shopify Shipping (native) |
| ERP sync | Custom app or middleware (Make.com, n8n) |
| Bundles / discounts | Shopify Functions (no third-party needed in most cases) |
Avoid: page builders, custom “speed booster” apps (oxymoron), redundant analytics apps.
Phase 3 — Cutover (one weekend)
Cutover Friday evening, monitor Saturday + Sunday, full attention Monday morning.
Cutover sequence
- Friday 18:00 — Put WooCommerce into maintenance mode. No new orders.
- Friday 18:30 — Final delta import: any orders/customers since the previous import. Run reconciliation queries — Shopify customer count must match WooCommerce customer count.
- Friday 19:00 — Lower DNS TTL to 300 seconds on the apex (do this 48h prior, actually). Update A record to Shopify.
- Friday 19:30 — Activate the new Shopify theme. Disable storefront password protection.
- Friday 20:00 — Smoke test: checkout end-to-end (real €1 order), email confirmation arrives, redirect map for top 50 URLs returns 301s correctly, Google Search Console new property verified, sitemap submitted.
- Saturday — Monitor GA4 real-time, watch error logs (Shopify Admin → Settings → Notifications for failed webhooks; Sentry for any custom apps).
- Sunday — Restore DNS TTL to normal (3600s).
- Monday morning — Push the redirect map upload to Bing Webmaster + IndexNow. Submit fresh sitemap to GSC. Schedule a re-crawl request for the top 10 URLs.
What WILL break
In every migration, regardless of preparation:
- At least one obscure product variant will have the wrong price. Spot-check, fix, apologize if a customer noticed.
- Email transactional template rendering will be slightly off (logo too big, button color slightly wrong). Tune in Shopify Email Editor.
- One redirect will 404. Watch GSC Coverage report daily for 14 days. Fix as they appear.
- One ERP sync will fail because of a field mismatch (e.g., WooCommerce sent
sku, Shopify sendsvariant.sku). Add the mapping; backfill manually.
Plan for these. Reserve 4 hours of Monday for unplanned issues.
Phase 4 — Post-migration (90 days)
Week 1 — daily checks
- GSC Coverage — any new “Submitted URL not found (404)” entries are redirect misses. Fix.
- GA4 vs. Shopify Admin — sessions should match within 10%. Larger divergence means a tracking misfire.
- Checkout completion rate — should be ≥ WooCommerce baseline within 2–3 days. If lower, debug.
Week 2–4 — settle period
- Re-submit sitemap in GSC.
- Run IndexNow for Bing.
- Check organic rankings for top 20 queries. Some will drop temporarily (Google’s algorithm needs to recrawl and reassess) — usually recover within 4–6 weeks if redirects are correct.
- Email automations — verify abandoned-cart, post-purchase, browse-abandonment all fire from Klaviyo.
Month 2–3 — optimize
- Performance — apply the Shopify Core Web Vitals checklist.
- CRO — A/B test things that the WooCommerce store could not (Shopify Checkout extensions, one-page checkout, Shop Pay).
- Internationalization — if the merchant sells across the EU, enable Shopify Markets per-country pricing, currency, and translated content.
Migration anti-patterns to avoid
- “Just move the products first, do the rest later.” Half-migrated stores leak orders and trust. Do all of it or none of it.
- “Skip the redirects, the URLs are similar.” They are not similar enough. Every WooCommerce → Shopify URL change is a 301 you must own.
- “We will customize Liquid heavily.” Resist. The Shopify theme is updated by the store; the heavier the customization, the harder upgrades are. Lean on sections + blocks + metafields.
- “We will keep the WooCommerce site running in parallel for a month.” Two checkout flows = inventory drift, customer confusion, double-billed support time.
The 80/20
If you only have time for the four most important things:
- A complete redirect map, tested end-to-end before cutover.
- Clean product data with consistent metafields, image dimensions, and inventory levels.
- One unified analytics stack (GTM + GA4 + Klaviyo, nothing else).
- A starter theme based on Dawn, not a heavy premium theme.
Everything else is polish. These four are non-negotiable.
I run WooCommerce → Shopify migrations for EU merchants. Typical timeline: 2 weeks build, 1 weekend cutover, 90 days of monitoring. Get in touch if your migration is approaching.