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.

Load your own container: add ?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.

Jump to form Email us
Practice: a trigger on 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.

Practice two ways, then compare:
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.

Practice: pull 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.

Element visibility target — set a 2 second minimum on-screen duration
dataLayer
Nothing pushed yet. Interact with the page.