← All articles
WooCommerce to Shopify14 min read

Migrate from WooCommerce to Shopify: A Step-by-Step Guide

Migrate from WooCommerce to Shopify with a step-by-step plan: data mapping, order import, redirects, plugin swaps and pre-launch testing.

By UVT Team

Most advice to Migrate from WooCommerce to Shopify starts with the wrong promise. Export a CSV, pick a theme, switch the domain, and you're done in a weekend. That advice works until support opens an old order that points to no customer, finance finds a refund that never arrived, or a subscription renewal quietly stops.

The transfer isn't the hard part. Products move. Customers move. What breaks is the hidden business logic underneath them, the pricing rules, tax treatment, shipping conditions, custom fields, and plugin behavior your team stopped noticing because WooCommerce handled it every day.

Treat the move as three jobs, not one. First, decide which behaviors survive. Second, move data in an order that preserves relationships between products, customers, and orders. Third, prove that search traffic, checkout, and money still reconcile after launch. If you can't prove that last part, you haven't migrated. You've copied a storefront.

Table of Contents

<a id="why-woocommerce-stores-move-to-shopify-and-where-projects-stall"></a>

Why WooCommerce Stores Move to Shopify and Where Projects Stall

The data is the easy part. Most projects that Migrate from WooCommerce to Shopify stall on operations, not file formats. The platforms started from opposite models, as Shopify launched in 2006 as a hosted platform while WooCommerce followed in September 2011 as a free WordPress plugin. Shopify controls hosting, infrastructure, and updates. WooCommerce leaves hosting, plugins, themes, and compatibility with you.

A hand-drawn illustration showing a migration process from a WooCommerce wooden crate to a Shopify shopping bag.

That trade looks attractive once plugin conflicts, security patches, and slow releases consume a developer's week. In one case, we migrated a B2B and DTC industrial client from WooCommerce to Shopify, increasing checkout completion by 27% and making releases 3 times faster. The gain didn't come from a prettier theme. It came from removing maintenance work and rebuilding trade and retail flows properly, work that should be scoped early alongside the realistic cost of a Shopify migration.

<a id="three-places-projects-stall"></a>

Three Places Projects Stall

  • Disconnected history: Orders import, but line items don't resolve to products or customers, so history looks complete and isn't.
  • Missing redirects: Old URLs go live unmapped and rankings slip before anyone checks crawl errors.
  • Vanished behavior: Subscription renewals, wholesale pricing, or custom checkout fields disappear until finance or support asks for them.

Fix those risks in order. Choose a route, inventory hidden logic, map and import data, rebuild URLs, then test through launch.

<a id="choose-your-migration-path-and-set-a-cutover-date"></a>

Choose Your Migration Path and Set a Cutover Date

Decide the route before you touch data. Four factors settle it. How much order history do you carry? How much behavior lives in custom code rather than standard plugins? Do you run B2B pricing or an ERP connection? And can someone in house own the redirect map for a year?

A retail only store with standard plugins and a contained order history can usually move with a migration app and a careful dry run. You'll still need discipline on variants, consent fields, and redirects, but the decisions are mostly mechanical. Don't confuse a simple catalog with a simple business, though. One custom checkout rule that feeds fulfillment can change the whole assessment.

Practical rule: If losing a behavior would stop orders, renewals, or tax reporting, it's not a DIY detail. Scope it before you pick a tool.

A store with custom checkout logic, wholesale accounts, subscriptions, or several regions needs specialist help for the logic inventory and integrations. That's the work we handle end to end when we Migrate from WooCommerce to Shopify, eliminating the need for your team to manage plugins, hosting, and security patches after launch. Our Shopify Migration Readiness Assessment uses eight questions in about two minutes to scope data, integrations, SEO risk, and a realistic timeline, in line with a structured migration readiness checklist.

Set the cutover date only when two things are true. A dry run reconciles cleanly against your baseline, and the delta import plan is written down with a named owner. A date chosen before that isn't a deadline. It's a guess.

