LW IT Solutions
« Blog Overview /Digital Analytics/Tutorials / Tutorial: Eine GTM-Namenskonvention festlegen und im bestehenden...
This post in other languages:

Tutorial: Eine GTM-Namenskonvention festlegen und im bestehenden Container durchsetzen

Tutorial: Eine GTM-Namenskonvention festlegen und im bestehenden Container durchsetzen
Inhalt
  1. Warum der Name die einzige Ordnung ist
  2. Eine Konvention, die dreihundert Tags übersteht
  3. Den Bestand prüfen
  4. Umbenennen, ohne einen Verweis zu zerreißen
  5. In einem Arbeitsbereich erledigen
  6. Es dabei belassen
  7. Fragen und Antworten
  8. Quellen

Ein Tag-Manager-Container hat keine Ordner, die etwas bedeuten, keine Typen, die gruppieren, und keine Suche, die Struktur versteht. Er hat eine Liste, alphabetisch sortiert, und diese Liste ist die gesamte Oberfläche zum Wiederfinden.

Damit ist das erste Wort jedes Namens die einzige Gruppierung, die es gibt. Eine Konvention ist deshalb keine Ordnungsliebe – sie ist der Unterschied zwischen einem Tag in drei Sekunden und dreihundert Zeilen zum Durchlesen.

Dieselben neun Tags eines Containers, links alphabetisch nach beliebigen Namen sortiert, rechts nach einem Präfixschema, das sie in drei Blöcke gruppiert
Dieselbe Liste, dieselbe Sortierung. Nur das erste Wort hat sich geändert, und die Plattform gruppiert von selbst.

Warum der Name die einzige Ordnung ist

Ordner gibt es, und sie lohnen sich, aber sie ändern nichts an den beiden Stellen, an denen ein Name tatsächlich gelesen wird: dem Suchfeld und dem Verweis innerhalb eines anderen Elements. Ein Auslöser erscheint unter einem Tag mit seinem Namen, eine Variable erscheint in einem Feld mit ihrem Namen, und keines von beidem zeigt, in welchem Ordner es liegt.

Die Liste selbst ist der zweite Grund. Sortiert wird standardmäßig alphabetisch nach Name, alles, was zusammen erscheinen soll, muss also mit denselben Zeichen beginnen. Das ist eine Rahmenbedingung und keine Vorliebe, und eine Konvention, die sie übergeht, erzeugt Namen, die beschreibend und nutzlos sind.

Ein dritter Punkt legt die Richtung des Schemas fest: Namen sortieren von links nach rechts. Die wichtigste Unterscheidung gehört deshalb nach vorn und die feinste Angabe nach hinten. Welche Unterscheidung die wichtigste ist, ist die eine Frage, die sich vor dem ersten Namen zu besprechen lohnt – für die meisten Container ist es die Plattform, denn von dort aus beginnt eine Frage üblicherweise.

Eine Konvention, die dreihundert Tags übersteht

Drei Abschnitte, einheitlich getrennt, genügen. Mehr Abschnitte sehen genauer aus und werden von dem abgekürzt, der es eilig hat.

Tags       <Plattform> - <Art> - <Was>
           GA4 - Event - add_to_cart
           GA4 - Config - Alle Seiten
           Meta - Event - purchase
           Sonstige - Conversion Linker

Ausloeser  <Art> - <Bedingung>
           CE - add_to_cart
           PV - kasse
           Klick - cta-kopfbereich

Variablen  <Quelle> - <Name>
           DLV - ecommerce.items
           JS - artikelliste
           Const - GA4 Mess-ID
           LT - laendercode

Die dreibuchstabigen Kürzel für Auslöser- und Variablenarten sind Absicht. Sie sind kurz genug, dass der interessante Teil des Namens in einer schmalen Spalte sichtbar bleibt, und sie kürzen die Wörter ab, die die Oberfläche selbst verwendet (Custom Event, Page View, Data Layer Variable) – niemand muss also ein zweites Vokabular lernen.

Zwei Regeln halten das unter Druck zusammen. Der Trenner ist immer derselbe – Leerzeichen, Bindestrich, Leerzeichen -, denn eine Mischung aus Bindestrichen und Doppelpunkten zerlegt die Sortierung auf eine schwer sichtbare Weise. Und der letzte Abschnitt trägt den technischen Namen genau: Ein Tag für das Ereignis add_to_cart heißt add_to_cart und nicht Add to Cart – eine Suche nach dem Ereignisnamen findet damit Tag, Auslöser und Variable in einem Zug.

Den Bestand prüfen

