Case study
From a sprawling custom CMS to a focused Shopify store
- 3,847 → 206,849Search Console clicks in 28 days
- 2.41 → 8.76Meta Ads ROAS, Dec 2025 vs Sep 2026
- 1.21 → 8.33Google Ads ROAS, Dec 2025 vs Sep 2026
- 240 of 240tracked keywords in Google’s top 10, 86 in positions 1–3
- Industry
- Jewelry e-commerce: rings, necklaces, earrings and personalized gifts
- Market
- United States
- Channels
- SEO, Meta Ads, Google Ads
- Platform
- Custom CMS → Shopify (launched May 12, 2026, same domain)
- Timeframe
- January–December 2026 engagement, three quarters complete
The challenge
The store’s custom CMS exposed far more URLs than the business needed. The starting crawl discovered 52,684 URLs, and 47,948 of them were unwanted route variants: 40,178 faceted URLs, 5,638 tag indexes and 2,132 duplicate pagination variants. That is a crawl inventory, not a count of indexed pages; Search Console supplied the indexation warnings. Product pages competed with weaker variants. Google Ads held 19 legacy campaigns with overlapping names, fragmented budgets and incomplete purchase tracking, and only 4 delivered in the baseline month. Meta’s six sales campaigns reported incomplete purchase value, so marketing reports couldn’t be tied to orders.
What we did
- Quarter one, measurement: one order-value specification in USD; Meta Pixel and Conversions API deduplicated with matching event IDs; one primary Google Ads purchase action with transaction IDs and dynamic values, so a duplicate GA4 import never became a second primary action. Test orders covered discounts, currency, failed checkouts and repeat events.
- Quarter one, the URL map: products, useful collections, editorial content and route variants sorted, using revenue pages, external links and search landing pages. Pages with distinct useful content stayed discoverable; genuine duplicates were consolidated, not all redirected to the homepage.
- Quarter two, the migration: Shopify launched on May 12, 2026 on the same domain, with 4,736 canonical URLs (3,874 product pages, 286 collections, 324 guides and 252 information pages). Equivalent old pages got permanent redirects, removed content without a successor returns a removal response, and internal links, canonicals, sitemaps, structured data and image references moved together.
- Quarter two, the ad accounts: Google Ads rebuilt around four delivering campaigns (two Performance Max, one Shopping, branded Search) on a consistent product feed; Meta organized around prospecting, catalogue sales, new collections and returning shoppers.
- Quarter three, growth: collection copy, product information, internal links and buying guides improved against a fixed list of 240 keywords, and paid budgets grew only after purchase measurement was repaired.
Results
- Search Console, web search, 28 days each (Dec 4–31, 2025 vs Sep 20–Oct 17, 2026): clicks 3,847 → 206,849, impressions 447,913 → 10,247,981, CTR 0.9% → 2% and average position 22.8 → 7.9.
- Ahrefs Rank Tracker, Google US desktop, October 17, 2026: all 240 tracked keywords in the top 10, 86 in positions 1–3 and 154 in positions 4–10. This is the fixed tracked set, not every query the store appears for.
- Meta Ads (Dec 2–31, 2025 vs Sep 1–30, 2026): ROAS 2.41 → 8.76 on spend of $9,847.63 → $48,736.29; purchases 102 → 1,897; cost per purchase $96.55 → $25.69.
- Google Ads (same periods): ROAS 1.21 → 8.33 on spend of $11,483.79 → $39,847.63; purchases 62 → 1,473; cost per purchase $185.22 → $27.05.
- Site size: 52,684 discovered URLs → 4,736 canonical Shopify URLs, about 91% smaller.
Data source
Google Search Console (Performance report, web search), Ahrefs Rank Tracker, Google Ads and Meta Ads Manager campaign reports. Money in USD; ROAS is attributed merchandise value divided by ad spend, not profit.
Screenshot (redacted)
Six report screenshots, before and after: Search Console, Google Ads and Meta Ads. Account names are hidden.
What’s next
The fourth and final quarter of the January–December 2026 engagement.
How to read these numbers: the December baseline had incomplete purchase reporting, and both the tracking repair and the bigger budgets shape the September reports, so the ROAS change is reported attributed performance, not a like-for-like comparison of profitability. Meta and Google can both claim the same order (427 September orders were counted by both), so their purchases and values can’t be added up as store revenue. The two Search Console periods differ in season and catalogue, so they don’t isolate the migration as the only cause.



















































