The brief
A mid-market fashion retailer with 50,000 SKUs, 1.2M monthly organic sessions and a legacy Magento 1 stack came to us with a brutal deadline: re-platform to a modern headless stack in 6 weeks, before Magento 1 lost PCI compliance support. The non-negotiable constraint: no traffic loss during or after migration.
The pre-migration audit
We spent the first week cataloguing every URL, every redirect, every canonical, every schema, every meta tag on the existing site. We exported 50k product URLs, 200k category and filter URLs, and 5k editorial URLs into a spreadsheet that became our migration source of truth. Without that audit, the migration would have lost 30% of traffic from URL mismatches alone.
The new architecture
Headless commerce: Shopify as the commerce backend, Next.js on Vercel as the storefront. Edge-rendered product pages with ISR for inventory updates. AVIF images served from Cloudflare R2. Algolia for search. The new architecture targeted 1.2s LCP at the 75th percentile, down from 4.8s on the legacy stack.
URL strategy: keep what works
We mapped every legacy URL to a new URL. 80% kept the same structure. 15% had minor changes (lowercase slugs, removed trailing slashes). 5% restructured. Every changed URL got a 301 redirect to its new location. The redirect map was built in week 2 and tested in staging weekly until launch.
Schema migration
We rebuilt every schema type from scratch in the new stack. Product, Offer, AggregateRating, BreadcrumbList, Organization. Validated in CI. Verified in Rich Results Test for every template before launch. Schema is the most-broken thing in migrations — it's also the easiest to verify if you ship validation in CI.
Launch day
We launched at 3am on a Tuesday — the lowest-traffic window in the analytics data. We monitored Search Console, Bing Webmaster, Cloudflare logs and our own RUM dashboard in real time. The first 24 hours saw a 6% traffic dip — expected, as Google re-crawled the changed pages. By day 5, traffic was back to baseline. By day 14, traffic was 12% above baseline thanks to the LCP improvement.
Post-launch monitoring
We monitored daily for 30 days, then weekly for 90 days. We caught and fixed 4 issues that the pre-launch testing missed: a broken hreflang on the French market, a missing schema on the sale category template, a 302 redirect that should have been 301, and a sitemap that excluded 2,000 newly-added products. Each was fixed within hours of detection.
Results after 6 months
Organic sessions: +34% vs pre-migration baseline. Mobile conversion rate: +28%. Average page load time: -68%. The CFO was happy. The CTO was happy. The SEO team was exhausted but vindicated. Migrations don't have to lose traffic — they just have to be planned obsessively.
The lessons
Audit before you architect. Build the redirect map early. Test the schemas in CI. Launch in a low-traffic window. Monitor relentlessly for 30 days. None of this is glamorous, but it's the difference between a migration that grows the business and one that craters it.