Shopify to WooCommerce SEO migration playbook with URL mapping and redirect strategy
Migration guide

Shopify → WooCommerce: SEO Migration Without Losing Traffic

A Canadian operator's playbook — URL mapping, redirect strategy, schema continuity, and the post-launch monitoring plan that prevents the typical 30–50% organic drop.

12 min read
·
2,050 words
·
Updated April 30, 2026
·By Martin Vassilev

The migration in one paragraph

Shopify to WooCommerce migrations are SEO-risky because the URL structures don't match (Shopify uses /products/{handle}, WooCommerce uses /product/{slug}), schema implementations differ, and Shopify's app-injected JSON-LD has to be recreated by hand. The fix is structural: lock URL slugs before content migration, map every old URL to a new one in writing, build server-level 301 redirects (not plugin-based), recreate Product/Offer schema explicitly, and monitor GSC daily for the first 30 days. A clean migration loses 0–5% of traffic in the first 60 days; a sloppy one loses 30–50%.

Why this migration is structurally SEO-risky

Shopify and WooCommerce solve the same business problem with very different technical foundations. The migration touches every SEO surface simultaneously: URLs change, schema implementations change, internal-link patterns change, page-render mechanics change, and ownership of edge-CDN behaviour changes. Each individually is recoverable; together, they create the largest SEO-risk surface most operators ever take on.

The default outcome — a migration done by a developer without an SEO continuity plan — loses 30–50% of organic traffic in the first 90 days. We've measured this on Canadian e-commerce sites multiple times. It's preventable, but only with deliberate work in advance.

URL mapping: the foundation step

Before any code work begins, you need a written 1:1 map of every old URL to its new URL. Export your existing Shopify URLs from a full crawl (Screaming Frog, Sitebulb, or a sitemap export). Categorize them:

  • Product pages
    Shopify: /products/{handle}. WooCommerce default: /product/{slug}. Decide whether to keep WooCommerce default or change to /products/{slug} via permalink settings — keeping the path segment identical reduces redirect surface significantly.
  • Collection pages
    Shopify: /collections/{handle}. WooCommerce: /product-category/{slug}. Almost always different. Map each collection to its new category URL explicitly.
  • Blog posts
    Shopify: /blogs/{blog-handle}/{article-handle}. WooCommerce / WordPress: typically /blog/{post-slug} or /{post-slug}. Decide upfront.
  • Static pages
    Shopify: /pages/{handle}. WooCommerce: /{page-slug}. Mostly clean migrations; just map them.
  • Orphaned legacy URLs
    Old promo pages, retired products, archived collections. Decide: redirect to nearest equivalent, redirect to category parent, or 410 Gone (only if truly retired and you don't want them to ever return).

If you can't produce the URL map as a spreadsheet before launch, you don't have a migration plan — you have a launch and a hope.

— Martin Vassilev, founder, Toronto SEO

Redirect strategy: server-level, not plugin-based

Plugin-based redirects (e.g. Redirection for WordPress) are convenient but slow at scale. Every redirect requires a database query before the response. For a 2,000-product catalogue, this adds noticeable latency to crawl behaviour and can cost you crawl budget.

The correct architecture: implement redirects at the server level (Nginx, Apache, or your CDN layer) using a flat redirect map. The plugin layer becomes a fallback for edge cases. WP Engine, Kinsta, and most managed WooCommerce hosts support this natively.

  • Bulk-import the URL map
    If using server-level: generate the redirect block from your URL map spreadsheet. If using plugin-based: bulk-import via CSV (Redirection plugin supports this).
  • Use 301s, not 302s
    302 is temporary and doesn't pass equity. 301 is permanent and does. Almost every product/collection redirect should be 301.
  • Redirect www and non-www, http and https
    Pick one canonical (usually https://www. or https://). Force-redirect everything else to it. Don't rely on the new platform's defaults — verify.
  • Test in staging
    Before go-live, run a crawler against the staging environment with the redirect rules active. Verify every URL in the map resolves to its target with a single 301 hop, not a chain.

Schema continuity for product pages

Shopify themes inject Product + Offer + AggregateRating schema automatically. WooCommerce does not, by default — you'll need a plugin (RankMath, Yoast SEO Premium, or Schema Pro) or custom implementation.

On launch day, every product page should have at minimum: Product, Offer (with price + currency = CAD), Brand, and Description. AggregateRating if you have reviews; SKU if applicable. Test 3–5 representative product pages with Google's Rich Results Test before announcing go-live.

Go-live day checklist

  • Submit new sitemap to GSC immediately
    GSC will start re-crawling within hours. Old sitemap stays live for ~7 days post-migration so Google can re-discover URLs.
  • Verify robots.txt
    New site should allow crawling. The most common day-1 mistake is forgetting to remove the staging-environment Disallow: / rule.
  • Force-recrawl high-value pages
    Top 50 commercial-intent URLs: submit each via GSC URL Inspection → Request Indexing.
  • Check the canonical situation
    Every product page should canonical to itself. Common bug: WooCommerce + duplicate-content plugin combinations canonicaling to a parent category.
  • Test 3 redirect chains
    Pick 3 random old URLs. Verify each resolves to its new URL with exactly one 301, not two.
  • Submit all hreflang variants
    If you have French + English Canadian variants, verify hreflang annotations on launch day.

30-day post-launch monitoring plan

Migration impact shows up gradually. Track these metrics daily for the first 14 days, weekly for the next 16. Anything outside expected variance gets investigated within 24 hours.

MetricWhere to checkExpected behaviourAction threshold
Total impressions (GSC)Performance → Last 28 days vs previousStable to +5%Investigate at -10%
Total clicks (GSC)Performance → Last 28 days vs previousStable to +5%Investigate at -10%
404 countGSC → Pages → Not foundClimbs day 1–7, drops by day 14Investigate if growing past day 14
Indexed pagesGSC → Pages → IndexedClimbs steadily for 28 daysInvestigate if flat
Core Web Vitals (CRUX)GSC → Core Web VitalsStable to improvingInvestigate at any regression
Top-50 keyword rankingsRank trackerVolatility week 1, recovery weeks 2–4Investigate any sustained drop > 3 positions

Frequently Asked Questions

Operator questions about Canadian SEO-safe migrations.

Migration support

Planning a migration?

We'll review your migration plan, build the URL map and redirect strategy, and own the SEO continuity layer through launch.