A test site that exists only to be tagged
Nothing here is real. Every element below exists so you can practice one specific technique from the GTM course without touching a client.
?gtm=GTM-XXXXXXX to this page's URL, using your own container ID. Nothing to install and nothing to commit — several people can practice here at once, each with their own container.Then open GTM → Preview and paste the full URL including
?gtm=. Leave it off and Tag Assistant connects to a page with no container on it.
Click tracking
Buttons, links and phone numbers
Four different click types, each needing a slightly different trigger. Use Preview mode to watch which built-in variables change on each one.
Click Classes, one on Click ID, and one on the data-cta attribute. The third needs a user-defined Data Layer Variable — the difference between tracking a click and tracking which click.
The one that catches people out
A form with no thank-you page
Submitting this form does not change the URL. The form hides and a confirmation appears in its place. This is how most lead generation sites behave, and it is the most common reason a conversion is never counted.
Thanks — we'll be in touch
Someone from the team will call within one business day.
1. An element visibility trigger on
#confirmation — works without touching the site's code.2. A custom event trigger on the
generate_lead push this form makes — carries the value and the service with it.Then submit the form with every field empty and see which of them fires anyway.
Event parameters
Passing value, currency and service
The form above pushes a generate_lead event carrying a value, a currency and an items array. Change the dropdown and submit again — the value changes with it.
value and currency into a GA4 event tag as parameters, then pull ecommerce.items.0.item_name out of the nested array. Registering these as custom dimensions in GA4 is what makes them visible in reporting rather than just collected.
Scroll and visibility
Something worth scrolling to
Scroll depth triggers fire at percentage thresholds. Element visibility triggers fire when a specific element enters the viewport. They are not the same thing and the difference matters — a short page may never reach 75%, but the element still becomes visible.
Roofing is a considered purchase. Most visitors read the whole page before enquiring, which is why scroll depth is a reasonable engagement signal here and a poor one on a checkout.
Keep scrolling. There is a target below, set to fire when it has been on screen for two seconds.
A trigger that fires the moment an element touches the viewport counts accidental scroll-past as engagement. A minimum on-screen duration is what makes it mean something.
Still scrolling. This filler exists so the page is tall enough for percentage thresholds to be meaningfully apart.
Almost there.