GTM console guide
A walkthrough of the Google Tag Manager console: Workspace (tags/triggers/variables), Versions (publish/rollback), Admin (container/users/install/import) and exactly what metricsKit needs you to set.
Console overview#
Open tagmanager.google.com and get oriented in four places:
| Where | What it does |
|---|---|
| Account/Container picker (top) | Which account and which container you are working in. metricsKit binds to one specific container (GTM-XXXX). |
| Workspace | Where you actually edit: tags, triggers, variables. Changes land in a draft first and do not affect production. |
| Preview | Connect to your site and watch which tags fire with which parameter values — first stop for debugging. |
| Submit | Turns the current workspace changes into a version. |
| Versions | Every version ever created; only after Publish does production change. |
| Admin | Container-level settings: container info, user permissions, container code install, import/export, workspaces, environments. |
Workspace · Tags#
A tag is "when this happens, send that". Pick a tag type, then configure firing triggers and parameters.
| Setting | Notes |
|---|---|
| Tag name | For humans only; keep prefixes consistent (metricsKit entities start with metricsKit -). |
| Tag type | metricsKit uses two: Google tag (GA4 configuration, internal type gaawc) and GA4 event (internal type gaawe). |
| Firing triggers | When to fire this tag; multiple allowed. |
| Blocking triggers | When not to fire (rarely needed). |
| Parameters | For GA4 event tags: event name and event parameters. For the GA4 config tag: measurement ID. |
| Tag firing options | Once per event / Once per page / Unlimited; leave "Once per event". |
| Consent settings / Advanced | GDPR consent and tag sequencing; keep defaults for most sites. |
Workspace · Triggers#
A trigger is "when". Common types and how metricsKit uses them:
| Trigger type | Fires on | metricsKit use |
|---|---|---|
| Initialization – All Pages | Container load | GA4 configuration tag |
| Form Submission | Native form submit | form_submit |
| Click – Just Links | Clicks on anchors | Outbound click (click) |
| Link Click (with file downloads) | Link click / file download | file_download |
| Scroll Depth | Vertical scroll 25/50/75/100% | scroll |
| Custom Event | A dataLayer event with that name | Ecommerce events (purchase, …) |
| History Change / Element Visibility / Timer | SPA nav / element appears / interval | As needed |
Conditions are written with built-in variables, for example:
- Outbound: Page URL does not contain Click URL
- Custom event: event name equals purchase (compares {{_event}} to the name under the hood)
- Scroll: pick Scroll Depth and tick the percentage thresholds
Workspace · Variables#
A variable is "what value". Two kinds:
| Variable type | Notes | metricsKit use |
|---|---|---|
| Data Layer Variable | Reads a dataLayer field, e.g. ecommerce.value | Ecommerce value/items (dlv - ecommerce.*) |
| Custom JavaScript | A JS snippet returning a value | Outbound domain check, affiliate detector |
| Constant / URL / Cookie | Fixed value / parsed URL / cookie reader | As needed |
Built-in variables must be enabled as needed (Variables → Configure → Built-In Variables), otherwise tag parameters resolve to empty. metricsKit relies on:
- Forms: Form ID, Form Classes, Form Text, Form URL
- Pages: Page URL, Page Hostname, Page Path
- Clicks: Click URL, Click Text, Click Classes, Click Element
- Scroll: Scroll Depth Threshold
- Events: Event (the custom event name, i.e. {{_event}})
Workspace · Folders / Templates / Preview / Submit#
- Folders: group entities; purely organisational.
- Templates: custom tag/variable templates; not needed by metricsKit.
- Preview: click Preview → enter your site URL → interact with the site; the panel lists fired/unfired tags and parameter values. First debugging step.
- Submit: click Submit (top right) → name and describe the version → a version is created (still not live).
Versions#
| Action | Notes |
|---|---|
| Version list | Each version shows name, time and author; drafts vs published are distinguished. |
| Compare | Diff two versions to see tag/trigger/variable changes — great for "who broke it". |
| Publish | Makes a version live. Importing or creating without publishing changes nothing in production. |
| Restore (rollback) | Re-activate a historical version when something breaks. |
Admin#
| Setting | Notes | metricsKit relevance |
|---|---|---|
| Container settings | Container name, Container ID (GTM-XXXX), domains, usage & data sharing | The container ID goes into your site; metricsKit binds to this container |
| User management | Permission levels: No access, Read, Edit, Publish, Approve | metricsKit only needs Read (it never writes) |
| Install Google Tag Manager | The two container code snippets (head + body) | Must be installed on the site or the container never loads |
| Import Container | Upload a JSON to import entities; Overwrite or Merge | This is where you import the metricsKit import file |
| Export Container | Export the container as JSON | For backups |
| Workspaces | Default workspace, create/delete workspaces | With multiple workspaces, make sure you import into the right one |
| Environments | Live / Latest / custom environments and their snippets | Usually unused; test environments as needed |
| Approvals / Notifications / Integrations | Publish approval flows, email notifications, third-party integrations | Not relevant to metricsKit |
What each user permission level (Admin → User Management) can do:
| Permission | View container | Edit tags/triggers/variables | Submit versions | Publish live | Approve drafts |
|---|---|---|---|---|---|
| No access | ✗ | ✗ | ✗ | ✗ | ✗ |
| Read | ✓ | ✗ | ✗ | ✗ | ✗ |
| Edit | ✓ | ✓ | ✓ | ✗ | ✗ |
| Publish | ✓ | ✓ | ✓ | ✓ | ✗ |
| Approve | ✓ | ✗ | ✗ | ✗ | ✓ |
- Restoring a historical version (rollback) is part of the Publish permission.
- Approve is an optional container-level capability (enterprise approval flow); it is usually granted together with Edit/Publish. Granted alone, it can only review and approve drafts.
- Permissions are per container: one account can have Publish on container A and Read-only on container B.
What metricsKit needs you to set#
Everything above condensed into one checklist — do it in order:
| # | Where in GTM | What to set |
|---|---|---|
| 1 | Admin → Install Google Tag Manager | Install both container snippets on the site (or use a plugin like GTM4WP and enter the container ID) |
| 2 | Workspace → Variables → Configure → Built-In | Enable: Form ID/Classes/Text/URL, Page URL/Hostname/Path, Click URL/Text/Classes/Element, Scroll Depth Threshold, Event |
| 3 | Workspace → Tags | Ensure a "GA4 configuration / Google tag" exists with your G-XXXXXXXXXX measurement ID and the Initialization – All Pages trigger |
| 4 | Admin → Import Container | Import the JSON generated by metricsKit (containing the entities for the features you selected) |
| 5 | Workspace → Submit | Name and describe the version, then create it |
| 6 | Versions → Publish | Publish the version so production takes effect |
| 7 | metricsKit → Conversions → Check configuration | Verify item by item; fix whatever is still missing and re-check |
Pitfalls#
- Imported but no data: the version was not published. Go to Versions → Publish.
- Duplicate entities: importing the same names again creates duplicates — import once, or pick Overwrite.
- Site loads container A, metricsKit bound to B: everything looks right but nothing fires. Compare the GTM-XXXX in the page source with the bound container.
- Parameters come out empty: built-in variables not enabled (checklist step 2).
- Forms / outbound clicks do not fire: fetch-only submissions or special navigation; outbound triggers need "Wait for tags".
- No events at all: the container has no "GA4 configuration" tag (checklist step 3).
Related docs#
- GTM overview (with the container configuration items): /gtm
- WordPress · GTM container configuration (GTM4WP data layer): /wordpress/gtm
- Shopify · GTM container configuration (Custom Pixel): /shopify/gtm