← work
Ecommerce · Apparel & props · [CHECK] · GTM, GA4, Shopify custom pixel, Google Ads

GTM & GA4 Migration for a Shopify Retailer

55
dead legacy tags removed
3→1
GA4 properties consolidated
~57%
orders captured by best property, before
problem:

The client is a growing Shopify-based apparel and props retailer selling direct-to-consumer online. Like many fast-scaling Shopify brands, its tracking setup had accumulated years of patchwork fixes and one-off integrations — until a platform-level change forced a full reckoning.

  • A hard migration deadline. Shopify announced it was retiring the order-confirmation-page method the client relied on to load Google Tag Manager and fire Google Ads conversion tags, with a fixed cutoff date. Miss it, and every purchase conversion signal to Google Ads would go dark overnight.
  • Fragmented, unreliable reporting. Order data was split across three separate GA4 properties instead of one, and even the best-performing property was capturing only about 57% of actual orders — meaning most of the picture stakeholders relied on for decisions was simply missing.
  • Inflated funnel metrics. Add to Cart and Begin Checkout values were reporting numbers far beyond what the store's real order volume could support, undermining trust in funnel data at every stage above purchase.
  • Container bloat and compliance risk. Fifty-five dormant Universal Analytics tags, left over from a UA-to-GA4 migration years earlier, were still sitting in the live GTM container — adding load-time weight and room for accidental misfires, with no consent management platform in place as a safety net.
what i built:

We started with a full container audit rather than a quick patch job — the deadline made speed tempting, but rebuilding on a shaky foundation would have just relocated the problem. The audit surfaced the full scope of the 55 dead Universal Analytics tags and confirmed exactly how the order-confirmation-page tracking was wired, which parameters it was passing, and where the ecommerce value-mapping bug was introduced.

With the root cause identified, we designed a Shopify custom pixel to replace the deprecated loading method outright, paired with a rebuilt GTM tag and trigger structure to receive it. Rather than porting the existing bug forward, we corrected the value-mapping logic for Add to Cart and Begin Checkout events in the same build, so the new pixel would report checkout-stage values that actually reconciled with real order totals.

Because the site had no consent management platform, the pixel's consent state was explicitly set to unconditional "granted" rather than left to default — a deliberate, documented choice rather than an oversight, and one flagged for revisit if the client ever adds a CMP.

Before flipping the switch, we ran the new pixel through GTM's Preview mode against a series of live test checkouts, comparing every fired event and parameter against the Shopify admin's actual order record line by line. Only after that reconciliation matched did we schedule the cutover, timed to land ahead of Shopify's hard deadline rather than against it.

Alongside the migration, we removed the 55 dormant Universal Analytics tags from the container and consolidated the tracking logic that had been split across three GA4 properties onto a single, coherent measurement plan — so that going forward, every order has one canonical source of truth instead of three competing, partial ones.

BEFORE
  Order-confirmation-page pixel
    -> 3 fragmented GA4 properties
       -> ~57% of orders captured

AFTER
  Shopify custom pixel + GTM
    -> Single GA4 property
       -> Corrected checkout values

# The deprecated setup's fragmented tracking (top) versus the consolidated
# measurement plan after migration (bottom).
outcome:
  • Migration spec built and the replacement pixel deployed with the live container ID ahead of the Shopify cutoff, closing the risk of Google Ads conversion tracking going dark.
  • The ecommerce value-mapping bug behind the inflated Add to Cart and Begin Checkout numbers was corrected in the same build, rather than being ported forward into the new pixel.
  • Fifty-five dormant Universal Analytics tags were removed from the live container, and the three-property GA4 setup was consolidated onto a single measurement plan.

[CHECK] Still to confirm: the post-migration order-capture rate (replacing the ~57% baseline), the corrected Add to Cart/Begin Checkout values against real order totals, and confirmation the new pixel held through a live checkout after cutover. Once those numbers are in hand, this section gets the full before/after comparison.

Want fragmented reporting or a shaky platform migration cleaned up like this? Get in touch to talk through a tracking audit for your own store.

[CHECK] [screenshot] the server container