Shopify Development

Migrating to Shopify: The Complete Technical Guide for Growing Brands

14 min read

Migrating an established online store to Shopify is one of the most high-stakes projects a growing brand will undertake. Get it right and you unlock a vastly superior ecosystem of apps, checkout extensibility, and developer tooling. Get it wrong and you lose organic traffic, break customer accounts, and spend months cleaning up data issues that should have been caught before launch day.

I have led Shopify migrations from WooCommerce, Magento, and BigCommerce for DTC brands ranging from $500K to $15M in annual revenue. This guide is everything I wish I had been handed before my first migration — the full technical picture, with no glossing over the parts that go wrong.


Migration Timeline: The Five Phases

Every successful migration follows the same fundamental shape. The timeline varies — anywhere from six weeks for a simple catalog store to six months for a subscription brand with complex integrations — but the phases remain consistent. Skipping a phase is how migrations go wrong.

Typical migration timeline (8-12 weeks)

1

Audit & Discovery

Week 1-2 — Catalog the existing platform: products, customers, orders, URL structures, integrations, custom logic.

2

Build & Configure

Week 2-6 — Theme development, app installation, Shopify configuration, data mapping scripts.

3

Data Migration

Week 5-8 — Products, customers, historical orders, redirects. Run at least two dry runs before the real thing.

4

QA & Parallel Run

Week 8-10 — Comprehensive testing on the development store, stakeholder sign-off, staff training.

5

DNS Cutover & Launch

Week 10-12 — Final data sync, DNS switch, redirect verification, post-launch monitoring.

Timelines compress for catalog-only stores and expand significantly for brands with active subscriptions or complex ERP integrations.


Pre-Migration Audit Checklist

Before writing a single line of migration code, you need a complete inventory of what exists on the current platform. I have seen migrations stall mid-project because nobody documented a custom discount engine or a third-party fulfillment integration that only one person on the team knew about. The audit is not glamorous work, but it prevents expensive surprises.

Complete audit checklist

Products & Catalog

Total SKU count and variant structure (Shopify caps at 100 variants per product by default)
Custom product fields and metafield mapping requirements
Collection/category structure and automated collection rules
Product image inventory and alt text audit

Customers & Accounts

Total customer count and segmentation tags
Password migration plan (Shopify cannot import hashed passwords from other platforms)
Stored payment methods and active subscriptions

SEO & URL Structure

Complete URL map: every indexed page and its current ranking keywords
Existing 301 redirect chains (avoid redirect chains deeper than two hops)
Structured data (schema.org markup) currently in use
Sitemap structure and Google Search Console baseline metrics

Integrations & Custom Logic

Complete list of third-party integrations: email, SMS, ERP, fulfillment, reviews, loyalty
Custom discount logic, bundling rules, and promotional mechanics
Webhook endpoints and API consumers that depend on the current platform

Work through this checklist with your operations team, not just your developers. They know about the integrations nobody documented.


Platform-Specific Migration Paths

The complexity of a Shopify migration depends heavily on where you are coming from. Each platform has its own data model, URL structure, and ecosystem of plugins that need to be accounted for. Here is what to expect from the three most common migration paths I encounter.

Aspect
WooCommerce
Magento
BigCommerce
Products
Clean transfer
Clean transfer
Clean transfer
Variants
May need restructuring
Configurable products need mapping
Clean transfer
Customers
Data yes, passwords no
Data yes, passwords no
Data yes, passwords no
Historical Orders
Clean transfer
Complex line items need flattening
Clean transfer
URL Structure
Rebuild + 301s required
Rebuild + 301s required
Partial match, 301s needed
Theme / Design
Full rebuild
Full rebuild
Full rebuild
Subscriptions
Full rebuild + token migration
Full rebuild + token migration
Partial, depends on provider
Overall Difficulty
Moderate
High
Moderate-Low

Color coding: green = straightforward, amber = requires planning, red = significant effort required.


WooCommerce to Shopify

WooCommerce is the most common migration source I work with. The data model is close enough to Shopify's that product and customer migration is relatively painless. The pain points are URL structure and custom plugin logic.

