GTM Naming Conventions
Naming conventions are the first thing new team members see and the last thing most teams plan. Six months into a GTM implementation, a container with 80 tags named “GA4 Event,” “GA4 Event (2),” “test - purchase,” and “Copy of Purchase Event (DO NOT DELETE)” is not unusual. It is also completely avoidable.
Pick a convention on day one. Enforce it. Document it in your team wiki. Future you will be grateful.
The recommended format: [Platform] - [Type] - [Description]
- Platform: who receives the data (GA4, Meta, LinkedIn, HubSpot, Google Ads, etc.)
- Type: what kind of tag (Event, Config, Pixel, Conversion, PageView, etc.)
- Description: what specifically it tracks, in plain language
Examples:
| Good | Bad |
|---|---|
GA4 - Event - Purchase | GA4 Purchase |
GA4 - Event - Form Submission | Form tag |
GA4 - Config - Google Tag | Tag 1 |
Meta - Pixel - PageView | Facebook |
Meta - Pixel - Purchase | meta purchase event |
Google Ads - Conversion - Purchase | Ads Conversion |
LinkedIn - Insight Tag - PageView | linkedin |
HubSpot - Tracking Code | HubSpot test |
Why this structure:
- Sorting alphabetically groups all GA4 tags together, all Meta tags together, etc.
- The type prefix helps you scan quickly when looking for “all event tags” or “all conversion tags”
- The description should be specific enough to know what fires it without opening the tag
Triggers
Section titled “Triggers”The recommended format: [Trigger Type Abbreviation] - [Description]
Common abbreviations:
PV— Page ViewDR— DOM ReadyWL— Window LoadedCE— Custom EventCL— Click (All Elements)LC— Link ClickFS— Form SubmissionSD— Scroll DepthTM— TimerEV— Element VisibilityJS— JavaScript ErrorHC— History Change
Examples:
| Good | Bad |
|---|---|
CE - purchase | Purchase Event |
CE - form_submission | form_sub trigger |
PV - All Pages | page view |
PV - Product Pages | PDP page view |
LC - Outbound Links | Link |
LC - File Downloads | downloads |
SD - 25/50/75/90 - Content Pages | scroll trigger |
CE - add_to_cart - Exception: Checkout Pages | add to cart |
For Custom Event triggers specifically, use the exact event name as the trigger description:
CE - add_to_cart(notCE - Add to Cart)CE - video_play(notCE - Video Play)
This makes it instantly clear what dataLayer event name the trigger is listening for.
Variables
Section titled “Variables”The recommended format: [Variable Type Abbreviation] - [Description]
Common abbreviations:
DLV— Data Layer VariableCJS— Custom JavaScriptConst— ConstantRT— Regex TableLT— Lookup TableURL— URL VariableDOM— DOM ElementCookie— First Party CookieJS— JavaScript Variable (window global reference)
Examples:
| Good | Bad |
|---|---|
DLV - ecommerce.transaction_id | Transaction ID |
DLV - user_id | user id |
Const - GA4 Measurement ID | GA4 ID |
Const - Site Hostname | domain |
CJS - File Extension from Click URL | file ext |
CJS - Is Excluded Domain | domain check |
RT - Link Type | link type |
LT - Page Type to Content Category | categories |
URL - Query Param: utm_source | utm source |
For Data Layer Variables, including the dataLayer key path in the name (e.g., DLV - ecommerce.transaction_id rather than just DLV - Transaction ID) makes it immediately clear where the variable reads from.
Folders
Section titled “Folders”Organize folders by platform, with optional sub-folders for large implementations:
📁 GA4 GA4 - Config - Google Tag GA4 - Event - Purchase GA4 - Event - Form Submission ...
📁 Meta Meta - Pixel - PageView Meta - Pixel - Purchase ...
📁 Google Ads Google Ads - Conversion Linker Google Ads - Conversion - Purchase ...
📁 Consent Consent Mode - Default Consent Mode - Update Handler ...
📁 Utility CJS - File Extension CJS - Is Excluded Domain Const - GA4 Measurement ID ...Alternative: organize by function (Tracking, Marketing, Consent, Utility). Pick one and apply it consistently. The biggest mistake is having some items in folders and some not.
DataLayer event names
Section titled “DataLayer event names”DataLayer event names should use snake_case to align with GA4’s built-in event naming conventions:
| Good | Bad |
|---|---|
form_submission | formSubmission, form-submission, Form Submission |
add_to_cart | addToCart, ADD_TO_CART |
video_play | videoPlay, video-play |
page_view | pageView, PageView |
This consistency means your custom event names and GA4 standard event names look the same in reports. It also prevents the most common typo errors (camelCase mixed with underscore).
What to avoid
Section titled “What to avoid”“test” in production tag names. Every container has a GA4 - test or test tag - DO NOT DELETE sitting there. Clean them up before every publish.
Numbers as descriptions. GA4 Event 1, GA4 Event 2 tells you nothing. Even temporary tags deserve a real name.
Abbreviations nobody remembers. GA4 - EV - PDPAT — what does that mean? Six months later, nobody knows. Use words.
Inconsistent capitalization. GA4 - event - purchase and GA4 - Event - Form Submission and GA4 - EVENT - VIDEO in the same container. Pick a capitalization style and enforce it across the team.
Overly long names. A tag named GA4 - Event - User Clicked The Purchase Button on the Product Detail Page After Viewing the Item is unwieldy. GA4 - Event - Purchase is enough — the trigger and the dataLayer event context fill in the rest.
Enforcing conventions
Section titled “Enforcing conventions”Naming conventions only work if they’re enforced. Practical approaches:
- Document them in your team wiki. Include examples. Link to this guide or your own version of it.
- Review new tags in code review style. Before publishing, have someone check naming on new items.
- Rename before publish. Make it a rule: any “Copy of” or “test” name must be renamed before the version is published.
- Export your container regularly and check names in JSON. It’s easier to spot naming inconsistencies when you can search the text.