Die Datenschicht

Die Datenschicht ist ein Objekt, das von Google Tag Manager und gtag.js verwendet wird, um Informationen an Tags zu übergeben. Ereignisse oder Variablen können über die Datenschicht übergeben werden und Trigger können basierend auf den Werten von Variablen eingerichtet werden.

Wenn Sie beispielsweise ein Remarketing-Tag auslösen, wenn der Wert von purchase_total größer als 100 € ist, oder basierend auf bestimmten Ereignissen, z. B. wenn auf eine Schaltfläche geklickt wird, kann Ihre Datenschicht so konfiguriert werden, dass diese Daten für Ihre Tags verfügbar sind. Das Datenschichtobjekt ist als JSON strukturiert. Beispiel:

{
  event: "checkout_button",
  gtm: {
    uniqueEventId: 2,
    start: 1639524976560,
    scrollThreshold: 90,
    scrollUnits: "percent",
    scrollDirection: "vertical",
    triggers: "1_27"
  },
  value: "120"
}

Google-Tags sind so konzipiert, dass sie auf Informationen verweisen, die der Datenebene auf organisierte und vorhersehbare Weise hinzugefügt werden, anstatt Variablen, Transaktionsinformationen, Seitenkategorien und andere Signale zu parsen, die auf Ihrer Seite verteilt sind. Eine Datenschichtimplementierung mit Variablen und zugehörigen Werten sorgt dafür, dass relevante Daten verfügbar sind, wenn sie für Ihre Tags benötigt werden.

Installation

Für Tag Manager-Installationen auf Webseiten müssen Sie eine Datenschicht erstellen. Im folgenden Codebeispiel sehen Sie, wo die Datenschicht eingerichtet wird, bevor Tag Manager geladen wird.

<script>
window.dataLayer = window.dataLayer || [];
</script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->

In Standardimplementierungen von gtag.js, bei denen das Tag aus dem Produkt kopiert und einer Webseite hinzugefügt wurde, wird der Code zum Einrichten der Datenschicht bereitgestellt. Fügen Sie bei benutzerdefinierten Implementierungen des Google-Tags den Datenschichtcode am Anfang des Scripts ein, wie im folgenden Codebeispiel gezeigt:

<!-- Google tag -->
<script async src="https://www.googletagmanager.com/gtm.js?id=TAG_ID"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
</script>

So werden Informationen in Datenschichten verarbeitet

Wenn ein Container geladen wird, beginnt Tag Manager mit der Verarbeitung aller in der Warteschlange befindlichen Push-Nachrichten der Datenschicht. Tag Manager verarbeitet Nachrichten nach dem FIFO-Prinzip (First In, First Out): Jede Nachricht wird einzeln in der Reihenfolge verarbeitet, in der sie empfangen wurde. Wenn die Nachricht ein Ereignis ist, werden alle Tags mit erfüllten Triggerbedingungen ausgelöst, bevor Tag Manager mit der nächsten Nachricht fortfährt.

Wenn ein gtag()- oder dataLayer.push()-Aufruf durch Code auf einer Seite, in einer benutzerdefinierten Vorlage oder in einem benutzerdefinierten HTML-Tag erfolgt, wird die zugehörige Nachricht in die Warteschlange gestellt und verarbeitet, nachdem alle anderen ausstehenden Nachrichten ausgewertet wurden. Das bedeutet, dass aktualisierte Datenschichtwerte nicht garantiert für das nächste Ereignis verfügbar sind. In diesen Fällen sollten Sie einer Nachricht einen Ereignisnamen hinzufügen, wenn sie an die Datenschicht übertragen wird, und dann mit einem Trigger für benutzerdefinierte Ereignisse auf diesen Ereignisnamen warten.

Datenebene mit Event-Handlern verwenden

Das Objekt dataLayer verwendet den Befehl event, um das Senden von Ereignissen zu initiieren.

Das Google-Tag und Tag Manager verwenden eine spezielle Datenschichtvariable namens event, die von JavaScript-Ereignis-Listenern verwendet wird, um Tags auszulösen, wenn ein Nutzer mit Websiteelementen interagiert. Sie können beispielsweise ein Conversion-Tracking-Tag auslösen, wenn ein Nutzer auf eine Schaltfläche zur Kaufbestätigung klickt. Ereignisse können immer dann aufgerufen werden, wenn ein Nutzer mit Websiteelementen wie Links, Schaltflächen, Scrollen usw. interagiert.