WooCommerce uses WordPress's permalink structure — typically /product/product-name/ or a completely custom structure. Shopify enforces /products/handle for products and /collections/handle for categories. There is no way around this. You must create 301 redirects for every indexed URL, and I strongly recommend using Shopify's URL redirect API rather than the admin interface for bulk imports. I typically write a script that pulls every URL from the WooCommerce database, generates the corresponding Shopify URL, and batch-creates the redirects via the Admin API.

The other WooCommerce-specific challenge is plugin functionality. WooCommerce stores often rely on a patchwork of WordPress plugins — custom product configurators, complex discount rules, membership systems. Each of these needs a Shopify equivalent or a custom solution. I create a spreadsheet mapping every active plugin to its Shopify replacement during the audit phase.

For the data itself, I use the Shopify REST Admin API directly. Tools like Matrixify (formerly Excelify) are useful for simpler stores, but for anything with complex variants or metafields, I write custom PHP or Python scripts that transform the WooCommerce export into Shopify's expected format. The extra control is worth the extra time.


Magento to Shopify

Magento migrations are the hardest. This is not because Magento is a bad platform — it is remarkably powerful — but because Magento stores tend to have deep customization, complex catalog structures, and multi-store configurations that do not map neatly onto Shopify's architecture.

Magento's configurable products, grouped products, and bundle products all need to be translated into Shopify's simpler product/variant model. A configurable product with color and size options maps directly to Shopify variants, but a grouped product (multiple standalone products sold together) may need to become a Shopify bundle or a custom solution using metafields and JavaScript.

Magento's attribute system is far more sophisticated than Shopify's. If you are relying on custom product attributes for filtering, search, or display logic, you will need to map these to Shopify metafields and rebuild any frontend logic that depends on them. This is one of the areas where the cost of a Magento migration can escalate quickly.

One pattern that works well: migrate the product data in stages. Products and basic variants first, then metafields, then images. Run validation scripts after each stage to catch data integrity issues before they compound. I have caught truncated product descriptions, missing variant prices, and orphaned images this way.


BigCommerce to Shopify

BigCommerce is the smoothest migration path. The data models are similar, both platforms are SaaS, and BigCommerce's export capabilities are good. The main complication is URL structure — BigCommerce allows fully custom URLs while Shopify enforces its prefix pattern. You still need comprehensive 301 redirects, but the product and customer data typically transfers with minimal transformation. If you are considering a platform move and currently on BigCommerce, this is likely a six-to-eight week project rather than a three-month one.


Migration Risk Assessment

Not all migration risks are created equal. Some will cost you a few hours of cleanup. Others can cost you months of organic traffic or thousands of active subscribers. I categorize risks into three tiers so the team knows where to focus their attention and testing effort.

High Risk
  • SEO regression — Missing redirects or broken canonical URLs can destroy months of organic ranking gains
  • Subscription token loss — Payment method tokens that fail to migrate mean customers must re-enter card details, causing churn
  • DNS propagation failure — Incorrect DNS configuration can take the store offline for hours during cutover
Medium Risk
  • Customer password reset — Shopify cannot import password hashes; all customers will need to reset passwords post-migration
  • Email flow disruption — Transactional email triggers and Klaviyo/email integrations need reconfiguring for Shopify events
  • Product data mismatch — Custom fields, variant structures, or bundling logic that does not map cleanly to Shopify's data model
Low Risk
  • Image migration — Product images transfer cleanly; Shopify's CDN handles re-optimization automatically
  • Basic product data — Titles, descriptions, prices, and inventory counts map directly between platforms
  • Analytics re-tagging — GA4 and tracking pixels are straightforward to re-implement with Shopify's customer events API

Data Migration: The Details That Matter

The bulk of a migration project is data work. I will walk through each data category and the specific challenges you should expect.

Products and Variants

Product migration is the most straightforward category, but there are gotchas. Shopify's default variant limit of 100 per product catches people coming from platforms with no limit. If you have products with more than 100 combinations, you will need to restructure — either by splitting into multiple products or using Shopify's combined listing feature which was introduced to address exactly this limitation.

