folder_open Analytics & Attribution

Google Tag Manager setup checklist for UK lead-gen sites

Martin Marinov Martin Marinov
18 min read
Topics google-tag-manager-ukconsent-mode-v2enhanced-conversionsform-event-deduplicationdata-layer-contract

A Manchester growth lead opens GA4 on a Tuesday, then Google Ads, then HubSpot. The enquiry counts do not match. One dashboard says 41 form submits last week. Ads claims 67 conversions. CRM shows 29 new contacts, and four of those are the same person hitting submit twice on a slow mobile form. Nobody is lying. The container is.

That is the job of a Google Tag Manager setup checklist for UK lead-gen sites: not a catalogue of tags you could theoretically fire, but a scored audit of whether your events survive a redesign, a cookie banner, a SPA handoff, and a Performance Max campaign that is already eating most of the search budget. Failing does not look like a red error in Preview. It looks like booked work you cannot defend in a board pack, CPCs that keep climbing because Smart Bidding is learning from duplicates, and a 20%+ hole in conversion data that privacy tools and ad blockers already punch through.

A tactics list will tell you to “add Enhanced Conversions”. A scored audit tells you which of twelve inspectable items is actually leaking pipeline this week, and which leak you must close before you spend another pound.

Twelve GTM checks that decide whether UK lead-gen numbers can be trusted

Work through these in Preview and in the live container. You are scoring the system that feeds Google Ads, Meta, GA4, and the CRM, not the beauty of the workspace names. Each item is something you can inspect before Friday. If you cannot prove it, it is not a pass.

Audit scorecard

  1. One GTM container, one data layer contract Inspect the site source and G

    One GTM container, one data layer contract Inspect the site source and GTM Admin. Lead-gen properties in London, Leeds, and Glasgow still ship two containers from a theme plus a freelancer leftover. Good looks like a single web container, a written dataLayer schema (event name, form_id, lead_type, value in GBP), and no gtag.js sprinkled beside GTM. A fail costs you double-counted conversions and a bidding model that thinks a boiler quote form is twice as valuable as it is.

  2. Consent Mode v2 actually gates ads tags UK traffic hits a CMP first

    Consent Mode v2 actually gates ads tags UK traffic hits a CMP first. Open Tag Sequencing and the consent initialization tag. Good looks like consent default set before GTM loads, ads and analytics tags waiting on ad_storage / analytics_storage updates, and a test where rejecting cookies stops Google Ads and Meta pixels from firing. A fail is the banner that looks compliant while conversion tags still fire, or the opposite: nothing fires after accept, so Smart Bidding starves.

  3. Form success is an event, not a thank-you URL guess Trigger on a dataLay

    Form success is an event, not a thank-you URL guess Trigger on a dataLayer push after a successful submit (or a unique confirmation DOM that cannot fire on validation errors). Thank-you page path triggers break the moment a developer ships a modal, HubSpot embed, or Typeform. You will see inflated Google Ads conversions and empty CRM rows. Good looks like generate_lead or form_submit with form_id, once per successful send, with a 30-second or session-level tag firing limit.

  4. Click-to-call and WhatsApp are first-class leads UK service and B2B site

    Click-to-call and WhatsApp are first-class leads UK service and B2B sites still book work on tap-to-call, especially on mobile (most paid clicks already arrive there). Inspect tel: and wa.me clicks as separate events with a conversion value you actually believe. If call clicks fire on every footer tap including accidental ones, Ads will happily optimise for pocket dials. Deduplicate against form submits from the same session. Use a session-scoped JS variable that sets a flag on generate_lead; add a trigger exception to the call_click tag so it does not fire if that flag is true in the same session.

  5. Google Ads conversion tags live only in GTM Search the live HTML and the

    Google Ads conversion tags live only in GTM Search the live HTML and the Ads UI for a parallel global site tag. Duplicate conversion actions (one from GTM, one from the tag in Ads, one from a landing-page plugin) are the classic UK account leak when an agency “just added the snippet”. Good looks like one primary conversion per lead type, Enhanced Conversions wired with hashed email from the data layer, and secondary conversions marked so they cannot steal bidding.

  6. Meta and Google do not both claim the same click as two primaries You ca

    Meta and Google do not both claim the same click as two primaries You can send both platforms the event. You cannot let last-click in two UIs become the board number. Check event names, event IDs for deduplication if you also run a server or Conversions API path, and that Meta’s lead event is not also mapped as a Google Ads conversion via a messy import. Last-click already double-counts across channels; a messy container makes it worse. Good looks like: one primary conversion in Google Ads per lead type; the matching Meta event set to Standard event only, not also imported into Ads via the Google-Meta integration; event IDs passed from GTM matching those in your CAPI payload so the platform deduplicates server and browser fires.

  7. Triggers survive redesigns and SPAs CSS-class triggers die the first tim

    Triggers survive redesigns and SPAs CSS-class triggers die the first time a Bristol web team restyles a button. History Change plus a dataLayer contract survives Next.js and WordPress rebuilds. Preview a route change without a full load. If GA4 page_view doubles, your SPA is inflating sessions and your funnel looks healthier than booked work.

  8. UTM and click IDs land in the data layer, not only the URL gclid, wbraid

    UTM and click IDs land in the data layer, not only the URL gclid, wbraid, gbraid, fbclid, and UTM fields should persist into hidden form fields or a first-party cookie your CRM can read. Otherwise a Manchester SaaS demo booked after a second session looks like “direct”. Build links with a UTM link builder and confirm the values survive the thank-you hop.

  9. GA4 events match the GTM names, not a parallel amateur schema If GTM pus

    GA4 events match the GTM names, not a parallel amateur schema If GTM pushes generate_lead and GA4 also auto-collects form_start plus a custom “FormFilled”, you will argue about which number is real. One naming convention, registered custom dimensions for lead_type and value, and debug view proof on staging and production. Mark conversions in GA4 only for events you would still count if Ads disappeared tomorrow.

  1. 0 Landing pages are fast enough that tags finish before bounce Fewer than six in ten origins pass all three Core Web Vitals (Google CrUX, 2025). A heavy CMP plus eight marketing pixels on a Glasgow landing page means the conversion tag never fires for the people who convert fastest. Check INP and LCP on the actual enquiry template with a Core Web Vitals checker. If the form is below a slow hero video, you are measuring a different population than the one that booked.

  2. 1 Preview, environments, and publish rights are not a free-for-all Look at Versions. If five people publish from Live with no workspace, last week’s “quick pixel” is still live. Good looks like Dev / Staging / Live environments, a named version note (“stop double form fire on HubSpot”), and a two-person rule for anything that hits Google Ads conversion actions. This is boring. It is also how you stop a Friday publish from poisoning bidding over the weekend.

  3. 2 You can reconcile GTM, Ads, GA4, and CRM within a known band Pick seven days. Count unique successful form events in GTM (or BigQuery), primary conversions in Google Ads, GA4 key events, and new CRM contacts with a paid source. A healthy UK lead-gen stack disagrees by a modest band because of consent, view-through, and delayed CRM create. A 2x gap is a container problem, not “attribution is dead”. Fix the gap before you scale Performance Max.