<a id="rebuilding-hidden-woocommerce-logic-on-shopify"></a>

Rebuilding Hidden WooCommerce Logic on Shopify

A clean catalog import can still break fulfillment, finance, customer service, or recurring revenue. Much of a WooCommerce store doesn't live in product records. It lives in plugins, settings, user roles, and metadata that Shopify's WooCommerce migration guidance doesn't fully translate into an equivalency framework. Your job is to build that framework yourself before import day.

Start with a pre-migration logic inventory. List subscription renewals, tax rules, shipping zones, coupon conditions, bundles, custom checkout fields, order statuses, role based pricing, and plugin generated metadata. For each item, name who uses it, which system reads it, and what happens if it's missing for a week.

<a id="four-outcomes-for-every-behavior"></a>

Four Outcomes for Every Behavior

Give every item one outcome. Recreate it on Shopify. Replace it with Shopify native functionality. Hand it to an integration. Or retire it on purpose, with someone signing off. The worst outcome is the fifth one nobody chooses, discovering after launch that it vanished.

WooCommerce behavior Shopify path Rebuild when Retire when
Subscription renewals Subscription app on Shopify Active recurring customers exist No active subscribers remain after notice
Role-based and wholesale pricing Shopify B2B catalogs and price lists Trade accounts pay different prices Store sells retail only
Custom checkout fields Checkout extensibility on Plus or a checkout app Fields feed fulfillment, tax or ERP Field only captured for old reports
Bundles and configurators Bundle app or custom logic on Shopify Plus Bundles drive a meaningful share of revenue Bundles are rarely sold
Shipping zones and rules Shopify shipping profiles and markets Rates differ by country or region A plugin duplicates the same rates
Tax rules Shopify Tax or a tax app Sales span several tax regions Default settings already cover the single region
Coupon conditions Discount codes and automatic discounts Codes stack or target specific customers Codes are expired or unused
Plugin metadata Metafields or an integration A downstream system reads the field Only the old plugin used the field

B2B and hybrid merchants should weight this work most. Trade pricing, account permissions, tax treatment, and ERP sync decide whether the business keeps running on Monday. A wholesale account on net 30 terms needs a B2B price list and a payment rule, not a discount code workaround. A coupon nobody has used in two years needs a retirement decision, not a rebuild.

Write a test case for each customer and order type while you're at it. Retail guest, returning retail customer, tax exempt trade account, subscriber renewal, partial refund. If a behavior has no test case, nobody will notice when it's gone.

Apply the same discipline to the storefront. Our migration approach is to rebuild rather than replicate, because legacy templates rarely map cleanly to Shopify's section based themes. Copying a WooCommerce layout into Shopify usually preserves its compromises and loses its logic anyway.

<a id="map-woocommerce-data-to-shopify-and-import-it-in-order"></a>

Map WooCommerce Data to Shopify and Import It in Order

Read the lookup table as a checklist, then run the import in the order it prescribes. Sequence matters because Shopify records reference each other. Shopify recommends importing products first, then customers, then historical orders so order relationships resolve correctly. Reverse that order and you'll spend launch week relinking records by hand.

The other limit to accept early is the CSV ceiling. Products and customers can move by CSV. Orders and blog posts generally need a migration app or API based method. Pretending a spreadsheet can carry refunds, partial fulfillments, timestamps, and consent states is how order history arrives looking complete while the money doesn't reconcile.

<a id="woocommerce-objects-and-their-shopify-destinations"></a>

WooCommerce Objects and Their Shopify Destinations