Use the Admin API's bulk operations for large catalogs. Attempting to migrate 10,000+ products through individual API calls is painfully slow and will hit rate limits. The bulk operation endpoint accepts JSONL files and processes them asynchronously, which is dramatically faster for initial data loads.

Customers and Accounts

The password problem is the single most common question I get from brands planning a migration. Shopify cannot import password hashes from other platforms. Every customer will need to create a new password on their first login. There are two approaches I recommend: either use Shopify's built-in account invite email to proactively send password reset links before launch, or implement a seamless first-login flow that triggers a password reset automatically when someone attempts to log in for the first time.

I strongly prefer the proactive approach. Send the account invites two to three days before DNS cutover, framed as a "your new account is ready" email rather than a "your password was lost" message. The framing matters for customer confidence.

Historical Orders

You can import historical orders into Shopify, and I recommend doing so for at least the past 12-24 months. This gives your customer service team access to order history in the Shopify admin and ensures Shopify's analytics have meaningful historical data. Use the Orders API with the financial_status and fulfillment_status fields to preserve the accurate state of each order, and set the processed_at timestamp to the original order date rather than the import date.

SEO and Redirects

I cannot overstate how important the redirect strategy is. I have seen brands lose 40-60% of their organic traffic for months after a migration because redirects were treated as an afterthought. The approach I use is systematic: crawl the existing site with Screaming Frog or a similar tool, export every URL that returns a 200 status, map each one to its Shopify equivalent, and create the redirects before DNS cutover. After launch, monitor Google Search Console daily for the first two weeks and fix any new 404s immediately.

Be aware of Shopify's URL structure constraints. Product pages are always at /products/handle, collections at /collections/handle, and pages at /pages/handle. You cannot change these prefixes. Any SEO equity on URLs like /shop/category/product-name needs to be redirected to the new pattern.

Also migrate your meta titles, meta descriptions, and structured data. Shopify's SEO fields on products and pages support custom meta titles and descriptions. Do not rely on Shopify's auto-generated meta tags — import the ones that are already ranking.


Subscription Migration: The Hard Problem

If you have active subscriptions on your current platform, the migration complexity increases dramatically. The core issue is payment method portability. When a customer subscribes and enters their credit card, the payment processor tokenises that card. The token is specific to the processor and the merchant account. Moving those tokens to a new processor or even a new merchant account on the same processor requires coordination with the payment provider and can take four to eight weeks.

4-8w

for payment token migration

Payment processors like Stripe support vault-to-vault token migration, but the process requires manual coordination with their support team. Start this process at the beginning of the project, not at the end. It is invariably the longest lead-time item in a subscription migration.

Beyond tokens, you need to recreate the subscription data itself. If you are moving to ReCharge or Skio on Shopify -- see the platform decision guide if you haven't picked one yet -- both platforms support subscription imports. ReCharge has a well-documented import process that accepts CSV files with subscription details, billing schedules, and customer references. Skio's import tooling is newer but functional.

The risk that keeps me up at night during subscription migrations is the gap period. Between the final export from the old platform and the first charge on the new platform, there is a window where subscriptions are in limbo. Charges that fire during this window need to be handled — either by pausing all subscriptions for a brief maintenance window or by running both systems in parallel briefly. I prefer the maintenance window approach because parallel running introduces reconciliation complexity that rarely justifies the effort.

Communicate clearly with subscribers. Send an email a week before the migration explaining that their subscription is moving to a new system, their billing will not be interrupted, and they may need to reset their account password. Transparency prevents a flood of support tickets.


DNS and Domain Cutover

The DNS cutover is the point of no return. I always schedule it for a Tuesday or Wednesday morning, never a Friday. If something goes wrong, you want a full working week ahead of you to resolve it.

Before touching DNS, reduce the TTL (time to live) on your domain's DNS records to 300 seconds (5 minutes), at least 48 hours before the cutover. This ensures that when you switch the records to point to Shopify, the change propagates quickly. If your TTL is set to the default 86400 seconds (24 hours), some visitors will still see the old site for up to a day after you make the switch.