If form fields look complete in GTM but people still abandon, the leak is on the page, not the tag. Watch the same enquiry template in HeyLead Insights for scroll depth, rage clicks on the consent bar, and fields they never reach. Tracking a broken form perfectly still books nothing.

When the container itself is the mess, a focused Google Tag Manager and events cleanup is usually cheaper than another month of bidding on duplicate leads.

How to mark pass, weak, or fail without a philosophy debate

Use three marks only. Pass: you demonstrated it in Preview and on a live conversion in the last 14 days. Weak: it works on desktop Chrome and fails on iOS, or it works on one form and not the newsletter modal. Fail: you cannot prove it, or two systems disagree by more than you can explain with consent.

Score the twelve items. Do not average them into a vanity 8/12. Sequence the fails. Tracking integrity before budget. Intent (which event is the primary conversion) before new campaigns. Speed and consent before new creative tags. You do not add a TikTok pixel to a container that already double-fires generate_lead.

A Birmingham B2B team had Google Ads at roughly 4x reported ROAS while CRM said the paid pipeline was thin. The mechanism was a thank-you trigger plus a HubSpot listener both marked primary. They paused the URL trigger, kept the dataLayer event, and turned Enhanced Conversions on with the email field. Reported conversions dropped 37%. Booked demos did not. Bidding calmed within 11 days because the remaining signal was a real person.

Weak items that sit on mobile-only forms belong in week one, not the backlog. Mobile already takes most paid clicks and converts worse when tags and pages lag. If your desktop pass rate is perfect and your iPhone fail list is long, your “account average” is a lie.

DIY tools for this audit

Check the plumbing while you score

Not sure where your funnel leaks?
Get a free marketing audit - we review your search, ads, and landing pages and send back what to fix first.
Get a free audit

Google Tag Manager setup checklist for lead-gen sites in the UK

Thirty days of GTM repairs that keep Google Ads and Meta honest

This is not a new measurement strategy. It is an ordered repair list. You do not rebuild the taxonomy on day one if duplicates are still live. You do not negotiate MMM while gclid never reaches HubSpot.

