Google Tag Manager’s flexibility allows multiple tags to fire on identical triggers. This creates powerful automation opportunities but also introduces complexity: when three conversion tags fire simultaneously, which one executes first? If Tag A modifies a variable that Tag B needs, does Tag B see the updated value? These sequencing questions matter because vendor APIs have rate limits, server-side tracking requires precise ordering, and data consistency depends on predictable execution. Learn more in our guide on Server-Side GTM Client ID.

Understanding GTM Execution Timing
GTM doesn’t guarantee sequential execution of tags with the same trigger. Instead, it fires all matching tags “simultaneously” from the user’s perspective, though technically there’s microsecond-level sequencing. This matters because: Learn more in our guide on Track Form Submissions.
- Multiple pixels fire to the same endpoint can cause rate limiting
- Variables used by multiple tags must be calculated before any tag fires
- Custom HTML tags executing JavaScript can affect DOM state for subsequent tags
- Server-side GTM events depend on proper variable resolution
The key insight: GTM resolves all variables before firing any tags. When a tag fires, every variable it references is calculated at that moment. If multiple tags reference the same variable, each tag gets the variable’s value as calculated for that tag’s execution moment. Learn more in our guide on Audit GTM Security.
Variable Priority: Resolution Order Rules
When GTM encounters a variable reference, it uses this priority order:
- 1. Built-in Variables: Standard GTM variables like Page URL, Click Element, Form Class, etc. These are highest priority and execute fastest.
- 2. User-Defined Variables: Custom variables you create in GTM, in this order:
- Data Layer Variables (fastest)
- JavaScript Variables
- Cookie Variables
- HTML Entity Variables
- 3. Lookup Tables: Variables that reference other variables
- 4. Custom JavaScript Variables: These have the highest latency because they execute JavaScript every time they’re referenced
Within the “user-defined” category, GTM checks variables in the order they’re referenced in tags, not in alphabetical order or creation order. This is crucial: if Tag A uses {{Variable 1}} and {{Variable 2}}, Variable 1 is resolved first.
Practical Tag Sequencing Control
You can’t directly control the firing order of tags with the same trigger, but you can influence behavior through tag dependencies and setup tags:
Using Setup Tags
A setup tag is a placeholder tag that fires first to initialize data layers, populate variables, or make calculations that other tags depend on. Create a setup tag by:
- Creating a Custom HTML tag with minimal code (e.g., just `console.log(‘setup complete’)` )
- Assigning it to fire on the same trigger as your main tags
- Naming it clearly (e.g., “Setup – Calculate Conversion Value”)
The setup tag doesn’t guarantee execution before other tags, but it forces variable resolution before any tag executes. Any code in your setup tag runs, then all tags on the trigger fire with access to the updated variables.
Trigger Sequencing with Delays
If you truly need sequential execution, use timed triggers instead of simultaneous ones:
- Create Trigger A: “Page View” – Fire Tag 1
- Create Trigger B: “Page View – Delay 100ms” – Fire Tag 2
- Create Trigger C: “Page View – Delay 200ms” – Fire Tag 3
This guarantees sequential execution but introduces latency. Each additional tag adds milliseconds to page performance. Use delays only when critical—like ensuring a server-side GTM call completes before a client-side pixel fires.

Variable Dependencies and Conflicts
The most common issue: multiple tags reference the same variable, but the variable depends on other variables that change. Example:
- Variable “Order Value” = {{Data Layer – order_value}}
- Variable “Tax Amount” = {{Order Value}} * 0.08
- Tag A fires with {{Tax Amount}}
- Tag B fires with {{Tax Amount}}
Both tags receive the same Tax Amount value because variables are resolved once per trigger event. If a third trigger fires later that updates the data layer, the variable recalculates for that trigger’s tags, but current trigger’s tags all see the same snapshot.
This is actually ideal behavior—you want consistency across a single user action. If you need different variable values in different tags, you need separate data layer variables or separate triggers.
Preventing Tag Conflicts with Custom Conditions
When multiple tags use the same trigger but should fire under different conditions, don’t rely on tag order. Instead, use trigger conditions:
- Tag 1: Trigger = “Purchase” AND “Payment Method equals credit_card”
- Tag 2: Trigger = “Purchase” AND “Payment Method equals paypal”
- Tag 3: Trigger = “Purchase” AND “Order Value > 100”
Each tag fires only when its conditions match. This prevents unnecessary API calls and eliminates the need to worry about execution order because tags self-select based on data.
Server-Side GTM Tag Sequencing
In server-side GTM, tag order matters more because you’re handling sensitive data and API rate limits. Server-side tags for the same event fire in the order they appear in your container configuration when sorted alphabetically by tag name.
To control order in server-side GTM:
- Name tags with numeric prefixes: “01-Auth Token Request”, “02-Conversion Send”, “03-Postback”
- Use event variables that one tag sets and another consumes
- Leverage the “fire tag” action within tags to explicitly call dependent tags
Server-side GTM’s sequential model is more predictable than client-side GTM, which is why it’s preferred for sensitive tracking operations.
Debugging Tag Execution Order
To verify your tag sequencing works as intended:
- Use GTM Preview Mode and inspect the Variables section for each tag. You’ll see what value each variable resolved to at execution time.
- Check the Tags Fired list to see all tags that executed for a given trigger event.
- For server-side GTM, enable request logging in the container settings and review the event processing logs in Cloud Logging.
- Add debug-only tags that fire console.log statements to verify execution order in browser DevTools.
- Use GA4 debug mode to verify that dependent tracking calls reach GA4 with correct values.
GTM’s variable priority system is deterministic once you understand the rules. Most conflicts arise not from execution order but from inconsistent data layer structure. Standardize your data layer naming conventions and populate all required fields before your triggers fire, and tag sequencing becomes predictable.