Der Container-Export ist eine JSON-Datei mit drei Listen darin, und dreihundert Namen gegen ein Schema zu prüfen ist ein kurzes Skript statt eines Nachmittags.

import json, re, sys

VORSATZ = {
    "tag":      re.compile(r"^(GA4|Meta|Ads|LinkedIn|TikTok|Sonstige) - "),
    "trigger":  re.compile(r"^(CE|PV|Klick|Formular|Timer|Sichtbar|Sonstige) - "),
    "variable": re.compile(r"^(DLV|JS|Const|LT|URL|Cookie|Sonstige) - "),
}

daten = json.load(open(sys.argv[1]))["containerVersion"]

for art, muster in VORSATZ.items():
    posten = daten.get(art, [])
    fehlt  = [p["name"] for p in posten if not muster.match(p["name"])]
    print(f"{art:9s} {len(posten) - len(fehlt):3d} von {len(posten):3d} nach Schema")
    for name in sorted(fehlt):
        print(f"            {name}")

Was bei einem ersten Lauf herauskommt, sind meist zwei Drittel nach Schema und ein Drittel nicht – und dieses Drittel zerfällt in drei Gruppen, die verschieden zu behandeln sind.

Namen, die schlicht alt sind, folgen nach einer Umbenennung dem Schema, und weiter geschieht nichts. Namen, die etwas beschreiben, das nicht mehr im Einsatz ist – ein Tag für eine aufgegebene Plattform -, sind ein eigener Befund und gehören auf die Liste zum Löschen statt zum Umbenennen. Und Namen mit einer Person oder einem Datum darin – Test Anna 03.02. – sind die, die zuerst anzusehen sind, denn sie kennzeichnen meist etwas, das nie bleiben sollte.

Umbenennen, ohne einen Verweis zu zerreißen

Hier sitzt die Ungleichheit, und sie ist der Grund, warum eine Massenumbenennung eine Gegenprobe braucht.

Tags und Auslöser werden intern über eine Nummer angesprochen. Sie umzubenennen ändert an keiner anderen Stelle etwas, und ein Auslöser, der ein Tag auslöst, tut das unter jedem Namen weiter.

Bei Variablen ist es anders, denn eine Variable wird über ihren Namen in doppelten geschweiften Klammern angesprochen. GTM zieht diese Verweise bei einer Umbenennung im ganzen Container nach – ein Feld mit {{DLV - artikel}} geht mit, und nach übereinstimmenden Fachquellen auch die Klammern, die als Text in einem benutzerdefinierten HTML-Tag oder einer benutzerdefinierten JavaScript-Variablen stehen. In Googles Hilfe ist dieses Verhalten nicht beschrieben; ob es im eigenen Container gegriffen hat, zeigt ein Vergleich vorher und nachher.

# alle Namensverweise im Export finden, bevor umbenannt wird
grep -o '{{[^}]*}}' export.json | sort | uniq -c | sort -rn | head -30

Das vorher und nachher laufen zu lassen ist das ganze Sicherungsnetz. Die Liste der angesprochenen Namen sollte bis auf die absichtlich geänderten identisch sein, und jeder unbeabsichtigte Unterschied ist ein Verweis, der jetzt ins Leere geht – was GTM beim Vorschauen und Veröffentlichen als Fehler „Unknown variable“ meldet.

In einem Arbeitsbereich erledigen

Eine Umbenennung von zweihundert Elementen ist eine Änderung mit zweihundert Einträgen, und sie gehört aus drei Gründen in einen eigenen Arbeitsbereich.

Die Version, die daraus entsteht, ist ein einziger Eintrag im Containerverlauf – und genau das braucht die Kollegin, die die Änderungsliste in einem halben Jahr ansieht. Ein Arbeitsbereich, den sich die Umbenennung mit einer fachlichen Änderung teilt, macht beide schwerer zu prüfen und getrennt unmöglich zurückzunehmen.

Die Vorschau funktioniert innerhalb des Arbeitsbereichs weiter, der ganze Container lässt sich vor dem Veröffentlichen also einmal durchspielen – und durchzuspielen ist gezielt jedes benutzerdefinierte HTML-Tag, denn dort stehen die Verweise als Zeichenkette im Code, und dort zeigt sich, ob die Umbenennung sie mitgenommen hat.

Und der Container lässt sich aus dem Arbeitsbereich vor dem Veröffentlichen exportieren, womit eine Datei zum Vergleich mit der vorherigen vorliegt. Zwei Exporte, ein grep, und die Frage, ob etwas zerbrochen ist, ist ohne Raten beantwortet.

