WooCommerce migrations are different from Magento or Salesforce Commerce Cloud migrations in one important way: nobody is forcing you. There's no end-of-life date, no licence renewal ultimatum, no vendor pushing you off a free tier. WooCommerce will keep running as long as you keep paying for hosting and keeping plugins patched — and that "as long as" is exactly the thing that eventually pushes brands to move. This guide covers what actually happens in a WooCommerce to Shopify migration in 2026: the real reasons brands leave, the things that genuinely get worse on Shopify, how each data type moves, and the 301 redirect map that decides whether you keep the organic traffic you spent years building. Where a number isn't publicly verifiable, we say so rather than inventing one.
Why brands actually leave WooCommerce
The honest answer is rarely "Shopify has better features." Feature-for-feature, WooCommerce can do almost anything Shopify can, and several things Shopify structurally can't. What changes is who carries the operational burden.
On WooCommerce, you own the stack. That means you own the hosting decisions, the PHP version upgrades, the database performance under load, the plugin update schedule, the staging environment, the backups, and the security posture. None of that is unmanageable — plenty of brands run WooCommerce well for years. It's just that the cost of running it well is real, continuous, and mostly invisible in a monthly software budget because it shows up as developer hours and hosting bills instead of a subscription line item.
The security surface is the part that changes the calculus most. Patchstack's State of WordPress Security in 2026 report recorded 11,334 new vulnerabilities disclosed across the WordPress ecosystem during 2025 — a 42% increase on the prior year — with 91% of them in plugins rather than core. The same report found a substantial share were exploited within hours of public disclosure. That doesn't mean your store is going to be compromised. It means your patching cadence is now a genuine operational responsibility with a short response window, and somebody has to own it every week, forever.
Plugin conflicts are the second recurring theme. A mature WooCommerce store typically runs somewhere between fifteen and forty plugins, each from a different vendor, each updating on its own schedule, each free to assume it's the only thing touching the cart. The failure mode isn't dramatic — it's that a routine update breaks your shipping calculator on a Friday afternoon, and diagnosing which of four plugins caused it takes a developer half a day. Founders describe this as "the site works until it doesn't, and I never know which update did it."
The third reason is simply attention. Teams that migrate usually aren't running from WooCommerce so much as running toward spending their engineering time on merchandising, conversion and integrations rather than on infrastructure. If you want the platform-level comparison rather than the migration mechanics, we've written that separately in Shopify vs WooCommerce.
What genuinely gets worse when you move to Shopify
This section exists because most migration guides skip it, and it's the part that determines whether you'll be happy in eighteen months.
You lose code-level freedom. On WooCommerce you have the database, the filesystem, and hundreds of action and filter hooks. If you want to change how a price is calculated at the deepest level, you can. On Shopify you work within Liquid, the Storefront and Admin APIs, Shopify Functions, checkout extensions and app blocks. That's a large and genuinely capable surface, but it's a defined one — and when your requirement falls outside it, there's no workaround, only a redesign of the requirement. Discount stacking logic, complex tax rules, and unusual pricing models are where teams most often meet this wall.
Your URL structure stops being yours. Shopify enforces fixed path prefixes — products live at /products/handle, collections at /collections/handle, static pages at /pages/handle, and blog articles at /blogs/blog-handle/article-handle. You cannot flatten these, cannot nest categories inside each other in the URL, and cannot move a product to a bare root-level path. If you have spent years building a category URL hierarchy on WooCommerce, some of it will not survive the move in the same shape. More on the consequences of this below, because it's the single biggest risk in the whole project.
Recurring app costs replace one-time plugin costs. WooCommerce extensions are typically an annual licence, often for a single site. Shopify apps are almost all monthly subscriptions, and a real store runs several of them — reviews, subscriptions, bundles, loyalty, advanced search, back-in-stock, a page builder. Individually cheap, collectively a line item that grows every year and that nobody audits. It's common for the app bill to eventually exceed the platform subscription itself.
Transaction fees, if you don't use Shopify Payments. Shopify's published pricing applies an additional transaction fee when you process payments through a third-party gateway rather than Shopify Payments: 2% on Basic, 1% on Grow, 0.6% on Advanced, and 0.2% on Plus. That's on top of whatever your gateway already charges you. On WooCommerce there is no equivalent — your processor's rate is your only payment cost. If Shopify Payments isn't available or appropriate in your market, or you're contractually tied to a specific acquirer, this is a permanent margin cost you need in the model before you commit.
Content and commerce split apart. On WooCommerce, your blog, landing pages and store are one WordPress install with one content model. On Shopify, the blogging and page tooling is deliberately basic. Brands with a serious content operation frequently end up either accepting a weaker CMS or running WordPress headlessly alongside Shopify — which reintroduces some of the maintenance burden they were trying to escape.
The real cost comparison, in both directions
Shopify's published pricing is the easy half. In the US, Basic is $39/month, Grow is $105/month and Advanced is $399/month billed monthly, with roughly a 25% discount for annual billing ($29, $79 and $299 respectively). US online card rates via Shopify Payments run 2.9% + 30¢ on Basic, 2.7% + 30¢ on Grow and 2.5% + 30¢ on Advanced. Plus is quoted individually rather than published. Our Shopify pricing guide goes deeper on which plan actually makes sense at which volume.
WooCommerce's cost is harder to state honestly because almost none of it is published. The software is free. Everything around it is not:
- Hosting. Anything from a few dollars a month on shared hosting to several hundred a month on managed WooCommerce hosting once you have real traffic and a catalogue that makes the database work. The cheap end is genuinely cheap; it just isn't where a store doing meaningful revenue ends up.
- Extensions. Paid WooCommerce extensions are annual per-site licences, and the ones stores actually need aren't trivial. WooCommerce Subscriptions, for example, is a paid annual extension sold directly by WooCommerce — the listed price varies by region and licence term, so check woocommerce.com for your currency rather than trusting a number in any blog post, including this one.
- Developer time. This is the line item that decides the comparison and the one nobody budgets. Updates, conflict debugging, performance work, security response, and the occasional emergency. Whether that's a retainer, an in-house developer, or your own evenings, it is not zero.
The fair conclusion is not "Shopify is cheaper." It's that Shopify's cost is mostly predictable and visible, and WooCommerce's cost is mostly variable and hidden. Brands that migrate and are happy about it usually weren't paying less afterwards — they were paying a known amount instead of an unknown one, and getting their engineering attention back. If you're modelling the build side of the move, what Shopify development actually costs covers that separately.
What actually moves: the data migration inventory
Shopify's own migration documentation lays out five approaches, from manual copy-paste through CSV import, migration apps, hiring a Shopify Partner, and finally custom API work. Most real migrations use two or three of these at once, because different data types have genuinely different constraints.
Products move via CSV or a migration app. Shopify's admin CSV import accepts files up to 15 MB, which sounds generous until you have a large catalogue with long descriptions — at which point you split into multiple files or move to a tool built for bulk work. [Matrixify](https://matrixify.app) is the tool most agencies reach for here: it handles products, collections, customers, orders, pages, blogs, metafields, metaobjects, redirects and more, with published plans at $20, $50 and $200 per 30 days and per-job limits of 5,000, 50,000 and unlimited products respectively. There's a free demo tier limited to 10 records, which is enough to validate your column mapping before you pay for anything.
Customers move via CSV or an app, but with one hard constraint worth planning around: Shopify explicitly cannot import customer passwords, because they were hashed outside Shopify. Historically this meant inviting every customer to set a new password. In 2026 it matters less than it used to — Shopify deprecated legacy email-and-password customer accounts in February 2026 in favour of new customer accounts, which authenticate with a one-time six-digit code sent to the customer's email rather than a stored password. Practically, that turns a painful "everyone must reset their password" email into a non-event for most stores. Confirm which account system your destination store is on before you write the comms plan.
Order history is the one that can't be done through the admin CSV importer. Shopify's guidance is to use a migration app or the API, and to import in strict order — products first, then customers, then historical orders — so that orders attach to the right customer and product records rather than orphaning. Two decisions to make early: how far back you actually need order history (many brands import two or three years rather than everything), and that imported historical orders can trigger staff notifications, which you want suppressed before you start.
Blog posts and pages are usually the most neglected part of the migration and often the most SEO-load-bearing. WordPress posts map to Shopify articles inside a blog object; WordPress pages map to Shopify pages. Categories and tags don't map cleanly — Shopify articles support tags but not a category hierarchy. Plan for content restructuring, not just content transfer.
What doesn't move at all: WooCommerce coupon logic, plugin-specific data stored in custom tables, reviews (unless the destination review app supports an import), subscription contracts (these have to be rebuilt in the new subscription app and, in most cases, re-authorised at the payment gateway), and anything a plugin stored as serialised post meta. Inventory every one of these before cutover, because each one is either a rebuild or a deliberate loss.
Where the product data model breaks
WooCommerce and Shopify model products differently enough that a raw export/import will produce a catalogue that technically loads and commercially doesn't work.
WooCommerce lets you define effectively unlimited attributes per product and generate variations from them. Shopify allows three options per product (size, colour, material, for instance) and, since the limit increase rolled out to all merchants in October 2025, up to 2,048 variants per product — a large increase on the historical cap of 100. If your catalogue relied on four or more attribute axes, that's a modelling exercise: usually splitting into multiple products, moving one axis into line item properties, or using a variant-picker app. Shopify also caps media at 250 items per product.
Grouped and bundled WooCommerce products have no direct Shopify equivalent and become either a bundle app, Shopify's own bundles functionality, or restructured products. External/affiliate products don't exist on Shopify at all. Custom fields stored by ACF or similar become Shopify metafields — which is a good outcome, but a deliberate mapping exercise rather than an automatic one, and it needs to happen before import, not after, because retrofitting metafields across a live catalogue is far more work.
The practical rule: build the target data model first as a spreadsheet, run a sample of thirty genuinely awkward products through it end to end, and only then run the bulk import. The awkward thirty should include your widest variant matrix, your bundles, your products with the most custom fields, and anything with unusual tax or shipping treatment. This is where an engineering-led migration earns its money — the mapping decisions are the project, the import itself is the easy part.
The 301 redirect map: the single biggest risk in the project
If a WooCommerce migration goes badly, this is almost always why. Shopify's URL structure is fixed and WooCommerce's is configurable, which means your URLs will change — not some of them, effectively all of them — and every changed URL is a ranking signal that needs to be explicitly forwarded.
Start by knowing what WooCommerce is actually serving. Its documented permalink options for products are: the default /product/product-name, shop base /shop/product-name, shop base with category /shop/category/product-name, or a custom base such as /store/product-name. Category archives default to /product-category/parent/child, and tag archives to /product-tag/tag. WordPress pages sit at arbitrary paths, and blog posts sit wherever your WordPress permalink setting put them — frequently /YYYY/MM/post-name/ on older installs.
Shopify gives you no equivalent flexibility. Products are always /products/handle. Collections are always /collections/handle. Pages are /pages/handle, and articles are /blogs/blog-handle/article-handle. So the mapping is structural, not cosmetic:
- /product/blue-hoodie → /products/blue-hoodie
- /shop/hoodies/blue-hoodie → /products/blue-hoodie
- /product-category/mens/hoodies → /collections/mens-hoodies
- /product-tag/organic → /collections/organic, or a filtered collection URL
- /2021/04/how-to-wash-merino/ → /blogs/news/how-to-wash-merino
- /about-us/ → /pages/about-us
Two things about Shopify's redirect system that catch teams out, both documented by Shopify. First, you cannot create a redirect from a URL that still resolves — Shopify only applies a redirect when the source URL would otherwise 404. Second, certain paths are reserved and cannot be redirected from: URLs beginning /apps, /application, /cart, /carts, /orders, /services or /shop, plus fixed paths including /products, /collections and /collections/all. That second one matters enormously here, because /shop is a reserved prefix on Shopify and a very common product base on WooCommerce. If your store used the shop-base permalink structure, every one of those product URLs is in a prefix Shopify will not let you redirect from natively, and you need a different mechanism — typically handling it at the DNS/CDN layer in front of Shopify, or via an app that intercepts before the 404.
On volume: Shopify allows up to 100,000 URL redirects on standard plans and up to 20 million on Plus, and supports bulk import of redirects by CSV, so the scale is rarely the constraint. The constraint is accuracy.
How to build the map properly:
1. Crawl the live WooCommerce site with Screaming Frog or similar to get every indexable URL, not just the ones in your sitemap.
2. Pull actual performance data from Google Search Console and your analytics — every URL that has earned an impression, a click or a backlink in the last twelve months. This is the list that matters. A URL with no traffic and no links can be allowed to 404; a URL with three referring domains cannot.
3. Merge and map — one row per source URL, one destination, no chains. A redirect that points to another redirect leaks equity and slows crawling.
4. Handle the long tail deliberately. Paginated archives, filtered URLs with query strings (Shopify warns that query strings behave unpredictably in redirects), feed URLs, attachment pages, and old .html URLs all need a decision, even if the decision is "let it 404."
5. Test before cutover, not after. Load the redirect CSV into the staging store, then run your top few hundred URLs through a redirect checker and confirm each returns a single 301 to a live 200.
Discovering a broken redirect map in Search Console three weeks after launch is the expensive version of this. We go deeper on the full SEO side of a platform move in migrating to Shopify without losing SEO rankings.
SEO preservation beyond redirects
Redirects are necessary and not sufficient. Four other things move the needle.
Metadata. Title tags and meta descriptions written in Yoast or RankMath are stored in WordPress post meta and do not come across in a standard product export. They need to be exported separately and mapped into Shopify's page title and meta description fields, which on Shopify live in the SEO section of each resource and are importable in bulk via Matrixify. Losing hand-written titles across a few thousand products is a quiet, avoidable ranking hit.
Structured data. WooCommerce plugins typically output Product, Breadcrumb and Organization schema. Shopify themes vary wildly in what schema they emit and how correct it is. Audit the destination theme's structured data before launch rather than assuming parity.
Shopify's duplicate URL behaviour. Shopify serves the same product at both /products/handle and /collections/collection-handle/products/handle. Shopify's themes canonicalise these to the clean /products/ URL, which is the right behaviour — but canonical tags are a hint to search engines, not a directive. The fix is to make every signal agree: canonical, sitemap, and internal links all pointing at /products/handle. Many themes still link products through the collection-scoped path in collection grids. Check yours.
Site speed. Don't assume the new store is faster. Migrating brands regularly install a dozen apps in the first month and land slower than the WooCommerce site they left. Take Core Web Vitals measurements before you migrate so you have a baseline to be held to.
One last thing: don't change your domain and your platform in the same release if you can avoid it. If you must do both, migrate the platform first, let it settle for a few weeks, then move the domain. Two simultaneous changes make it impossible to diagnose which one caused a traffic drop.
Plugin to app: what your WooCommerce stack becomes
The stack audit is the piece that most reliably changes the scope of a migration, and it should happen before you quote the project, not during it.
Some things you were paying a plugin for become native and disappear from the bill: SSL and CDN, PDF invoices in most cases, basic caching and performance plugins, security and firewall plugins, backup plugins, and (depending on your setup) multi-currency, which Shopify handles through Markets. That's a genuine reduction in surface area and part of the honest case for moving.
Some things swap one subscription for another: WooCommerce Subscriptions becomes a Shopify subscriptions app, Yoast becomes a Shopify SEO app or careful theme work, a reviews plugin becomes a reviews app, a page builder becomes a Shopify page builder app, and your email plugin becomes Klaviyo or equivalent. Roughly cost-neutral, sometimes better, sometimes not.
Some things get genuinely harder. Deep WooCommerce customisation implemented through hooks — custom pricing logic, unusual shipping rules, bespoke B2B behaviour, complex conditional discounts — has to be rebuilt as Shopify Functions, a custom app, or checkout extensions. That's real engineering, not configuration, and it's the single largest driver of variance in migration quotes.
The discipline that matters: audit every plugin, and for each one decide native, app, custom build, or drop. "Drop" should be a live option for more of them than teams expect — a good number of WooCommerce plugins are there to solve problems the platform created, and don't need replacing at all. Whatever survives the audit becomes the app stack you'll be paying for and maintaining, so it's worth being ruthless. Keeping it lean afterwards is what ongoing care and support is actually for.
Realistic timelines and what a migration costs
Two honest caveats first: every range below is a planning shape rather than a quote, and the variance is driven far more by custom functionality than by catalogue size. Ten thousand simple products is an easier migration than four hundred products with bespoke pricing logic.
A straightforward store — a few hundred to a few thousand products, standard variants, a handful of common plugins, no custom checkout behaviour, a theme you're happy to buy rather than build — typically runs four to eight weeks end to end. Most of that is design and content, not data.
A mid-complexity store — larger catalogue, subscriptions or bundles, an ERP or 3PL integration, a custom theme build, a decade of blog content — usually runs two to four months.
A complex store — B2B logic, multi-region, custom pricing engines, several system integrations, a large content archive — runs four months or more, and should be phased rather than big-banged.
Whatever the band, the sequence is the same: audit and mapping, then data migration into a staging store, then theme and design, then integrations and custom functionality, then the redirect map, then a full staging test of real checkout paths, then a cutover with the redirect file loaded and Search Console monitored daily for the first fortnight. The single most common scheduling mistake is treating redirect work as a launch-week task. It's a project-long task that gets validated in launch week.
On cost, the components are: the data migration itself (tool licences of tens to a few hundred dollars, plus the labour of mapping and validation), the design and theme build, the rebuild of custom functionality, integrations, and the redirect and SEO work. A migration onto a lightly customised premium theme sits at the low end; one that rebuilds bespoke commerce logic sits far above it. Anyone quoting you a fixed migration price before auditing your plugin list and your custom code is quoting the data move and will find the rest of the project later, at your expense. Our WooCommerce to Shopify migration service page sets out how we scope this, and we cover the general shape of Shopify build pricing in what a Shopify website costs.
You should NOT migrate if...
The most useful thing an agency can tell you is when not to hire them. Several situations genuinely argue for staying on WooCommerce.
Your business logic lives in code that Shopify's model can't express. If your pricing, quoting, or fulfilment logic requires arbitrary server-side computation at a point in the flow Shopify doesn't expose, you'll spend the migration budget rebuilding it into something worse. Shopify Functions and checkout extensions cover a lot, but check the specific requirement against the specific API before you commit, not after.
Content is the business and commerce is attached to it. Publishers, course businesses, membership sites and media brands with a store bolted on are usually better served by WordPress remaining the primary system. Shopify's CMS is not a serious replacement for WordPress in that role.
You're migrating to fix something a migration doesn't fix. Slow site, poor conversion rate, bad mobile experience, ugly design — none of these are platform problems. They're theme, app-bloat and CRO problems, and every one of them can be fixed on WooCommerce for a fraction of a migration budget. A brand that migrates to fix a conversion problem generally arrives on Shopify with the same conversion problem and a new set of bills.
Shopify Payments isn't available or workable in your market. If you'll be running a third-party gateway permanently, model the extra transaction fee against your actual volume first. At scale it can outweigh everything else in the comparison.
Your team already runs WordPress well. If you have in-house WordPress capability, a functioning staging and update process, good managed hosting and no security incidents, you are already paying the cost of doing WooCommerce properly and getting the benefits. Migrating trades a working system for a transition risk.
You're in the middle of peak season. Don't cut over in Q4. Don't cut over during a launch. The redirect settling period alone argues for a quiet month.
Getting a migration properly scoped
If you're seriously considering the move, the most valuable next step isn't choosing a migration tool — it's producing three artefacts: a complete plugin inventory with a native/app/build/drop decision against each, a URL export from Search Console covering every page that earned traffic or links in the last twelve months, and a written list of the business logic your current store does that isn't standard commerce. Those three documents determine both whether you should migrate and what it will actually cost. Anyone can move a product catalogue; the project lives in the other three-quarters.
We handle WooCommerce migrations as a single coordinated piece of work — the data model mapping, the plugin audit, the custom logic rebuild, and the redirect map treated as one project rather than four separate risks handed to different people. If that's useful, the migration service page explains the process in more detail, and you're welcome to get in touch with your plugin list and a Search Console export for an honest read on scope — including, where it applies, the answer that you shouldn't migrate yet.
If any of this sounds like your situation, talk to us. We'll tell you exactly where your revenue is leaking and what it would take to fix it. Explore Strategy & Consulting →