Diese Funktion wird durch den Aufruf von dataLayer.push() erreicht, wenn ein Ereignis auftritt. Die Syntax zum Senden eines Ereignisses mit dataLayer.push() lautet:

dataLayer.push({'event': 'event_name'});

Dabei ist event_name ein String, der das Ereignis beschreibt, z. B. 'login', 'purchase' oder 'search'.

Verwenden Sie dataLayer.push(), um Ereignisdaten zu senden, wenn eine Aktion auftritt, die Sie messen möchten. Wenn Sie beispielsweise ein Ereignis senden möchten, wenn ein Nutzer auf einen Button klickt, ändern Sie den onclick-Handler des Buttons so, dass dataLayer.push() aufgerufen wird:

<button onclick="dataLayer.push({'event': 'login'});">Button 1</button>

Sie können Datenschichtvariablen dynamisch in die Datenschicht übertragen, um Informationen wie in ein Formular eingegebene oder ausgewählte Werte, Metadaten zu einem Video, das der Besucher abspielt, die Farbe eines vom Besucher angepassten Produkts (z. B. eines Autos), die Ziel-URLs von angeklickten Links usw. zu erfassen.

Wie bei Ereignissen wird diese Funktion durch Aufrufen der push() API erreicht, um Datenebenenvariablen in der Datenebene hinzuzufügen oder zu ersetzen. Die grundlegende Syntax zum Festlegen dynamischer Datenschichtvariablen lautet:

dataLayer.push({'variable_name': 'variable_value'});

Dabei ist 'variable_name' ein String, der den Namen der festzulegenden Datenschichtvariablen angibt, und 'variable_value' ein String, der den Wert der festzulegenden oder zu ersetzenden Datenschichtvariablen angibt.

Wenn Sie beispielsweise eine Datenschichtvariable mit einer Farbpräferenz festlegen möchten, wenn ein Besucher ein Tool zur Produktanpassung verwendet, können Sie die folgende dynamische Datenschichtvariable per Push übertragen:

dataLayer.push({'color': 'red'});

Ein Push, mehrere Variablen

Sie können mehrere Variablen und Ereignisse gleichzeitig übertragen:

dataLayer.push({
  'color': 'red',
  'conversionValue': 50,
  'event': 'customize'
});

Datenschichtvariablen beibehalten

Wenn Sie Datenschichtvariablen zwischen Webseiten beibehalten möchten, rufen Sie dataLayer.push() auf, nachdem die Datenschicht bei jedem Seitenaufbau instanziiert wurde, und übertragen Sie die Variablen in die Datenschicht. Wenn diese Datenschichtvariablen in Tag Manager verfügbar sein sollen, wenn der Container geladen wird, fügen Sie einen dataLayer.push()-Aufruf über dem Tag Manager-Containercode ein, wie im folgenden Beispiel gezeigt:

<script>
window.dataLayer = window.dataLayer || [];

dataLayer.push({
  'event': 'Pageview',
  'pagePath': 'https://www.googleanalytics.dev/pancakes',
  'pageTitle': 'Pancake Event Signup',
  'visitorType': 'customer'
});
</script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->

Jede im Datenschichtobjekt deklarierte Variable bleibt nur so lange erhalten, wie der Besucher auf der aktuellen Seite bleibt. Datenschichtvariablen, die für mehrere Seiten relevant sind (z. B. visitorType), müssen auf jeder Seite Ihrer Website in der Datenschicht deklariert werden. Sie müssen nicht auf jeder Seite dieselben Variablen in die Datenschicht einfügen, sollten aber eine einheitliche Namenskonvention verwenden. Wenn Sie also die Seitenkategorie auf der Registrierungsseite mit einer Variablen namens pageCategory festlegen, sollten Sie die Variable pageCategory auch auf Ihren Produkt- und Kaufseiten verwenden.

Fehlerbehebung

Hier sind einige Tipps zur Fehlerbehebung bei der Datenschicht:

Überschreiben Sie die Variable window.dataLayer nicht: Wenn Sie die Datenschicht direkt verwenden (z. B. dataLayer = [{'item': 'value'}]), werden alle vorhandenen Werte in dataLayer überschrieben. Bei Tag Manager-Installationen sollte die Datenschicht so weit oben im Quellcode wie möglich, also über dem Container-Snippet, mit window.dataLayer = window.dataLayer || []; instanziiert werden. Nachdem die dataLayer deklariert wurde, können Sie mit dataLayer.push({'item': 'value'}) zusätzliche Werte hinzufügen. Wenn diese Werte beim Seitenaufbau für Tag Manager verfügbar sein müssen, muss sich der dataLayer.push()-Aufruf ebenfalls über dem Tag Manager-Containercode befinden.

