On this page
Google Tag Manager event tracking works by pairing a trigger (a click, a form submission or a custom dataLayer event) with a tag that sends the event to GA4 or Google Ads. For most business sites, click triggers filtered by link or CSS selector and dataLayer events for forms cover nearly everything. Google’s new no-code visual tagging is still a beta for Google Ads purchase conversions only, as of October 2026.
What You Need Before You Start
Event tracking sits on top of a working base install. Check these first.
- GTM installed on every page, with the container published (see our Google Tag Manager setup guide).
- A Google tag for GA4 in the container with your G-XXXXXXX ID (covered in setting up GA4 with GTM).
- Edit and publish access to the container.
- A short list of the actions that matter: calls, form leads, bookings, WhatsApp taps, key buttons.
- Access to the site’s developer or form plugin settings if you want dataLayer events.
Google’s August 2026 update redesigned the container Overview. Triggers, Variables, Templates and Folders now sit in a collapsible Advanced section, but they work the same way.
Which GTM Trigger Should You Use: All Elements, Just Links or Custom Event?
Choose by what the visitor interacts with. Google’s click trigger guide says Just Links tracks only HTML link elements, while All Elements tracks clicks on any element, including buttons and images.
| Action | Best trigger | Why |
| Phone, email, WhatsApp links | Click – Just Links | They are links with a tel:, mailto: or WhatsApp URL |
| Button that isn’t a link | Click – All Elements | Buttons aren’t link elements |
| Form that reloads to a thank-you page | Page view on the thank-you URL | Simple and reliable |
| Form that stays on the page | Custom event | Fires only on real success |
| Booking or checkout widget | Custom event | Vendor or developer pushes it |
| Section seen on screen | Element visibility | Tracks views, not clicks |
Two options on Just Links are worth knowing. Wait for Tags holds the click until tags fire or a timeout passes, and Check Validation fires only for clicks that count as valid. Google notes both apply to Just Links only.
How Do You Track a Button Click in GTM Without Writing JavaScript?
Turn on the built-in Click variables, create a click trigger limited to the right element, and attach a GA4 Event tag. No code is needed for most links and buttons.
Step 1: Enable the Click Variables
In the Variables area, make sure Click Element, Click Classes, Click ID, Click URL and Click Text are enabled. Google’s built-in variables guide lists these as the values click triggers fill in.
Step 2: Create a Filtered Click Trigger
Create a click trigger, set it to Some Clicks, and add one condition that matches only your element. Google recommends this over firing on all clicks for performance reasons too. For a phone link:
Trigger name: Phone Click
Type: Click - Just Links
Fires on: Some Link Clicks
Condition: Click URL starts with tel:Step 3: Add the GA4 Event Tag
Create a GA4 Event tag named by platform and event, such as “GA4 – Phone Click – Tag”, with event name phone_click and the Phone Click trigger. Keep one tag per event so each one is easy to find and test.
Step 4: Preview and Publish
Open Preview, click the link on the site, and check that the tag fired on the Click event and the Click URL value is right. Then publish with a clear version name.
Examples by business type: a plumbing company tracks tel: clicks from the header, a dental clinic tracks the “Book online” button, and a B2B software firm tracks “Request a demo” clicks that open a scheduler.
Should You Use Click Classes or a CSS Selector?
Use a CSS selector when you can. Click Classes reads the class attribute of the exact element clicked, which often breaks when a visitor taps the icon or text inside a button instead of the button itself.
A selector condition can match the button and anything inside it, so taps on child elements still count:
Condition: Click Element matches CSS selector
a[href^="tel:"], a[href^="tel:"] *| Method | Good for | Watch out for |
| Click Text | Quick tests | Breaks when copy changes |
| Click Classes | Unique classes | Child elements, shared classes |
| Click ID | Elements with stable IDs | Builders that generate IDs |
| CSS selector | Most real sites | Needs a stable attribute |
If the same class is used on buttons across many pages, add a second condition such as Page Path, or ask the developer for a dedicated attribute like data-track=”quote”. That attribute survives redesigns better than styling classes.
How Do You Track a Form Without a Thank-You Page?
Ask the form to push a dataLayer event when it submits successfully, then fire your tag on a custom event trigger. Google’s custom event guide uses exactly this case: forms that override the browser’s normal submit.
The built-in Form Submission trigger listens for the browser’s submit event. Many AJAX forms, popups and page builders never send it, or send it before validation. Its Check Validation option helps, but a success event from the form itself is more reliable.
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'generate_lead',
form_name: 'quote_request'
});- Add the push to the form’s success callback or the plugin’s “after submit” hook, not the button click.
- Create a Custom Event trigger named “Generate Lead” with event name generate_lead.
- Create a Data Layer Variable for form_name and send it as a parameter in “GA4 – Generate Lead – Tag”.
- Test a real submission, then a failed one (missing required field), and confirm only the success fires.
Google warns that regex matching with .* in a custom event trigger fires on every event, including Tag Manager’s own. Use exact names or a narrow pattern.
For the GA4 reporting side of lead forms, our guide on tracking form submissions and button clicks in GA4 goes deeper on key events and reports.
How Do You Track Phone, Email, Booking and WhatsApp Clicks?
Most of these are links, so one Just Links trigger per action with a Click URL condition does the job. Keep each action as its own event so you can compare them.
| Action | Click URL condition | GA4 event |
| Phone tap | starts with tel: | phone_click |
| Email click | starts with mailto: | email_click |
| WhatsApp tap | matches RegEx wa\.me|api\.whatsapp\.com | whatsapp_click |
| Booking link | contains your booking domain | booking_click |
A tap on a phone link shows intent, not a completed call. If calls drive your revenue, pair click tracking with call tracking; see tracking phone calls in GA4 and Google Ads.
How Do You Track Clicks Inside Iframes Like Calendly, YouTube or Typeform?
Your GTM container can’t see clicks inside an iframe served from another domain, because the browser keeps that content separate from your page. Use the event the embedded tool exposes instead.
- YouTube: GTM’s YouTube video trigger handles supported embeds.
- Booking and form tools: many send a browser message when a booking or submission completes; a developer can listen for it and push a dataLayer event.
- Tools with their own GA4 or Google Ads integration: use it, but don’t also track the same action in GTM.
- If none of these exist, track the click that opens the widget and treat it as a soft signal.
What Can Google’s No-Code Visual Tagging Do in 2026?
Visual tagging lets you set up tracking by selecting elements on your own site while Google handles the selectors and triggers. As of October 2026, Google describes it as a beta for Google Ads purchase conversions only, with more use cases planned later in the year.
According to Google’s visual tagging guide, you start it from the Conversions Summary using Troubleshoot, then follow a three-step side panel on your site:
- Place a test order and confirm you’ve reached the order confirmation page.
- Point to the order values on the page: transaction ID, order subtotal, currency and customer details, or ignore the ones you don’t need.
- Publish the changes, which creates the tags, triggers and variables in your container.
You need a Google Ads account with a conversion action, a sitewide Google tag, edit access to the container and a card to place a real test order. Google also warns that if a purchase conversion already exists, continuing can double-count. For lead forms, phone clicks and buttons, the manual methods above are still the way to go.
If you run Google Ads, our Google Ads conversion tracking setup with GTM covers purchase and lead conversions the manual way.
How Do You Test New Events Before You Trust Them?
Check each event in three places: GTM Preview, GA4 DebugView, and GA4 reports a day later. Only then mark it as a key event or import it into Google Ads.
- In Preview, perform the action and confirm the right tag fired once, on the right event.
- Check the variable values (Click URL, form_name) in the event details.
- Open GA4 DebugView and confirm the event and its parameters arrive.
- Test on a phone as well as desktop, since taps can behave differently.
- Publish with a version name that says what changed.
Troubleshooting GTM Event Tracking
| Problem | Likely cause | Fix |
| Click trigger never fires | Condition too strict, or wrong trigger type | Check Click variables in Preview; loosen the condition |
| Fires on icon, not on button text (or vice versa) | Click Classes or Click Text on a child element | Use a CSS selector with a child match |
| Fires several times per tap | Overlapping triggers or nested elements | Use one trigger; match the outer element only |
| Form trigger never fires | Form doesn’t send a browser submit event | Push a dataLayer success event |
| Lead counted on failed submits | Trigger on button click | Fire on success only |
| Event in Preview, not in GA4 | Wrong G- ID, consent, or tag paused | Check the Google tag and consent state |
| Clicks in a widget not seen | Cross-domain iframe | Use the tool’s own event or integration |
For deeper debugging steps, see Google Tag Manager not working: how to test and fix tags.
When Should You Get Help With Event Tracking?
Get help when leads in GA4 don’t match your inbox or CRM, when tags fire on every click, or when Google Ads bids on events you no longer trust. Our Tracking & Analytics service audits and rebuilds GTM event tracking month-to-month with no lock-in, starting with a free audit.
FAQ
Frequently asked questions
Will Visual Tagging Break When the Developer Changes the Site Design?
It can, because any selector-based tracking depends on the page structure staying recognizable. Google handles the selectors for you, but if the order confirmation page is redesigned, run a test order again and check that the transaction ID and order value are still picked up correctly.
Can Visual Tagging Track Button Clicks Without Triggers and Variables Yet?
Not as of October 2026. Google describes visual tagging as a beta for Google Ads purchase conversions only and says more use cases will follow during the year. For buttons, calls and forms, set up click or custom event triggers in Google Tag Manager.
Why Does the GTM Form Submission Trigger Never Fire on My Form Plugin?
Many form plugins and embedded forms submit with JavaScript and never send the browser's standard submit event, so the trigger has nothing to listen for. Ask the plugin or developer to push a dataLayer event when the submission succeeds and fire your tag on a custom event trigger instead.
If the Site Already Pushes dataLayer Events, Should I Keep Click Triggers?
Keep only one source per action. If the site pushes a reliable event for a form success or booking, use a custom event trigger for it and remove the matching click trigger, otherwise the same lead can be counted twice.
Why Does My Click Show in GTM Preview but Not in GA4 DebugView?
Usually the GA4 Event tag isn't attached to that trigger, the Google tag uses a different G- ID, or consent settings are blocking analytics storage. Check that the tag fired on the click event in Preview, then confirm the Measurement ID and the consent state for that visitor.
Can GTM Capture Dynamic Values Like a Price or Cart Total on a Click?
Yes, if the value is available. The most reliable way is to have the site push the value with the event to the dataLayer and read it with a Data Layer Variable. Reading values from page text works but breaks easily when the layout changes.
6 sources & references
- Tag Manager Help Updates to Google tag and Google Tag Manager support.google.com
- Tag Manager Help Visual tagging in Tag Assistant support.google.com
- Tag Manager Help Click trigger support.google.com
- Tag Manager Help Form submission trigger support.google.com
- Tag Manager Help Custom event trigger support.google.com
- Tag Manager Help Built-in variables for web containers support.google.com
Official pages we checked when writing this article.