Shopify requires either an A record pointing to their IP address or a CNAME pointing to shops.myshopify.com for your root domain. Verify this in Shopify's domain settings before the cutover day. SSL certificates are provisioned automatically by Shopify, but they can take up to 48 hours to activate on a new domain.

My cutover checklist: lower TTL 48 hours prior, do a final data sync the night before, switch DNS records in the morning, verify SSL within two hours, test every redirect, confirm checkout works with a real test order, and monitor Google Search Console for crawl errors. Do not celebrate until all of these are green.


Post-Migration QA: The First 48 Hours

The two days after launch are the most critical. This is when you will catch the issues that slipped through testing. I run a structured QA process that covers every major user path.

Checkout is the first priority. Place a real order with a real payment method. Do not just test in Shopify's test mode — Shopify's test mode and live mode can behave differently, particularly with third-party payment gateways and post-purchase apps. Verify that the order appears in your fulfillment system, that the confirmation email fires, and that the order data flows to your analytics.

Redirects are the second priority. Use a tool like Screaming Frog to crawl every URL from your redirect map and verify they resolve correctly. Pay special attention to redirect chains — a URL that redirects to another redirect before reaching the final destination. Each hop in the chain dilutes the SEO value passed to the new URL.

Check your analytics tracking. Verify that page views, add-to-cart events, and purchase events are firing in GA4, Klaviyo, and any other tracking platforms. It is easy to miss an event during the migration, and the longer it goes unnoticed the larger the gap in your data.

Monitor site speed. Run Lighthouse audits on key pages — homepage, a collection page, a product page, and the cart — and compare against your pre-migration baseline. Shopify's infrastructure is generally fast, but an unoptimised theme or heavy third-party apps can introduce performance regressions.

Finally, keep the old platform running in read-only mode for at least two weeks. You will need to reference historical data, debug edge cases, and handle any customer service queries that relate to pre-migration orders. Do not decommission the old platform until you are confident everything has been transferred.


Common Mistakes I See Repeatedly

After a number of these migrations, patterns emerge. The same mistakes come up regardless of the brand's size or the source platform.

Underestimating redirect volume. Most brands have far more indexed URLs than they realise. Blog posts, tag pages, filtered collection views, media attachments — all of these need redirects. A store with 500 products might have 3,000+ indexed URLs once you account for categories, tags, and paginated pages.

Ignoring the email stack. Your transactional emails, abandoned cart flows, and post-purchase sequences all need to be rebuilt for Shopify's event model. Klaviyo integrates natively with Shopify, but the event names and data payloads are different from WooCommerce or Magento. If you do not rebuild your flows before launch, your customers will stop receiving the emails they expect.

Testing only the happy path. Everyone tests "add product to cart, check out, place order." Far fewer people test what happens when a customer applies a discount code to a subscription product, attempts to use a gift card for the remaining balance, and requests an address change on a pending order. Edge cases are where migrations break.

Rushing the timeline. Stakeholders always want to move faster. I have learned to be firm about the QA phase. Cutting two weeks off testing to launch before a promotional event is a false economy — the cost of fixing a broken migration in production is always higher than the cost of delaying launch.


When Is the Right Time to Migrate?

Never migrate during your peak season. For most DTC brands, that means avoiding November through January entirely. The ideal migration window is a low-traffic period where a temporary dip in conversion rate will have minimal revenue impact. Q2 is typically the safest bet for consumer brands.

Beyond timing, the trigger for migration should be a genuine limitation of your current platform. If WooCommerce is costing you more in developer time than Shopify would, if Magento's hosting costs are eating into your margins, or if BigCommerce's app ecosystem is missing a critical capability — these are legitimate reasons to move. Migrating because Shopify is trendy is not a good enough reason when you account for the cost, risk, and three months of engineering time.

If you are weighing a migration or already mid-project and want a second pair of eyes on your plan, get in touch. I have been through this process enough times to spot the problems before they become expensive.