Why isn't my Google Tag Manager tag firing?
The Short Answer
A GTM tag fails to fire because the conditions in its Trigger do not perfectly match the data presented in the dataLayer at the time of the event. Often, this is due to a typo in a Custom Event name or a variable evaluating to undefined.
The Context
You've just spent three hours setting up a sophisticated Google Ads Conversion tag in GTM to fire on a specific button click. You open Preview Mode, click the button on your site, and stare at the GTM debugger. The tag sits stubbornly in the "Tags Not Fired" section.
This is the most common roadblock when working with Google Tag Manager. Understanding why a tag didn't fire requires understanding exactly how GTM evaluates triggers relative to the data available on the page.
The 3 Most Common Root Causes
1. Race Conditions (Triggering Before the Data Exists)
If you are firing a Purchase tag on standard 'Page View', but the revenue amount takes 2 seconds to load asynchronously from your database and populate the dataLayer, the tag will fire early with a value of undefined and fail.
2. Case-Sensitivity in Trigger Rules
GTM variables and trigger conditions are strictly case-sensitive. If your trigger says "Fire when Click Classes equals 'Submit-Btn'", but your developer wrote class="submit-btn", the tag will never fire.
3. Using 'Contains' vs 'Equals' Incorrectly
When setting up Page Path triggers, using 'Equals /thank-you' will fail if the actual URL loaded is /thank-you?order=123.
How to fix it:
- 1
Use the Debugger's 'Values' tab: Open GTM Preview mode and click on the specific event in the left-hand timeline where your tag should have fired. Click on the tag itself within the 'Tags Not Fired' section. GTM will display a green checkmark next to the trigger conditions that passed, and a red X next to the ones that failed.
- 2
Verify the dataLayer timing: Ensure your custom event (e.g.
dataLayer.push({'event': 'purchase'})) is occurring after all the required variables (like revenue and item IDs) have been pushed to the dataLayer. You cannot read what isn't there yet. - 3
Switch to Regex or Contains: Loosen your trigger conditions. Instead of matching exact URLs or Click IDs, try using 'Contains' or 'Matches RegEx (ignore case)' to rule out capitalization or parameter issues.
- 4
Scan your dataLayer automatically: If you manage large e-commerce setups, use our GTM Auditor to automatically scan your dataLayer schemas for missing or mistyped keys across your checkout flow.
Want to check this automatically?
Instead of clicking through settings yourself, let our engine audit your GTM Container for this exact issue (and 30 others) in 60 seconds.
Scan your setup with our GTM Audit Tool