Google Tag Manager

GTM Container Naming Conventions That Scale

Published 

A person grouping coloured sticky notes on a whiteboard during a workshop

Every GTM container starts clean. Twelve tags, obvious names, one person maintaining it. Two years later it has 180 assets named things like GA4 event, GA4 event 2, New tag copy, TEST — DO NOT DELETE, and pixel (ask Sarah). Sarah left in 2024.

The container still works. That is the problem — nothing forces a cleanup, so the cost shows up as a slow tax on every future change. A five-minute edit becomes forty minutes of archaeology because nobody can tell which of the three GA4 purchase tags is live.

A naming convention is the cheapest fix available. It costs an hour to define and it holds for years.

What a convention has to do

Names in GTM are not decoration. They are the only index the interface gives you. The list view sorts alphabetically, the search box matches substrings, and that is the whole navigation model. So a good convention has to make three things true:

  1. Alphabetical sort produces useful grouping. The most significant token goes first.
  2. You can identify an asset from the name alone, without opening it.
  3. Search finds a family. Typing GA4 should return every GA4 asset and nothing else.

Anything that satisfies those three is fine. The specific convention below is one that satisfies them; consistency matters far more than which one you pick.

The convention

Tags: Type — Platform — Description

1GA4 EventPurchase
2GA4 EventAdd to Cart
3GA4 ConfigAll Pages
4MetaPurchase
5MetaPageView
6LinkedInInsight Tag
7cHTML — Consent Banner Init

Type first, because that is the axis you browse along. GA4 Event sorts together, Meta sorts together, and every Custom HTML tag is visibly a Custom HTML tag before you open it — which matters, because Custom HTML is arbitrary JavaScript running on your site and deserves a visible marker.

Triggers: Type — Description

1ClickAdd to Cart Button
2ClickOutbound Link
3Custom Event — purchase
4Custom Event — add_to_cart
5Page ViewCheckout Confirmation
6InitConsent Default
7Window LoadedAll Pages

Trigger type first for the same reason. It also makes a common bug obvious at a glance: a Click trigger where a Custom Event trigger should be, which is the difference between scraping the DOM and reading a value the developers deliberately pushed.

Variables: Source — Description

1DL — ecommerce.value
2DL — user_id
3DL — page_type
4ConstGA4 Measurement ID
5JSCleaned Page Path
6DOMProduct Price
7LookupEnvironment

Source first is the important call here. DL means a developer pushed this value on purpose and it will survive a redesign. DOM means you are scraping the rendered page and it will break the next time someone changes a class name. JS means custom JavaScript that someone has to maintain. When you can see the source in the name, you can see your fragility profile by scrolling the variable list.

The prefix is a risk label. In a healthy container, most values come from DL. A container that is mostly DOM and JS variables is one design refresh away from a silent outage — and because GTM does not error when a DOM selector stops matching, nothing will tell you.

Folders mirror the convention

GTM folders are a flat single level, so do not try to build a tree. Mirror the top-level token of your naming convention:

  • GA4
  • Google Ads
  • Meta
  • LinkedIn
  • Consent
  • Utilities
  • Archive — pending deletion

That last one is doing real work. Deleting a tag is a decision people avoid because they are not sure what depends on it. Moving it to Archive — pending deletion with a date in the notes is a decision they will make. Sweep the folder quarterly and delete anything that has sat there a full quarter without anyone objecting.

The rules that keep it working

A convention without rules decays back to New Tag copy within a year.

Never use "copy" or "new". GTM's duplicate function names things Tag copy. Rename before you save, every time. This is the single most common entry point for container rot.

Never encode a date or a person. Q4 Campaign Tag outlives Q4. Sarah's pixel outlives Sarah. If timing matters, put it in the notes field, which is what the notes field is for.

One trigger, one purpose. Reusing a trigger across unrelated tags feels efficient until you need to change it for one of them. The refactor is worse than the duplication.

Custom Event triggers are named after the event. Custom Event — purchase fires on the dataLayer event purchase. Anything else and you will be opening triggers to find out what they listen for.

Notes are mandatory for Custom HTML. What it does, who asked for it, when. Custom HTML is the highest-risk asset type in a container and the one most likely to be inherited without context.

Retrofitting a container that has none

You will almost never get to apply this to a clean container. Here is the order that works on an existing one.

First, do not rename anything yet. Renaming is safe in GTM — references are by internal ID, not by name — but you need to know what you are looking at before you touch it.

Inventory before you touch. Get the full list of tags, triggers, and variables, and for each variable, what actually references it. This is the step that stops people, because the GTM UI shows you assets but not the graph connecting them. GTM dependency mapping covers how to build that picture — and Tagfire's container manager generates it directly from a live container.

Delete before you rename. There is no point standardising the name of a tag that has not fired in a year. Work through, in order:

  • Paused tags older than a quarter
  • Tags with zero fires in 90 days
  • Variables referenced by nothing
  • Triggers attached to no tag

On a two-year-old container this is routinely a quarter of the assets. The GTM audit flags all four categories automatically, which turns a day of clicking into a list.

Then rename, in one workspace, in one sitting. Do not spread it across weeks. A half-renamed container is worse than an unrenamed one, because now there are two conventions.

Publish with a clear version name. Naming convention applied — no functional changes. Future you, staring at a version diff, will be grateful.

Verify nothing broke. Renaming does not change behaviour, but a rename session usually turns into a cleanup session, and cleanup does change behaviour. Load the site with a live tag capture running and confirm the same hits fire as before.

Multi-container and agency setups

If you run containers for several clients, add one more rule: the convention is the same in every container. The whole point is that someone who has never seen this client's container can navigate it in thirty seconds because it looks like the last one.

Two things follow from that:

A template container. Build one container with the folder structure, the naming convention documented in a note, and the standard consent and GA4 configuration in place. Clone it for every new client rather than starting from empty. Tagfire's container manager can clone versions across containers for exactly this.

A written convention doc. One page. Where the naming rules live, who owns changes to them, and where the container inventory is. Keep it with the account, not in someone's personal drive.

How Tagfire helps

The convention is a decision. The work is the inventory and the cleanup, and that is where the tooling matters.

  • GTM Container Manager lists every tag, trigger, and variable in a live container with its full dependency graph, so you can see what references what before you rename or delete. It also handles cloning versions between containers for the template workflow.
  • GTM Audit runs 50+ checks and flags exactly the categories you want to sweep first: paused tags, never-fired tags, orphaned variables, unattached triggers, Custom HTML risks, and missing consent gates. Web and server-side containers both.
  • GTM Visualizer renders the container as an interactive dependency map. It needs no account — upload a container export and explore it. Useful on day one of an engagement, before you have access to anything.
  • GTM Container Scanner reads any published container from its public JavaScript, with no account and no access. This is how you inventory a container you have inherited but not yet been granted access to.

The documentation covers the container manager in detail, including the dependency view and version cloning.

Related reading
Hand-drawn wireframes of three page layouts sketched side by side
GA4

The 2026 GA4 + GTM Setup Checklist

A complete technical checklist for Google Analytics 4 and Google Tag Manager — collection, configuration, consent, campaign tracking, and governance. Verify each item before you trust a single report.

Read article