On Shopify, Google Consent Mode v2 depends on a chain. Your banner collects a choice, Shopify's Customer Privacy API stores it, and whichever route loads your Google tags turns that choice into the four consent signals. That route might be the Google & YouTube app, GTM in your theme, or a custom pixel. A break anywhere in the chain looks the same from the outside: warnings in Google Ads, odd numbers in GA4, or tags firing when they shouldn't.
This guide is Shopify-specific. On WordPress, see Consent Mode v2 not working on WooCommerce. For the basics, start with our Consent Mode v2 explainer.
Gather the evidence first (5 minutes)
- Open tagassistant.google.com and connect it to your storefront in a fresh private window.
- Before touching the banner, open the first event's Consent tab and note the "On-page default" for
ad_storage,analytics_storage,ad_user_dataandad_personalization. - Click Accept all and check for an "On-page update" on the next event.
- In DevTools › Network, filter
collectand note thegcsvalue on Google hits (G100means both denied,G111means both granted). Also note how many different measurement IDs (tid=G-…) appear. - Repeat with Reject all in a new private window.
Then match what you saw to the fixes below.
1. The consent app isn't connected to Shopify's Customer Privacy API
Symptom: the banner works visually, but Shopify's pixels behave as if nobody consented, or as if everybody did. GA4 purchases may vanish entirely, or appear even after "Reject all".
Cause: the app stores consent only in its own cookie, or its Shopify integration setting is switched off.
Fix: in the app's settings, look for the Shopify Customer Privacy API integration (names vary) and make sure it's on. Check the app's docs if you can't find it. If the app doesn't support it, that's a reason to switch; see how to choose a consent app.
2. Two systems are both setting Google consent
Symptom: Tag Assistant shows two defaults, or a default followed by conflicting updates.
Cause: the consent app's Google Consent Mode feature and another source (a GTM CMP template, a hand-written snippet in theme.liquid, or a second consent app) are all setting consent.
Fix: choose one source for Google consent states. Usually that's the consent app's built-in Consent Mode v2 setting, or its GTM template if you use GTM. Remove the others, including old snippets and the app embeds of apps you no longer use.
3. GTM in the theme loads before the default
Symptom: Tag Assistant warns that a tag read consent before a default was set. The first GA4 hit sets a _ga cookie before any click.
Cause: the GTM snippet sits above the consent default in theme.liquid, or the consent app's script loads later (for example as a deferred app embed).
Fix: make sure the default runs first. Either use the consent app's GTM template on the Consent Initialization - All Pages trigger, or place a default snippet (all four signals denied) above the GTM code, with the app sending the update.
Not sure what your store fires before consent?
Send us your URL and we'll run a free homepage pre-consent scan: which trackers and cookies load before a shopper chooses. No obligation.
Get my free scan Use the free checklist4. Google is installed twice
Symptom: two measurement IDs in the Network tab, or one ID sending two page views. Consent looks right on one set of hits and wrong on the other.
Cause: GA4 or Google Ads is loaded by the Google & YouTube app and by GTM or theme code. Usually only one route is wired to consent.
Fix: keep one route per Google product and remove the rest. If you keep the Google & YouTube app, check its own consent settings; it follows Shopify's Customer Privacy API. Duplicates also inflate your revenue (see our duplicate purchase guide).
5. The update never arrives for returning visitors
Symptom: first visit after accepting is fine, but on later pages or visits the first Google hits show G100.
Cause: the app sends the update only on the click, or Google tags fire before the app has read the stored choice.
Fix: check the app's option to apply stored consent on page load, and keep a short wait_for_update on the default so tags wait briefly for it. Test by accepting, opening a new tab in the same private window, and loading another page.
6. UK visitors aren't in the banner's regions
Symptom: no banner when you browse from the UK, and Consent Mode defaults to granted (or isn't set at all).
Cause: the banner is limited to the EU/EEA, or Shopify's customer privacy regions don't include the United Kingdom.
Fix: add the UK to the banner regions in both the app and Shopify's customer privacy settings, and check the default for UK visitors is denied. Our Shopify cookie banner guide covers the banner settings.
7. Checkout and purchase tracking ignore the storefront setup
Symptom: storefront consent looks perfect, but purchases are missing, or fire regardless of consent.
Cause: theme code (including GTM in theme.liquid) doesn't run on Shopify's checkout. Purchases come from app pixels or custom pixels, which follow their own customer privacy permission. If you load gtag inside a custom pixel, it doesn't inherit the consent states your theme set.
Fix: in Settings › Customer events, check each custom pixel's customer privacy permission matches its purpose (analytics and/or marketing). If a custom pixel loads Google tags, set the consent defaults and updates inside the pixel too; Shopify's Web Pixels documentation explains how pixels access the visitor's consent. Or let the Google & YouTube app handle checkout tracking. See GA4 not tracking Shopify purchases for the purchase side.
8. Only v1 signals are sent
Symptom: ad_storage and analytics_storage look right, but ad_user_data and ad_personalization are missing. Google Ads still warns.
Cause: an outdated app version, GTM template or hand-written snippet.
Fix: update the app or template, and map the Marketing category to all three ad signals. Our Google Ads consent diagnostics guide covers what Ads expects.
Don't forget non-Google pixels
Consent Mode only governs Google tags. Meta, TikTok and Pinterest need to be blocked by your consent app, gated in GTM, or run through Shopify app pixels that follow the Customer Privacy API. If they fire before consent, see Is your Shopify store firing Meta Pixel before consent?
Final check
| Test (fresh private window) | Expected |
|---|---|
| Land, don't click | All four signals denied by default; no _ga or _fbp; no Meta hits |
| Reject all, browse and add to basket | Still denied; nothing non-essential |
| Accept all | Update to granted; gcs=G111; one measurement ID per property |
| Return visit after accepting | Granted from the first hit |
| Test order with consent accepted | One purchase in GA4 DebugView |
Want it checked properly?
The TrackCheck Health Check is a fixed-price review for UK Shopify and WooCommerce stores: a full consent test (before choice, after "Reject all", after "Accept all", including Consent Mode v2 signals), a GA4-vs-orders reconciliation, a prioritised fix list and a recorded walkthrough, delivered in 5 working days.
See Health Check pricing Start with a free scanThis article is technical guidance, not legal advice. Platform menus change; check the vendor's current documentation if a setting has moved.