Skip to main content
ga4-auditga4dtcanalyticsserver-side-tracking

GA4 Audit Checklist: 12 Issues We Find First in DTC Accounts

A GA4 audit for a DTC brand has to answer one question before any other: does GA4 see what Shopify sees? It almost never matches on the first try. Here's the 12-item checklist we run in the first 90 minutes — reconciliation, measurement-ID drift, server-side dedup, iOS 18+ client_id, Klaviyo overlap — and how to tell if you need a full audit, a re-config, or just monitoring.

Lev Sedlov
CTO
11 min read
Two translucent frosted-glass ledgers side by side, one emerald-lit slightly fuller than the other, evoking the gap between Shopify orders and what GA4 actually records.

A GA4 audit checklist for a DTC brand should answer one question before any other: does GA4 see what Shopify sees? On a typical clean-beauty or fashion brand GA4 audit, the first reconciliation check almost never matches on the first try. The gap between GA4-reported conversions and Shopify-reported orders is usually meaningful — operator-reported ranges commonly fall in the 15-30% band, with Littledata's documented Shopify-vs-GA4 discrepancy reference covering the structural reasons (ad blockers, fired-after-checkout race conditions, currency conversion drift) and Analytico's breakdown of 7 data discrepancies covering the recurring fixable causes (via littledata.io, analyticodigital.com). The remaining 12 issues in the checklist are the ones that explain where the gap came from.

This is the 12-item GA4 audit we run in the first 90 minutes of any GA4 + tracking setup engagement. It catches the issues that matter; the remaining edge cases are specific to subscription brands, multi-currency stores, and Klaviyo-paid attribution overlap.

TL;DR

Key takeaways

  • The first reconciliation check (GA4 conversions vs Shopify orders) almost always reveals a 15-35% gap on first audit.
  • 12 issues recur across DTC accounts. Half are configuration mistakes; half are platform-specific gotchas (Shopify Checkout Extensibility, iOS 18+ ATT, server-side tagging gaps).
  • A well-configured GA4 reconciles to Shopify within 5-8% on most accounts. Higher gap usually means tracking is degraded, not GA4 is "wrong."
  • The full audit takes 90 minutes if you know where to look. The fixes typically take 1-2 sprints of dev work.

Why the GA4 audit matters specifically for DTC

A DTC brand spends $50K-$500K/month on paid media that depends on GA4 + downstream reporting for attribution decisions. When GA4 sees 22% fewer purchases than Shopify recorded, the agency optimizes Meta and Google campaigns toward a corrupted signal. Audience seed lists get built from incomplete conversion events. Smart bidding makes decisions on the wrong revenue. The downstream cost of a degraded GA4 is real money, not a hygiene issue.

A GA4 audit has to start with one question — does GA4 see what Shopify sees? — before anyone touches a configuration setting.

Marketing Bar

A common audit pattern: a clean-cosmetics brand presents a large GA4-Shopify gap. Three typical underlying causes show up together — (1) the checkout.liquid template hasn't been migrated to Checkout Extensibility, so post-purchase events fire from a stale context, (2) the GA4 measurement ID has been overwritten by an older Universal Analytics snippet a previous freelancer left in, and (3) the post-iOS-18 client_id propagation is broken for in-app browser sessions. Fixing the three is a sprint of work. Reported attributed revenue across Meta and Google Ads lifts meaningfully on the same spend once the bidders see the full conversion volume.

The 12-item GA4 audit checklist

Reconciliation check: GA4 conversions vs Shopify orders

Pull last 30 days. GA4 → Reports → Monetization → Ecommerce purchases → Total purchases. Compare to Shopify → Orders → filter to date range → count. Acceptable gap: 5-8%. Above 10%: investigate. Above 20%: tracking is degraded. (Some practitioners argue a 10-12% gap is normal on accounts with high ad-blocker share; 20%+ is consistently flagged as the threshold where the fix is structural, not noise, via gropulse.com.) This is the only number that matters as the headline. Everything else explains it.

