Zero documentation
Zero documentation (F-501) is tracking nobody can explain from a written record. The test: if the person who built your Google Tag Manager container left tomorrow, could anyone say what each tag sends and why? Good documentation has three parts: a measurement plan, a container map and a change log. To get there, export the live container, map every tag, write the plan, then rename and log every change against it.
Symptom and cause
- Symptom
- Nobody can say what fires, when, or why. Every future change, or staff handover, starts as archaeology.
- Cause
- The container grew by accretion: tags added under deadline, no naming, no record of what each one is for or what depends on it.
- Where it's caught
- A container full of unnamed tags and triggers; no measurement plan; the previous setup's logic living only in someone's head.
Why containers end up undocumented, and what GTM records on its own
No container starts undocumented. It gets there one deadline at a time. A launch needs a pixel by Friday, so someone pastes in a Custom HTML tag (a free-form script) and calls it "Custom HTML 3". A contractor adds three Google Ads tags for a campaign and moves on. A developer copies the purchase tag to test something and never deletes the copy. Each change made sense on the day. None was written down.
The cost shows up later. A copied purchase tag can count orders twice (F-101), for example when the copy sends no transaction_id or reports to a second conversion action. A new hire pauses a tag that fed a bidding strategy. A redesign removes a dataLayer push (the data the site hands to the tags) and nobody knows which tags read it. A parameter nobody listed is never registered in GA4 (F-601). When GA4 and the store disagree, nobody can say whether a tag or a report is wrong.
Tag Manager and GA4 keep part of a record on their own. All of it is optional, and none of it holds the reason:
Notes. Each tag, trigger and variable has a notes field, opened from the more actions menu with Show Notes. Blank unless someone writes in it.
Folders. Group tags, triggers and variables by project, team or type. They show where a tag belongs, not what it is for.
Versions. Every publish saves a version. Google's guidance is to give it a name and description that make the change easy to understand. Tag Manager will publish without them, so many histories are a list of numbers. Since 17 September 2026 the submit page can suggest a name and description from the changes. It summarises what changed; the reason is still yours to add.
Export. The container downloads as JSON, which can be kept in version control and compared. Every setting, no intent.
GA4 change history. Two years of property changes, visible to Editors. Each row shows when, the item, the action and who made it; the row's information icon shows the before and after.
The piece no tool writes for you is the measurement plan: the business questions, the events and parameters that answer them, and where each is reported. Without it, the container is its own only description.
The threshold is the handover test. If someone other than the builder cannot say what each tag sends, where and why, from the record alone, it is F-501. Whether the tags work is a separate question.
| Tag (as named) | Sends to | Why it exists | Verdict |
|---|---|---|---|
| GA4 · Event · purchase | GA4 | revenue reporting | keep |
| Meta Pixel | Meta | not recorded, owner left | fix: name, note |
| Custom HTML 3 | unrecognised domain | nobody knows | trace first |
| Copy of Google Ads conversion | Google Ads | unknown; may double count (F-101) | remove after checks |
| Measurement plan | n/a | none on file | write first |
How to catch it
- You can check the first three yourself. Run the handover test: pick five tags at random from the live container and ask whoever looks after tracking what each one sends, where, when and why. Then ask where that answer is written down. An answer that lives only in someone's head is the finding.
- Ask for the measurement plan. If one exists, compare its last edit date with the date in the Published column on GTM's Versions page. A plan last edited a year before the latest publish describes a container that no longer exists.
- Open Versions and read the last ten names and descriptions. Bare version numbers with no description mean the history cannot tell you what changed or why.
- The next three need someone with GTM and GA4 Admin access. Scan the Tags list for names that say nothing: "Custom HTML 3", "Copy of", "test", "new", a person's or supplier's name. Notes do not show in the list, so open each one. Start with Custom HTML tags on the All Pages trigger: they run on every page and can send data anywhere.
- Compare GTM with GA4. List the event parameters your GA4 tags send, then open Admin → Data display → Custom definitions. Parameters sent but not registered are F-601. Registered dimensions that nothing sends any more still count towards the limit of 50 event-scoped dimensions on a standard property.
- Read GA4's property change history for the last year (Editor role needed). Note who changed key events, filters and links, and whether they are still around. A change nobody can explain is an undocumented change.
What putting it right involves
- Take a baseline before touching anything. In Admin → Export Container, choose the most recent version with a date in the Published column of the Versions page (the live one), not a workspace, which can hold unpublished changes. Store the JSON where it cannot be lost, ideally in version control.
- Build the container map. One row per tag. Columns: tag name, type, trigger, destination, what it sends, why it exists, owner, verdict (keep, fix, remove). Work out the unknowns in Preview mode (GTM's test view of which tags fire) and in the browser's network requests, not from guesses.
- Write the measurement plan. One row per business question. Columns: question, event, parameters, dataLayer source, tags that send it, registered in GA4 (yes or no), key event or Google Ads conversion. Keep the reporting definitions beside it: which revenue field means what is the metric register (R-501).
- Make the container match the plan. Rename to one convention, for example "GA4 · Event · purchase" or "Meta · Pixel · PageView". Group with folders. Put a note on every tag whose name cannot say it all, every Custom HTML tag above all.
- Retire with care. Before pausing a tag marked remove, find out in Preview mode which conversion action or pixel it hits, and check that action's status and recent conversions in the ad platform. Pause, publish, then watch that action's count and any bidding strategy that uses it for a few weeks before deleting. Record why in the version description.
- Keep the record current. Every publish gets a version name and description saying what changed and why. If you use the AI-suggested summary, add the why yourself. One person owns the plan.
- Test the record. Someone who did not do the work answers the five-tag question from it alone. Rerun the test whenever the tracking owner changes.
Sources on file
- Tag Manager: Publishing, versions, and approvals (a version is a snapshot; enter a version name and description that make changes easy to understand; publish history shows who published and when; approvals are Tag Manager 360 only)support.google.com
- Tag Manager: Container export and import (Admin, Export Container, choose a version or workspace; JSON; exports can be compared and stored in a version control system)support.google.com
- Tag Manager: Organize your containers (folders group tags, triggers and variables by project, team or type)support.google.com
- Tag Manager: Workspaces (up to 3 in a regular container, unlimited in 360; workspace name and description may become the version's)support.google.com
- Tag Manager: Release notes (30 March 2017: notes for tags, triggers and variables, Show Notes in the more actions menu; 17 September 2026: AI-suggested version name and description on the submit page)support.google.com
- Analytics: View the history of account/property changes (two years; Editor role; each row shows time, location, item, action and who changed it; the information icon shows before and after)support.google.com
- Analytics: About custom dimensions and metrics (managed under Custom definitions in Admin; 50 event-scoped, 25 user-scoped and 10 item-scoped dimensions on a standard property)support.google.com
Cited in these case files
F-501 turns up as evidence across the archive. It is cited in:
Questions on this file
What columns go in a container map and a measurement plan?
Container map, one row per tag: name, type, trigger, destination, what it sends, why it exists, owner, verdict. Measurement plan, one row per business question: question, event, parameters, where each value comes from, the tags that send it, whether it is registered in GA4, and whether it is a key event or an ad conversion. Add a change log: date, what changed, why, who.
What is a measurement plan?
The document that says what you measure and why, before it says how. It lists the questions the business asks, the events and parameters that answer them, and where each one is reported. It is the reference the container is built and checked against. Some teams call it a tracking plan or a solution design reference; the content is the same.
How do I document a GTM container I inherited?
Export the live version as JSON first, so you have a baseline. Then map every tag: name, trigger, destination, what it sends, why, owner. Use Preview mode and the network requests for the ones nobody can explain. Write the plan from what should exist, rename and annotate the container to match, and pause what nothing needs before deleting it.
Doesn't Google Tag Manager document itself?
Partly. Tags, triggers and variables have a notes field, folders group them, every publish records a version with an optional name and description, and the container exports as JSON. All of it records what exists, and only if people fill it in. None of it says why a tag exists or what question it answers.
Is a tracking audit the same as documentation?
No. An audit tests what is live against reality; documentation records what is meant to happen, so the next change can be checked against it. On an undocumented container the audit usually writes the first draft. What an audit covers: tracking audit.