WooCommerce to Shopify migration, with the new store built
WooCommerce stores move cleanly once three things are handled: variable products with more than three attributes, plugin data hiding in post meta, and the /product/ and /product-category/ URLs that Shopify can't reproduce. We export through the WooCommerce REST API and the database, import with Matrixify, and redirect every old URL. Most WooCommerce stores fit the Tailored Move at $8,900 in 15 business days.
Where WooCommerce stores get stuck
WooCommerce is a plugin on top of WordPress, so a WooCommerce store is really three things layered together: WordPress content, WooCommerce's own tables, and whatever each plugin wrote into wp_postmeta. The built-in product CSV exporter1 covers the first layer of product data well. It doesn't see subscription schedules, Advanced Custom Fields values, B2B role prices from plugins like Wholesale Suite or B2BKing, or the review stars stored as comment meta.
That's why we don't start from the CSV alone. On day 1 we pull a full export over the REST API, list every meta key that has values, and decide with you which ones become Shopify metafields, which ones become tags, and which ones get left behind. The decisions go into Basecamp before anything is imported, so there are no surprises in week two.
What moves from WooCommerce, and how
Every row below is checked against a 50-product test import before the full run.
| On WooCommerce | How it moves | Notes |
|---|---|---|
| Simple products | Moves by tool | Title, description, price, SKU, barcode, weight, stock, images and alt text. |
| Variable products and variations | Moves by tool | Become one product with variants. More than 3 variation attributes needs a split (see above). |
| Global attributes not used for variations | Moves by tool, after mapping | Become product metafields, which can power storefront filters. |
| Short description | Mapped by hand | Shopify has one description field, so it goes into a metafield block or the top of the description. |
| Product categories (nested) | Moves by tool | Become collections. Shopify collections are flat, so the hierarchy is rebuilt in menus. |
| Product tags | Moves by tool | Kept as tags; useful for automated collections. |
| Grouped and external products | Rebuilt by hand | No direct equivalent. Grouped products become a bundle or a collection section; external products get a button driven by a metafield. |
| Customers and addresses | Moves by tool | Accounts arrive without passwords. Customers get an account activation invite. |
| Customer passwords | Does not move | Passwords are stored hashed and can't be carried to any new platform. |
| Orders | Moves by tool | Imported as historical orders with their original order numbers. 24 months in Off the Rack, full history in Tailored. |
| Coupons | Moves by tool, rules checked by hand | Simple percentage and fixed codes move. Plugin-based conditional rules are rebuilt as Shopify discounts. |
| Product reviews | Moves through the review app | Exported from WordPress comments and imported into the review app you pick (Tailored and up). |
| Pages and blog posts | Moves by tool | Shortcodes and page-builder markup are stripped; layouts are rebuilt in Horizon sections. |
| SEO titles and meta descriptions | Moves by tool | From Yoast or Rank Math meta keys into Shopify's SEO fields. |
| Gift card balances | Moves by tool (Tailored and up) | Only if the gift card plugin exposes balances; codes are reissued in Shopify. |
Variable products and the three-option ceiling
Shopify allows up to 2,048 variants per product but only three options (for example size, colour and material)2. WooCommerce has no such ceiling, so a variable product with four attributes used for variations needs a decision:
- Split it into separate products, for example one product per material, and link them with a "Also available in" section in Horizon.
- Demote one attribute to a line item property when it doesn't change price or stock (engraving text, gift note).
- Keep it as a filter only by moving attributes that aren't used for variations into metafields, which Search & Discovery can turn into storefront filters.
Watch for variations set to "Any colour" or "Any size". WooCommerce treats them as wildcards, but Shopify needs every combination spelled out as a real variant with its own SKU and stock. We expand those during mapping and flag any combination that has no stock history.
Redirect rules for WooCommerce URLs
WooCommerce's permalink settings decide the old patterns3. Shopify's are fixed (/products/, /collections/, /pages/, /blogs/), so every old URL gets an explicit 301 in Shopify's URL redirects4. We build the map from your real URL list, not from the patterns alone.
| WooCommerce URL | Shopify URL | Covers |
|---|---|---|
/product/{slug}/ | /products/{slug} | Default WooCommerce product base. Custom bases (e.g. /shop/{category}/{slug}/) are read from your settings. |
/product-category/{parent}/{child}/ | /collections/{child} | Nested category paths collapse to one collection handle. |
/product-tag/{tag}/ | /collections/all/{tag} | Or a dedicated collection if the tag page earns traffic. |
/shop/ | /collections/all | The WooCommerce shop page. |
/{page-slug}/ | /pages/{page-slug} | WordPress pages, one rule per page. |
/{year}/{month}/{post-slug}/ or /{post-slug}/ | /blogs/news/{post-slug} | Depends on your WordPress permalink setting. |
/my-account/ | /account | Plus /cart/ to /cart and /checkout/ to /cart. |
Plugins and the Shopify apps that replace them
The plugin list decides most of the build, so we map it before quoting. Common swaps:
| WooCommerce plugin | On Shopify |
|---|---|
| Yoast SEO / Rank Math | Shopify's own SEO title and description fields (imported per product, page and post) |
| WooCommerce Subscriptions | A subscription app. Active subscribers re-consent unless your payment gateway supports token migration, so we check that first |
| Wholesale Suite, B2BKing | Native Shopify B2B: companies, catalogs, payment terms. See the Counter Switchover |
| Product Add-Ons | Line item properties in Horizon or an options app |
| WPML / Polylang | Shopify Markets with Translate & Adapt |
| Table Rate Shipping | Shipping profiles and zones; carrier-calculated rates on Advanced or annual Grow5 |
| Mailchimp for WooCommerce | Klaviyo or Shopify Email, with list export and re-sync |
Five things that bite on WooCommerce moves
Two slugs, one product
Old WooCommerce redirects plugins (Redirection, Yoast Premium) often hold years of chained redirects. We export them and point each old URL straight at its final Shopify URL, so nothing hops twice.
Prices entered with tax
If WooCommerce was set to "prices entered inclusive of tax", the import has to match Shopify's tax setting or every price shifts. We check one product per tax class in the test import.
Stock held in a plugin
Multi-location or batch stock plugins store quantities in their own tables. Those quantities are mapped to Shopify locations by hand.
Images served from a CDN plugin
Jetpack or other CDN plugins rewrite image URLs. We pull originals from wp-content/uploads so Shopify gets full-resolution files.
Guest orders
WooCommerce guest orders have no customer account. They import as orders tied to an email, and Shopify links them to a customer by that email.
Which Move fits a WooCommerce store
If the store is a clean catalog with a stock theme and fewer than five plugins that matter, the Off the Rack Move ($4,900, 10 business days) covers it. Most WooCommerce stores we see have a customised theme, a few years of order history and an email or reviews plugin, which is what the Tailored Move ($8,900, 15 business days) is for. If you also sell wholesale through a plugin, add a Counter Switchover so the role-based prices land in native B2B catalogs rather than another app. Comparing platforms first? Read Shopify vs WooCommerce for growing and wholesale stores.
Questions people ask
Can my WooCommerce customers keep their passwords?
No. WordPress stores passwords hashed, and no platform can import them. Customers keep their account history and get an activation email to set a new password.
Do I need to freeze my WooCommerce store during the move?
Only for the last stretch. We import everything early, then run a final sync of new orders and customers right before launch, so the content freeze is a day or two, not weeks.
Get a fixed price and a launch date in 15 minutes.
Tell us what you're running today. You'll have a written scope, a price that won't change and the date we'll be held to within one business day.
Tailored Move
Established brands that want the new store to look and sell better than the old one. · 15 business days.
Pay the 50% deposit · $4,450Sources
- WooCommerce docs: Product CSV importer and exporter, checked October 22, 2026.
- Shopify Help Center: Adding variants (limits), checked October 22, 2026.
- WooCommerce docs: Permalinks, checked October 22, 2026.
- Shopify Help Center: URL redirects, checked October 22, 2026.
- Shopify Help Center: Third-party carrier-calculated shipping availability, checked October 22, 2026.