Measurement ID consistency

GA4 → Admin → Data Streams → Web → confirm the Measurement ID. Then check the Shopify checkout pixel (Customer Events), Shopify theme.liquid (remove legacy Universal Analytics snippets), and any third-party apps with their own GA4 integration (Elevar, Stape, Klaviyo SMS). Mismatched or duplicate Measurement IDs cause event duplication or loss. We find this on roughly 40% of audits.

Enhanced Measurement settings

GA4 → Admin → Data Streams → Web → Enhanced measurement. Confirm page views, scrolls (90% threshold), outbound clicks, site search (if present), video engagement, file downloads, and form interactions (for /ppc-audit, /seo-audit, /contact). Most accounts have at least 2 of these toggled off accidentally.

Conversions configured correctly

GA4 → Admin → Events → Mark as conversion. Required for DTC: purchase (always — fired from Shopify Customer Events), add_to_cart, begin_checkout, generate_lead (for form submits), plus custom conversions per your mapping. If purchase isn't marked as a conversion, downstream reporting in Google Ads is broken.

Server-side vs client-side event coverage

For brands using Stape, Elevar, or a GTM server-side container: check that critical events fire from BOTH client (browser pixel) and server (CAPI / Measurement Protocol), and that GA4's dedup logic matches them on event_id. We see roughly 30% of accounts with server-side tagging set up but not actually firing the dedup match — net effect, GA4 double-counts a portion of conversions.

Cross-domain measurement (if applicable)

If the customer path crosses marketing-bar.com → checkout.shopify.com → thank-you, cross-domain tracking must be configured (GA4 → Admin → Data Streams → Configure tag settings → Configure your domains). Without it, sessions split mid-checkout and attribution lands on "direct" or "referral" instead of the original source.

iOS 18+ client_id propagation

Post-iOS-18, client_id should be set on a first-party cookie on your subdomain, not via Google's third-party cookie. Check DevTools Network tab: the _ga cookie should be Domain=.yourbrand.com, not Domain=.google-analytics.com. If _ga is third-party in Safari, sessions are dropping at a higher rate than they should.

Klaviyo flow event reconciliation

Klaviyo flow opens / clicks / conversions vs GA4 email-channel revenue should approximately match. A common pattern: Klaviyo reports $40K from flows, GA4 attributes $12K to "email" — UTM parameters aren't applied to Klaviyo links, so GA4 attributes those sessions to "direct." Fix: Klaviyo → Account → Profile → UTM Tracking → set defaults across flows.

Meta CAPI dedup check

Meta CAPI events (server-side from Shopify or your sGTM container) should deduplicate against the GA4-tracked browser pixel events on event_id. Check Meta Events Manager → Test Events to confirm both pixel and CAPI Purchase events arrive with matching event_ids. If they don't match, you're double-counting purchases at the platform level even if GA4 sees them correctly.

Shopify Checkout Extensibility migration status

Shopify is deprecating checkout.liquid through 2026. If your brand hasn't migrated, post-purchase tracking context is unstable and server-side events from old checkout.liquid often fire with wrong order data. Check: Shopify Admin → Checkout → Customize checkout. A "Migrate to checkout extensibility" prompt means you haven't migrated — and the migration is engineering work, not a config toggle.

Subscription brand event coverage

If the brand sells subscriptions via ReCharge, Skio, Bold, or Shopify-native: confirm recurring orders fire purchase events in GA4. Most subscription integrations send the first-order Purchase event and silently drop the recurring orders. Check: GA4 → Explore → group purchases by is_subscription. Near-zero recurring count with hundreds of active subscribers = missing events.

UTM tagging hygiene

Last but high-impact. Audit: all paid campaigns carry utm_source / utm_medium / utm_campaign; email links from Klaviyo / Postscript carry UTMs; organic social links carry UTMs; affiliate / influencer links carry distinct UTMs per partner. GA4 channel attribution depends entirely on UTM hygiene — bad UTMs = "direct" traffic inflation.

