Digital Marketing
How to Migrate to Shopify From a Custom CMS (Without Losing Rankings)
A lot of migration guides help you pick a platform. Almost none of them explain what keeps your rankings alive after launch.
I ran this on a 36-storefront ecommerce brand moving off a custom CMS. I managed all 36 Shopify stores end to end, not audited after the fact. Full story here: Shopify Migration Without Losing Rankings.
Still deciding whether Shopify is even the right platform? I covered that separately: Shopify vs WooCommerce.
This is the technical side. What actually has to happen once the decision is made.
1. URL mapping at scale
Every legacy URL needs an explicit destination. No wildcard shortcuts. No “redirect everything to the homepage.” I mapped every legacy URL to its new destination in Google Sheets, then used Apps Script to automate matching, pattern transformations, and validation across thousands of rows. Nobody does this by hand and gets it right.
2. hreflang across multiple properties
When your regional variants live on genuinely separate properties, not subfolders on one domain, sitemap-based hreflang isn’t enough. Each page needs the actual HTML tags in the head, pointing to every regional variant and pointing back. Skip this and Google loses the relationship between your regions, even if every individual site migrates cleanly on its own. I re-implemented and validated hreflang across the entire cluster on the new platform, so that relationship map never broke.
3. Ecommerce tracking breaks differently on Shopify
Shopify hosts checkout separately from the rest of your site. A GTM container can track everything else on the domain perfectly and still miss checkout entirely, because that layer needs its own setup through Shopify’s native tracking, not one inherited from the old CMS. Nothing breaks visibly. Revenue attribution just goes quiet until someone notices the numbers don’t match. I rebuilt tracking through Shopify’s native setup instead of carrying over the old GTM config, so checkout data never went dark.
4. Titles and meta live in the sheet. Content doesn’t.
Titles and meta descriptions are short enough to manage as columns in a spreadsheet, one row per page. Content isn’t. Long-form SEO copy doesn’t work crammed into a cell, so years ago I built a Google Sheets formula that auto-generates a separate Google Doc for each collection page, tied to that page’s URL slug. Whoever wrote the page found their doc already waiting, matched to the right URL. Metadata belongs in a spreadsheet. Content belongs in a document.
5. JSON-LD schema, Shopify’s blind spot
A Shopify theme doesn’t automatically output the structured data a site needs. Product, breadcrumb, organization, whatever the page calls for. There’s no theme setting that does it for you. I didn’t assume the theme handled it. I checked every schema type manually after cutover and added what was missing myself.
6. Redirects: speed is everything
After cutover, I checked Search Console daily. Coverage reports, crawl errors, redirect behavior. Fixed the same day something looked off. Batch your redirects and handle them slowly instead, and your old URLs sit in limbo while traffic quietly drains out from under you.
7. Verifying redirects before Google does it for you
Waiting for Search Console to surface crawl errors one at a time is too slow on a large site. I built a second Apps Script tool that checks URL status codes straight from the sheet, confirming a clean 200 across the entire mapped list right after launch. Search Console tells you what Google already found. This tells you what broke, immediately.
Over time, this became my migration checklist: the URL mapping sheet, the redirect verification script, and the auto-doc generator for content. If you want a copy, DM me or subscribe below.