Case study · WordPress · 2025

Shopify to WooCommerce Migration: $1,840/mo to $86/mo, 1,840 SKUs, Zero Lost SEO

Outdoor-gear retailer moved off Shopify Plus, kept every URL, dropped recurring platform fees by 95%.

Client
Northdrift
Duration
1.25 month
Team
4 people
Budget
$5-25k
Challenge

What was broken

Northdrift sold technical outdoor gear (climbing hardware, ski-touring kit, camping electronics). 1,840 SKUs, ~$3.2M/year in revenue, growing 30% YoY. They were on Shopify Plus paying $1,840/month base, plus another $400/mo on apps (subscriptions, B2B portal, advanced shipping, returns). About $27k/year in recurring platform cost for a store that needed five custom features and got them via five different apps.

Three specific pain points pushed the migration:

  • Product-page rigidity. Editorial wanted long-form gear stories — a 1,200-word write-up on each climbing harness with sizing-fit videos, expert quotes, comparison tables. Shopify product templates kept fighting them. Liquid edits required either a freelancer or sacrificed page-builder flexibility.
  • App lock-in. Their B2B portal app raised prices from $39 to $129/month. Migrating off it inside Shopify meant another app with a different data shape and a manual customer-data re-import.
  • Subscription product checkout cost. Recharge took 1% on top of every recurring order. On $400k/year subscription revenue, that was $4k/year for functionality they’d rather own.

The team had heard “Shopify to WooCommerce kills SEO”. They asked for a hard floor: no more than 5% organic traffic drop in the first 30 days post-cutover, or roll back.

Solution

What we built

WooCommerce + Bricks Builder + a tight set of plugins we trust on production: WooCommerce Subscriptions (official), WPML for the German edition, WooCommerce B2B by WebKul, FluentSMTP for transactional mail, Wordfence + 2FA for login security.

Hosting on Cloudways with a Vultr High-Frequency 4GB instance ($55/month), Bunny CDN ($5/month base + traffic), and Cloudflare in front for DNS, edge caching, and image polish. Total recurring infrastructure: $86/month.

The migration ran in five phases over 5 weeks:

  • Week 1 — Export and shape. Pulled Shopify products, customers, orders, and metafields via the Admin API. Wrote a Python ETL that mapped Shopify product variants into WooCommerce variations and preserved metafield content (gear-spec tables, fit notes) into ACF fields on each product.
  • Week 2 — Schema and templates. Built the WooCommerce product template in Bricks with the long-form editorial layout the team wanted. Built 4 page templates (collection, category, blog, landing). Tied ACF gear-spec fields into Product schema with proper offers and aggregateRating.
  • Week 3 — URL preservation. Every Shopify URL got a one-to-one 301 in a custom redirect plugin. /products/{handle}/product/{slug}, /collections/{handle}/product-category/{slug}, /blogs/news/{handle}/blog/{slug}. 2,400 redirects, all unit-tested.
  • Week 4 — Payments and subscriptions. Stripe direct (no Recharge middleman), Klarna, PayPal. Subscription customers re-tokenized via Stripe’s setup_intent flow — we ran an email campaign 7 days before cutover so existing subscribers re-authorized cards once.
  • Week 5 — Staging burn-in and cutover. Full staging environment, 500-order load test, support-team training, then a 3 AM Sunday DNS flip with the old Shopify store kept warm for 72 hours in case rollback was needed.
Results

What changed

Day 30 organic sessions: down 1.8% versus the same 30-day window pre-migration — well inside the 5% rollback threshold. Day 60: +11% versus pre-migration as new editorial content started ranking. The 301-redirect map preserved link equity; no manual reindexing dance.

Recurring platform cost: $2,240/mo to $86/mo — a 95% drop, $25,800/year saved on hosting and platform alone. Recharge fees gone. App subscriptions gone.

Editorial team published 14 long-form product stories in the first two months (versus 2 in the prior quarter on Shopify). The climbing harness category page now reads like a gear review, not a grid of identical thumbnails. Time on category page: 52 seconds to 2 minutes 14 seconds.

One real downside: WooCommerce admin is slower than Shopify admin. Order fulfillment per order is ~4 seconds slower than Shopify’s UI. For a store doing 60 orders/day that’s 4 minutes of operator time. The team accepts it.

Numbers that matter

Recurring platform cost
-95%
$2,240/mo → $86/mo
Organic sessions (day 30)
within threshold
baseline → -1.8% vs pre-migration
Organic sessions (day 60)
+11%
baseline → +11% vs pre-migration
Time on category page
+158%
52 sec → 2 min 14 sec
Editorial posts / 2 months
+600%
2 → 14
Subscription fee per order
-100%
1% (Recharge) → 0%

Tech stack

Built from scratch

  • Shopify-to-WooCommerce ETL pipeline
    Python pipeline reading Shopify Admin API, mapping product variants to Woo variations, preserving metafields as ACF, and migrating 14,000 customer records with hashed passwords. Idempotent — could re-run for delta migrations during testing.
  • 301 redirect engine with unit tests
    Custom plugin holding 2,400 Shopify→WooCommerce URL maps. Pytest-driven test suite asserting every old URL responds 301 to the right new URL before cutover. No SEO lost to fat-finger redirect typos.
  • Editorial product-page template
    Bricks Builder template treating the WooCommerce product page like a long-form article: hero, problem statement, gear spec, video, comparison table, related gear. ACF-backed so editors fill structured fields instead of fighting WYSIWYG.
  • Subscriber re-authorization flow
    One-time campaign that emailed all 1,200 active subscribers a Stripe setup_intent link 7 days before cutover. 94% re-authorized in 6 days. The other 6% got a personal phone call from customer support — 88% of those completed within 24 hours.

Third-party integrations

  • Stripe (direct, no Recharge) — Card payments + subscription billing. Saved 1% on every recurring order and removed a third-party data dependency.
  • WooCommerce B2B by WebKul — Wholesale customer accounts, tax-exempt invoicing, custom pricing tiers. Replaced a $129/mo Shopify app.
  • Klarna + PayPal — Buy-now-pay-later and PayPal Express. ~22% of cart conversions choose one of these.
  • Cloudflare + Bunny CDN — Edge image delivery and global static caching. Product-image LCP dropped from 3.1s to 0.9s on mobile.

Shopify was easier in the first six months and worse in every month after. We’re saving close to $26k a year, our product pages actually look like our brand, and our category pages read like the gear reviews customers were finding on third-party sites. The Sunday cutover was scary. Day 60 it stopped being scary.

Markus L. , Founder, Northdrift

Similar cases

Considering a Shopify to WooCommerce migration?

Send us a brief — we'll respond within 24 hours.

Contact Form Demo