WooCommerce item Shopify destination Import route Watch for
Simple products Product with one default variant Product CSV Duplicate handles or SKUs cause rejected rows
Variable products and variations Product with options and variants Product CSV with option and SKU columns Variant option names must match exactly across rows
Product categories Collections, manual or smart Collection setup or CSV Nested categories flatten; use tags or rules to keep structure
Customer accounts Customer records Customer CSV Password hashes do not transfer; customers reset passwords
Marketing consent Email and SMS consent fields Customer CSV with consent columns Confirm the legal basis for each opt-in before importing
Historical orders Orders with line items Migration app or API Customer and product IDs must be mapped first
Refunds and partial fulfillments Transactions and fulfillments Migration app or API Totals must reconcile against the source export
Pages and blog posts Pages and blog articles Content import or app Shortcodes and page builder blocks break; rebuild as sections
Media files Shopify files Upload or URL import Image paths in content need redirects or re-linking

A few rows deserve plain language. Simple products import with one default variant, which is why duplicate handles cause silent rejects if two WooCommerce products share a slug. Variable products are stricter. If one row says Colour and the next says Color, Shopify reads two different options, and your variant grid falls apart.

Categories become collections, and nested levels flatten. A three level WooCommerce category tree won't survive as a tree. Rebuild the structure with tags, smart collection rules, and navigation, and decide that structure before import, not after customers can't find anything.

Customer passwords don't move. Plan the reset or sign in message before launch, not after your best customers hit a login wall.

Customer consent needs legal care, not just column mapping. An email opt in collected at checkout and an SMS opt in collected through a popup may rest on different bases. Map each field to its Shopify consent field only where that basis holds. Importing every contact as subscribed because the column existed is a compliance problem dressed as efficiency.

Content is the last trap. WooCommerce pages built with shortcodes or page builder blocks don't become Shopify sections by import. The text may arrive. The layout, embedded forms, and product references usually don't. Budget rebuild time for any page that earns traffic or revenue, and re-link media rather than assuming old image paths survive.

<a id="the-import-sequence"></a>

The Import Sequence

  1. Freeze and baseline: Freeze the source or take a snapshot, make a full backup, and record baseline counts for products, variants, customers, and orders, plus order monetary totals. Without a baseline, reconciliation is opinion.
  2. Clean the export: Export variable products and confirm every SKU and handle is unique. Fix duplicates in WooCommerce where the source of truth lives, not in a spreadsheet copy nobody can audit later.
  3. Import products: Load products first and log every rejected row in an exception queue with a reason and an owner. Don't fix rejects in the file by hand. The queue is how you prove nothing vanished.
  4. Import customers: Load customers next, with consent fields mapped as decided above. Spot check trade accounts, subscribers, and customers with multiple addresses, because those records carry the logic from the inventory.
  5. Import orders last: Use a migration app or API pipeline that preserves external IDs, variant and SKU relationships, tax and fulfillment states, timestamps, refunds, and consent fields. Orders resolve only because the products and customers they reference already exist.
  6. Dry run and reconcile: Run at least one full dry run and compare row counts, monetary totals, and checksums against the baseline. Investigate every variance. Small unexplained gaps at this stage become support tickets at scale.
  7. Delta import: Export orders and customers created after the snapshot and import them as a delta just before cutover. Your WooCommerce store keeps selling during the project, so the final import is never the first one.

Treat the whole thing as a repeatable ETL process, not a one off upload. If a run fails halfway, you should be able to fix the mapping, rerun it, and get the same counts. Assign every row of the mapping matrix a named owner, including the boring ones. Unowned fields are where tax states and fulfillment statuses go to die.

One last check before you call data done. Open ten orders at random in Shopify and trace each line item back to WooCommerce. Product, variant, price, tax, discount, refund state, customer. If a support agent couldn't answer a customer question from the Shopify record alone, the migration isn't finished, whatever the import tool reported.

<a id="how-to-map-urls-and-keep-your-search-rankings"></a>

How to Map URLs and Keep Your Search Rankings

Every URL changes when you migrate from WooCommerce to Shopify, because the platforms structure paths differently. That isn't a ranking problem by itself. Unmapped URLs are. Google recommends permanent 301 or 308 redirects, sitemap submission, and monitoring both properties for site moves with URL changes. Follow that sequence exactly as written.

<a id="build-the-map-before-launch"></a>