30-day fix plan

  1. Days 1-3: inventory every tag that fires on a successful enquiry. Screenshot Ads conversion actions, Meta events, GA4 key events, and CRM create. Circle duplicates. Unpublish anything you cannot name.

  2. Days 4-8: write the dataLayer contract (event, form_id, lead_type, value GBP, email hash source). Implement generate_lead once. Add firing limits. Kill thank-you URL triggers on pages that also push the event.

  3. Days 9-12: fix Consent Mode v2 sequencing. Test accept, reject, and partial. Confirm ads tags stay blocked on reject. Confirm they fire on accept without a second page load.

  4. Days 13-16: persist gclid, UTMs, and lead type into hidden fields. Send a test enquiry from a tagged Google Ads URL on iPhone Safari. Confirm the CRM record.

  5. Days 17-22: turn on Enhanced Conversions from GTM, not a second snippet in Ads. Deduplicate Meta if you use a browser pixel plus CAPI. Mark one primary per lead type.

  6. Days 23-30: reconcile seven days of unique events versus Ads versus CRM. If the gap is still wild, do not raise budget. Recheck SPA page_view, call clicks, and the CMP. Only then re-enable Smart Bidding on the cleaned primary.

Edinburgh teams that skip days 1-8 and jump to “server-side GTM” usually clone the same duplicate into a more expensive hole. Server-side is a later hardening step, not a substitute for a single browser event you can defend.

If paid search still lands on a homepage with a generic H1, fix the page after the container, not instead of it. Run the H1 checker on the enquiry URL your ads actually use. Clean conversion setup on a mismatched landing page still trains bidding on the wrong intent.

Patterns we see in UK containers

Google Ads celebrating 67 conversions in a week while HubSpot creates 29 contacts is a pattern we keep seeing: the extra fires are often the same form on validation plus a leftover thank-you tag from a theme update.

Consent reject still letting the Ads tag through is another: Smart Bidding looks brilliant until the tag is blocked properly and CPA goes up, then settles, because the remaining leads are real.

Prefer to just ask? Message Martin directly on WhatsApp: Chat with us on WhatsApp

Google Tag Manager setup checklist for lead-gen sites in the UK

FAQs

Do we need a separate GTM container per UK domain?

Use one container per distinct site or app. A marketing site and an app subdomain can share a container if the dataLayer contract is identical. Do not share one container across unrelated brands just to save a login. Cross-domain tracking is a linker and cookie conversation, not a reason to dump every pixel into one workspace.

Should Google Ads tags sit in GTM or in the Ads UI?

Put them in GTM so consent, sequencing, and form logic stay in one place. Keep a single primary conversion per lead type in the Ads account. The moment someone pastes a second global site tag in the header “just in case”, you are back to double counting.

What is a reasonable mismatch between Ads and the CRM?

Expect some gap from consent, delayed CRM creates, and people who submit then never become a contact. A small, stable band you can explain is fine. A 2x gap week after week is almost always duplicate tags, thank-you triggers, or call clicks without a throttle. Do not raise spend until that band is boring.

Is server-side GTM worth it for UK lead gen right now?

No. First get one client-side generate_lead, Consent Mode v2, Enhanced Conversions, and click IDs into the CRM. Server-side helps with resilience and some signal quality after that. Starting server-side on a messy browser container copies the mess into Cloud Run and a larger invoice.

How does this relate to Performance Max?

PMax will happily optimise to whatever you mark primary. If that primary is a duplicate or a newsletter modal, it will scale the wrong thing. Clean the conversion, then let PMax work. “Performance Max drives the bulk now” is only useful when the bulk is a qualified enquiry.

Putting it to work

Execution sprint

This week

  1. Pull 30-90 days of performance for google tag manager setup checklist for lead gen sites (Search Console, ads, CRM, or call logs - whatever you have).
  2. Flag the top leak: wrong intent, weak page, slow response, or dirty conversion tracking.
  3. Ship one fix on the highest-traffic money path (page, campaign split, or response rule).
  4. Run the free tools below on that same URL or account and log the findings.

Next 30 days

  1. Expand the fix to the next one or two money paths only after the first one shows cleaner bookings.
  2. Align creative, keywords, or content with the same offer the page now states.
  3. Review booked outcomes weekly; cut anything that still only produces unqualified volume.

This week

  • Export live tags and conversion actions; highlight every form-related fire.

  • Submit one real test lead on mobile with a tagged URL; trace GTM, Ads, GA4, CRM.

  • Turn off any thank-you URL trigger that also has a dataLayer success event.

  • Confirm consent reject blocks ads storage in Preview.

  • Write the four-field dataLayer contract and share it with whoever owns the site.

Next 30 days

  • Ship Enhanced Conversions from GTM only.

  • Persist gclid and UTMs into the CRM.

  • Reconcile a full week of unique events versus booked contacts.

  • Only then change bids or rebuild PMax.

Pull the last 14 days of primary Google Ads conversions and unique CRM contacts from paid, and do not leave the sheet until you can name the GTM tag responsible for every extra conversion. If that reconciliation is the work you do not want on the marketing team’s plate, HeyLead can own the container, consent sequencing, and event contract so bidding stops learning from duplicates. Chat with us on WhatsApp

Work with HeyLead
Free marketing audit, or reach Martin directly:
Get a free audit Connect on WhatsApp · martin@heylead.com