Es dabei belassen

Eine Konvention zerfällt in dem Tempo, in dem Leute in Eile etwas hinzufügen, und drei Gewohnheiten bremsen das stärker als ein Dokument.

Das Prüfskript gehört dorthin, wo es von allein läuft. Einmal im Monat gegen einen frischen Export genügt, und die Ausgabe ist kurz: Entweder passt alles, oder sie nennt die drei Elemente, die seit dem letzten Lauf hinzugekommen sind.

Das Schema gehört in den Container statt in ein Wiki. Ein Merkelement – ein Tag, das nie auslöst, benannt als 0 - Namensschema, damit es nach oben sortiert – trägt die Konvention dorthin, wo die Person, die gerade etwas benennt, ohnehin hinsieht.

Und die Löschliste aus der Prüfung lohnt sich abzuarbeiten statt abzulegen. Ein Container mit vierzig pausierten Tags, die niemand wiedererkennt, ist ein Container, in dem die Konvention erneut übergangen wird, denn die Liste ist bereits unlesbar – und der schnellste Weg zu einer lesbaren Liste ist eine kürzere.

Fragen und Antworten

Müssen auch die von GTM vorgegebenen Variablen wie Page URL dem Schema folgen?

Nein, und sie können es auch nicht. Die vorgegebenen Variablen (Built-in Variables) wie Page URL oder Click Classes tragen Namen, die Google festlegt; sie lassen sich ein- und ausschalten, aber nicht umbenennen. Im Container-Export stehen sie in einer eigenen Liste builtInVariable und nicht unter variable, das Prüfskript übergeht sie deshalb von selbst. In der grep-Liste der Verweise tauchen sie zwar auf, bleiben dort aber vor und nach der Umbenennung gleich und stören den Vergleich nicht.

Lässt sich die monatliche Prüfung einrichten, ohne den Container jedes Mal von Hand zu exportieren?

Ja, über die Tag Manager API. Sie liefert die veröffentlichte Version eines Containers mit denselben Listen tag, trigger und variable, die auch im Export stehen. Der Unterschied liegt in der Verpackung: Der Export aus der Oberfläche legt die Version unter den Schlüssel containerVersion, die Antwort der API ist die Version selbst. Das Skript braucht deshalb nur an der Stelle, an der es die Datei einliest, eine kleine Anpassung.

Für den Zugriff genügt ein Dienstkonto mit Leseberechtigung (Read) auf den Container und dem Bereich tagmanager.readonly. Schreibrechte sind für eine Prüfung überflüssig und sollten fehlen: Ein Prüfauftrag, der nichts ändern kann, kann auch nichts zerbrechen. Das Dienstkonto wird in der Nutzerverwaltung des Containers mit seiner E-Mail-Adresse hinzugefügt wie eine Person.

Ein Unterschied zum Export bleibt zu beachten: Die veröffentlichte Version zeigt nicht, was in offenen Arbeitsbereichen gerade entsteht. Wer auch unveröffentlichte Namen prüfen will, liest zusätzlich die Arbeitsbereiche aus, die die API ebenfalls anbietet.

Wenn ein Container mehrere Websites bedient, gehört dann die Website nach vorn?

Nur wenn die meisten Fragen an den Container mit der Website beginnen. Die Plattform steht vorn, weil dort üblicherweise die Suche anfängt; bei einem Container für mehrere Auftritte kann dieser Ausgangspunkt die Website sein. Entscheidend ist, dass die Wahl einmal fällt und für alle Elemente gilt, denn ein Schema, das mal mit der Plattform und mal mit der Website beginnt, zerlegt die Sortierung genauso wie gemischte Trenner.

Lukas Wojcik

Lukas Wojcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Get in Touch

Briefly describe your project or inquiry for a tailored response. This site is protected by reCAPTCHA.

Kommentar schreiben

Abweichende Zahlen aus anderen Konten und Rückfragen zur Einrichtung sind hier willkommen.

Die E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit einem Stern versehen.

ALL ARTICLES & CATEGORIES

CCTV

Diese Rubrik per RSS verfolgen

Cloud & AI

Diese Rubrik per RSS verfolgen

Data Privacy

Alle 14 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Analytics

Alle 53 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Marketing

Alle 33 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

IT & Networks

Alle 18 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Music Production

Diese Rubrik per RSS verfolgen

Raspberry Pi

Diese Rubrik per RSS verfolgen

Smart Home

Alle 19 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Web Entwicklung

Diese Rubrik per RSS verfolgen

WordPress-Plugins & Tricks

Diese Rubrik per RSS verfolgen