Beim Objektnamen dataLayer wird zwischen Groß- und Kleinschreibung unterschieden: Wenn Sie versuchen, eine Variable oder ein Ereignis ohne die richtige Groß- und Kleinschreibung zu übertragen, funktioniert die Übertragung nicht.

datalayer.push({'pageTitle': 'Home'});    // Bad (datalayer in lowercase)
dataLayer.push({'pageTitle': 'Home'});    // Good (dataLayer in camel case)

dataLayer.push muss mit gültigen JavaScript-Objekten aufgerufen werden. Alle Variablennamen der Datenschicht sollten in Anführungszeichen gesetzt werden.

dataLayer.push({new-variable: 'value'});      // Bad - no quote marks
dataLayer.push({'new-variable': 'value'});    // Good - proper quote marks

Variablennamen auf allen Seiten einheitlich halten: Wenn Sie auf verschiedenen Seiten unterschiedliche Variablennamen für dasselbe Konzept verwenden, können Ihre Tags nicht an allen vorgesehenen Stellen einheitlich ausgelöst werden.

Schlecht:

// Homepage:
dataLayer.push({'visitorType': 'low-value'});

// Checkout Page:
dataLayer.push({'visitor_type': 'high-value'});

Gut:

// Homepage:
dataLayer.push({'visitorType': 'low-value'});

// Checkout Page:
dataLayer.push({'visitorType': 'high-value'});

Datenebene umbenennen

Der Standardname des Datenschichtobjekts, das vom Google-Tag oder Tag Manager initiiert wird, lautet dataLayer. Wenn Sie einen anderen Namen für Ihre Datenschicht verwenden möchten, können Sie den Wert des Datenschichtparameters im Google-Tag oder im Tag Manager-Container-Snippet mit dem gewünschten Namen bearbeiten.

Tag Manager

Ersetzen Sie den Parameterwert der Datenschicht (unten hervorgehoben) in Ihrem Container-Snippet durch einen Namen Ihrer Wahl.

<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','myNewName','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->

gtag.js

Fügen Sie der URL einen Suchparameter mit dem Namen „l“ hinzu, um den neuen Namen der Datenschicht festzulegen, z. B. l=myNewName. Aktualisieren Sie alle Instanzen von dataLayer im Google-Tag-Snippet auf den neuen Namen.

<!-- Google tag -->
<script async src="https://www.googletagmanager.com/gtm.js?id=TAG_ID&l=myNewName"></script>
<script>
  window.myNewName = window.myNewName || [];
  function gtag(){myNewName.push(arguments);}
  gtag('js', new Date());
</script>

Nach der Umbenennung müssen alle Verweise auf die Datenschicht (z.B. beim Deklarieren der Datenschicht über dem Snippet oder beim Übertragen von Ereignissen oder dynamischen Datenschichtvariablen mit dem Befehl .push() in die Datenschicht) an den benutzerdefinierten Namen der Datenschicht angepasst werden:

<script>
  window.myNewName = window.myNewName || [];
  window.myNewName.push({'variable_name': 'variable_value'});
</script>

Benutzerdefinierte Datenebenenmethoden

Wenn Sie eine Funktion an die Datenschicht übertragen, wird sie mit this auf ein abstraktes Datenmodell gesetzt aufgerufen. Mit diesem abstrakten Datenmodell können Werte in einem Schlüssel/Wert-Speicher abgerufen und festgelegt werden. Außerdem bietet es eine Möglichkeit, die Datenschicht zurückzusetzen.

festgelegt

Mit der Funktion set im abstrakten Datenmodell können Sie Werte festlegen, die über „get“ abgerufen werden sollen.

window.dataLayer.push(function() {
  this.set('time', new Date());
});

get

Mit der Funktion get im abstrakten Datenmodell können Sie festgelegte Werte abrufen.

window.dataLayer.push(function() {
  const existingTime = this.get('time');
  if (existingTime !== null) {
    // Change behavior based on whether or not this value exists...
  } else {
    // ...
  }
});

Zurücksetzen

Mit der Funktion reset im abstrakten Datenmodell können Sie die Daten in der Datenschicht zurücksetzen. Das ist besonders nützlich bei Seiten, die geöffnet bleiben und bei denen die Größe der Datenschicht im Laufe der Zeit zunimmt. Verwenden Sie den folgenden Code, um die Datenschicht zurückzusetzen:

window.dataLayer.push(function() {
  this.reset();
});