Build the Map Before Launch

  1. Export every indexable URL: Crawl the live WooCommerce site and combine the crawl with the sitemap. Include products, categories, pages, blog posts, and paginated lists. Don't guess from memory or navigation menus.
  2. Pair old with new: Build the old to new map in a spreadsheet, matching each product and category to its Shopify handle or collection path. Flag unmatched URLs for a decision, redirect to the closest equivalent or retire deliberately.
  3. Implement permanent redirects: Load 301 or 308 redirects in bulk through Shopify's redirect import. Permanent server side redirects pass ranking signals most cleanly, which is the core of protecting Shopify SEO during and after a move.

Test the map like an opponent. Look for redirect chains and loops, incorrect locale paths, missing image URLs, canonical conflicts, stray noindex tags, structured data errors, and changed faceted navigation behavior. Facets deserve special attention, because WooCommerce filter URLs that earned links may have no Shopify equivalent, and a blanket redirect to the parent collection isn't always the right answer.

A redirect map nobody owns decays. Assign one person to it for the full year after launch.

Submit the new sitemap and monitor both the old and new properties through the first weeks. Keep redirects for at least one year, as cited in the Google guidance above, not just until the first successful crawl. Backlinks, bookmarks, and old campaign URLs keep arriving long after your launch checklist is filed away.

Preserve the metadata that travels with those URLs. Titles, descriptions, and SEO fields mapped during the data work only help if the redirect lands on the page carrying them. A perfect redirect to a stripped product page still loses the click.

<a id="testing-and-tracking-the-migration-before-and-after-launch"></a>

Testing and Tracking the Migration Before and After Launch

Before cutover, run test orders through every payment method on the new store. Cover a guest checkout, a refund, a partial fulfillment, and a tax exempt account. Confirm each order reaches the ERP or accounting tool if one is connected, with the right tax and fulfillment states, not just the right total.

Check the unglamorous surfaces too. Mobile forms, shipping rate display, discount codes, and analytics events all need verification so tracking continuity survives launch. If your add to cart and checkout events don't fire on day one, you'll spend the first month arguing about whether conversion really changed.

<a id="cutover-and-the-first-ninety-days"></a>

Cutover and the First Ninety Days

Reconcile counts and totals once more after the delta import, then switch DNS in a controlled cutover. Keep the WooCommerce store available until reconciliation passes. Pulling the old store down early removes your reference copy exactly when questions start.

Checkpoint Metrics to compare Healthy sign Red flag
Day 7 Indexed URLs, crawl errors, 404 hits Indexed count rising; 404s falling Redirect loops or clusters of unmapped 404s
Day 28 Impressions, clicks, rankings on top queries Impressions recovering toward baseline Sustained drop on top product or category pages
Day 90 Organic revenue, landing-page conversion Revenue and conversion at or above baseline Conversion gap traced to checkout or mobile forms
Any time Order and customer counts against the export Counts match within the reconciliation tolerance Counts diverge beyond tolerance or orders lack a customer link

Compare each checkpoint against the pre-migration baseline you recorded during mapping. The 28 day check on top product and category pages is your early warning for a redirect gap, because those pages surface mapping errors before long tail pages do. A cluster of losses in one category usually means one bad rule, not a sitewide problem.

Checkout friction is the other common post launch leak. High extra costs, forced account creation, slow delivery information, distrust, and complicated checkout drive cart abandonment, so validate shipping transparency, guest checkout, and payment methods in analytics from day one. Watch where mobile shoppers stop, not just how many.

End with a clear escalation rule. If conversion is still down at day 90 and the gap traces to checkout, fix the checkout, not the redirect map. Teams waste months re-auditing healthy redirects because SEO feels more familiar than checkout work.


If your store carries subscriptions, trade pricing, an ERP connection, or order history you can't afford to break, we can scope the logic inventory, data mapping, redirects, and reconciliation before you commit to a cutover date. Start with our readiness assessment or talk through your current stack at United Victory Technologies, and we'll tell you plainly whether your migration is an app job or a rebuild.