Frosted-glass inspection rig running an emerald scan-line down a stack of twelve glass slides, a few flagged, evoking a 12-point audit surfacing the broken items.

Common failure modes (the meta-pattern)

Across DTC audits, the same three meta-patterns repeat:

Where this audit fits in the broader scope

The GA4 audit is one of three audits we run as part of our analytics service. The other two:

  • Meta CAPI for Shopify audit — covered in detail in our Meta CAPI for Shopify article (sibling spoke). Different scope, overlapping concerns.
  • Klaviyo attribution overlap audit — covers the Klaviyo + paid media double-count specifically.

Together the three give a complete tracking-health picture. The GA4 audit is usually where we start because GA4 sits at the center of the attribution graph for most DTC brands.

What good looks like 30 days post-audit

The shape of a successful GA4 audit cleanup: GA4-to-Shopify reconciliation moves from a double-digit gap into the low single digits (4-6% is normal), reported revenue across Meta and Google Ads lifts on the same spend because smart-bidding algorithms now see the full conversion volume, and a previously worsening CAC trend stabilizes and then improves as the bidders re-optimize against accurate data.

That's the right shape of a GA4 audit win. Better attribution → better bidder decisions → better unit economics. The audit itself is the leading indicator.

Frosted-glass gauge pair drawing level with each other under a calm emerald glow, evoking GA4 and Shopify reconciled to within a few points.

A short GA4 glossary for non-specialists

  • Measurement ID — the unique identifier (G-XXXXXXXXXX) for each GA4 data stream. Mismatched IDs across Shopify and apps cause silent event loss.
  • Enhanced Measurement — GA4's automatic event-collection toggles (scrolls, outbound clicks, video plays). Enabled by default but often broken by previous freelancers turning specific items off.
  • Conversion — an event you've explicitly marked as a goal in GA4. Different from events generally; only marked conversions flow to Google Ads for smart-bidding.
  • client_id — the unique browser/device identifier GA4 uses to stitch sessions. Set in a first-party cookie. iOS Safari aggressively shortens its lifetime if it's not on your own subdomain.
  • Measurement Protocol — GA4's server-to-server event delivery method. Used for server-side tagging via Stape, Elevar, or custom GTM containers.
  • DebugView — GA4's real-time event inspector for the development environment. Critical for verifying server-side events fire correctly before they enter the production stream.
  • BigQuery export — GA4's raw event-level data export to a BigQuery warehouse. The only way to escape GA4's UI limits and run real attribution analysis.

Three-question framework: do you need a full audit, a re-config, or just monitoring?

Most brands don't know which level of intervention they need. The diagnostic:

  1. Is the GA4-Shopify reconciliation gap above 15%? Yes → full audit. The gap means tracking is meaningfully degraded and the root cause needs investigating.
  2. Is the gap 8-15% with no obvious recent platform changes? Re-config. The fixable items are likely in items 2-6 of the checklist (measurement ID, Enhanced Measurement, conversions, server-side coverage).
  3. Is the gap under 8% and stable? Monitoring only. Set up Slack alerts on the gap, GA4-side conversion volume, and Measurement Protocol delivery success. Don't over-engineer.

Most brands skip step 1 and dive into configuration fixes that don't address the underlying tracking-layer problem. The diagnostic order matters: confirm scale of problem first, then choose intervention.

Frosted-glass three-way junction with an emerald flow choosing one of three lit channels, evoking the audit-vs-reconfig-vs-monitor decision.

Where to next

If you want the Meta-side counterpart to this GA4 audit, our Meta CAPI for Shopify guide is the deeper read. If you want our server-side tracking expertise deployed on your account, the engagement page lays out scope. If you want to start with a free PPC audit (which includes the tracking-side review), the /ppc-audit landing is the front door.

Written by

Lev Sedlov

CTO

Share