# Serversided Tracking  - Einbindung im GTM

# Server-to-Server Tracking

Es ist möglich, neben einem clientseitigen Tracking auch ein serverseitiges Tracking zu implementieren und dieses über den Google Tag Manager steuern zu lassen.

Um ein First-Party-Tracking Server-to-Server zu ermöglichen, sollte eine Subdomain eingerichtet werden. Diese dient als **Server Endpoint** und ist notwendig, damit das `HttpOnly`-Cookie auf der Domain des Werbetreibenden gespeichert werden kann.

Um den Traffic nicht über die Google Cloud zu leiten, wird ein eigener Tracking-Server empfohlen.

Weitere Informationen zur manuellen Einrichtung findest du hier:

- **Leitfaden für die manuelle Einrichtung**
- **Google Tag Manager – Server-side**
- **Google for Developers**

---

## Funktionsweise

Für das serverseitige Tracking werden Informationen von der Website an den serverseitigen Container übergeben. Dieser kommuniziert anschließend mit einem sogenannten **Client**.

---

# Übergabe der Daten an den serverseitigen Container durch `gtag.js`

```html
 1  <!-- Global site tag (gtag.js) - Google Analytics -->
 2
 3  <script async src="https://www.googletagmanager.com/gtag/js?id=MEASUREMENT_ID"></script>
 4
 5  <script>
 6  window.dataLayer = window.dataLayer || [];
 7
 8  function gtag() {
 9      dataLayer.push(arguments);
10  }
11
12  gtag('js', new Date());
13
14  gtag('config', 'MEASUREMENT_ID', {
15      transport_url: 'https://Ihresubdomain.de'
16  });
17
18  gtag('event', 'checkout', {
19      token: 'ordertoken',
20      campaign_id: 'campaign_id',
21      trigger_id: 'trigger_id',
22      basket: JSON.stringify([
23          {
24              article_number: 'article_number_1',
25              amount: 'article_amount_1',
26              price: '100.00',
27              productname: 'article_name_1',
28              category: 'article_category',
29              additional: {
30                  "VARIABLE": "VALUE",
31                  "VARIABLE2": "VALUE2"
32              }
33          },
34          {
35              article_number: 'article_number_2',
36              amount: 'article_amount_2',
37              price: '15.00',
38              productname: 'article_name_2',
39              category: 'article_category',
40              additional: {
41                  "VARIABLE": "VALUE",
42                  "VARIABLE2": "VALUE2"
43              }
44          },
45          {
46              article_number: 'article_number_N',
47              amount: 'article_amount_N',
48              price: '110.00',
49              productname: 'article_name_N',
50              category: 'article_category',
51              additional: {
52                  "VARIABLE": "VALUE",
53                  "VARIABLE2": "VALUE2"
54              }
55          }
56      ])
57  });
58  </script>

```

## Parameter

<table id="bkmrk-parameter-beschreibu"><thead><tr><th>Parameter</th><th>Beschreibung</th></tr></thead><tbody><tr><td>`MEASUREMENT_ID`</td><td>Muss durch die Google Analytics 4 oder Universal Analytics ID ersetzt werden.</td></tr><tr><td>`transport_url`</td><td>URL des Tagging-Servers (First-Party-Subdomain).</td></tr></tbody></table>

> **Hinweis:** Alle Parameter im Beispiel müssen dynamisch befüllt werden.

---

# Client im serverseitigen Container einrichten

Im nächsten Schritt wird ein Client im serverseitigen Container eingerichtet. Dieser verarbeitet die übergebenen Daten und erstellt das Event `createPurchase`, welches schließlich den serverseitigen Trackingcode aufruft.

Dies erfolgt über einen **Basket-Tracking-Aufruf**, der in einem **Custom Tag** hinterlegt wird.

---

## Client einrichten

Im **Server Container Account** wird im Reiter **Clients** zusätzlich zum bereits vorhandenen **GA4 Client** ein **Google Tag Manager: Web Container Client** eingerichtet.

Innerhalb dieses Clients werden mehrere **Tags** und **Trigger** definiert.

Diese übernehmen folgende Aufgaben:

- Setzen des notwendigen First-Party-Cookies
- Verarbeitung der Trackinginformationen (`emid`)
- Auslösen des eigentlichen Trackingaufrufs

---

# Setzen des First-Party-Cookies

Sobald Daten an den Client des Server-Containers gesendet werden, kann anhand bestimmter Kriterien eine Aktion ausgelöst werden.

Relevant ist in diesem Fall die **`emid`** als Tracking-Parameter, der in der Regel via "&amp;emid" übergeben wird.

Der übermittelte Wert muss im Rahmen der HTTP-Response als Cookie gespeichert werden.

## Variable anlegen

Es wird zunächst eine Variable vom Typ **URL** angelegt.

Beispielsweise:

- Name: `emid Parameter`
- Komponententyp: **Suchanfrage**
- Suchanfrageschlüssel: `emid`

---

## Cookie setzen

Der Wert wird anschließend als `HttpOnly`-Cookie im First-Party-Kontext gespeichert.

Dies erfolgt über die `setCookie`-API.

```javascript
const setCookie = require('setCookie');

setCookie('emid', '{{emid Parameter}}', {
    'max-age': 2592000,
    httpOnly: true,
    secure: true,
    samesite: 'none'
});

```

### Bedeutung der Einstellungen

<table id="bkmrk-einstellung-beschrei"><thead><tr><th>Einstellung</th><th>Beschreibung</th></tr></thead><tbody><tr><td>`max-age`</td><td>30 Tage in Sekunden</td></tr><tr><td>`httpOnly`</td><td>Verhindert das Auslesen des Cookies durch JavaScript</td></tr><tr><td>`secure`</td><td>Cookie wird ausschließlich über HTTPS übertragen</td></tr><tr><td>`samesite: none`</td><td>Erlaubt die Verwendung im Cross-Site-Kontext</td></tr></tbody></table>

Damit das Tag ausgeführt wird, wird ein entsprechender **Page View Trigger** verwendet.

---

# Der eigentliche Trackingaufruf

Nachdem der Benutzer die Bestellung erfolgreich abgeschlossen hat, muss im Client ein weiteres Tag ausgeführt werden.

Dieses liest

- die per `gtag()` in den `dataLayer` geschriebenen Daten,
- sowie die `emid` aus dem zuvor gesetzten First-Party-Cookie

aus und übergibt diese an den serverseitigen Conversion-Aufruf.

---

# Dokumentationshilfen zum serverseitigen Tagging

Weitere Informationen stellt Google in der offiziellen Dokumentation bereit: [Google Tag Manager – Server-side](https://developers.google.com/tag-platform/tag-manager/server-side?hl=de)