# Tracking-Skript

> Senden Sie Workspace-Events und eigene Events von Ihrer Website mit dem Tracking-Skript von Emailit und einem öffentlichen Tracking-Schlüssel. Installieren Sie es, erfassen Sie Events, identifizieren Sie Besucher und beschränken Sie den Schlüssel auf Ihre Websites.

Das Tracking-Skript sendet Events von Ihrer Website: Produktaufrufe, Registrierungen, Artikel, die in einen Warenkorb gelegt werden. Es braucht keinen Einrichtungsaufruf; der Tracking-Schlüssel ist Teil seiner URL. Diese Seite erklärt, wie Sie einen Schlüssel erstellen, das Skript hinzufügen, Events erfassen und sie Ihren Besuchern zuordnen.

## Voraussetzungen

- Das Tracking-Skript ist in den Tarifen Pro, Business und Custom enthalten. Bei Pay as you go können Sie keine Tracking-Schlüssel erstellen, und die Anfragen des Skripts geben `403` zurück, auch mit Schlüsseln, die vor einem Wechsel zu Pay as you go erstellt wurden.
- Um Tracking-Schlüssel in der Weboberfläche zu erstellen, benötigen Sie im Workspace die Rolle **Admin**. Per API verwenden Sie einen Schlüssel mit **Full Access**.
- Sie müssen das HTML Ihrer Website bearbeiten oder in Ihrem Tag-Manager ein eigenes HTML-Tag hinzufügen können.

## Tracking-Schlüssel erstellen

Tracking-Schlüssel sind öffentlich. Weil sie in Ihren Webseiten stehen, kann sie jede Person lesen. Mit ihnen lassen sich nur Workspace-Events und eigene Events senden, nie Daten lesen, und Sie können sie auf Ihre eigenen Websites beschränken.

**Weboberfläche**

  1. **Tracking öffnen.** Öffnen Sie **Email API → Events**, wählen Sie den Tab **Tracking** und dann **Create tracking key**.

  2. **Schlüssel benennen.** Geben Sie unter **Name** einen Namen ein, der angibt, wo der Schlüssel verwendet wird, zum Beispiel `Online shop`.

  3. **Auf Ihre Websites beschränken.** Geben Sie unter **Allowed origins** Ihre Websites ein, eine pro Zeile, zum Beispiel `https://shop.example.com` oder `*.example.com`. Lassen Sie das Feld leer, um jede Website zu akzeptieren. Siehe [Erlaubte Websites](#allowed-sites).

  4. **Schlüssel erstellen.** Wählen Sie **Create**. Der Tab **Tracking** zeigt jetzt das Snippet mit Ihrem Schlüssel.

**API**

  Rufen Sie [Tracking-Schlüssel erstellen](/de/docs/api-reference/tracking-keys/create/) auf. Der Wert `key` aus der Antwort gehört in die URL des Skripts.

```bash
curl -X POST https://api.emailit.com/v2/tracking-keys \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Online shop", "allowed_origins": ["https://shop.example.com"] }'
```

## Skript hinzufügen

Fügen Sie beide Tags in jede Seite ein, am besten vor `</head>`, und ersetzen Sie `TRACKING_KEY` durch Ihren Schlüssel:

```html
<script>window.emailit=window.emailit||function(){(window._emailitq=window._emailitq||[]).push(arguments)};</script>
<script async src="https://js.emailit.com/track/TRACKING_KEY/events.js"></script>
```

Das erste Tag stellt Aufrufe, die vor dem Laden des Skripts erfolgen, in eine Warteschlange, sodass Sie `emailit(...)` sofort aufrufen können. Das Skript lädt asynchron, löst nie Fehler in Ihrer Seite aus und funktioniert auch über einen Tag-Manager.

- Wenn auch das [Formular-Skript](/de/docs/forms/install/) von Emailit auf der Seite ist, behalten Sie beide. Sie teilen sich `window.emailit`.
- Wenn Ihre Website eine Content Security Policy verwendet, erlauben Sie `https://js.emailit.com` in `script-src` und `connect-src`.

## Events erfassen

```javascript
// Custom event: any name after "c:", any properties
emailit("track", "c:product.viewed", { sku: "TS-42", price: 19.9 });

// Workspace event: checked against its definition
emailit("track", "w:customer.type", { segment: "b2b" });
```

Der Typ muss mit `c:` oder `w:` beginnen; andere Aufrufe ignoriert das Skript. Eigenschaften, die kein Objekt sind, werden als `{}` gesendet. Für Events, die früher passiert sind, können Sie ein drittes Argument mit `occurred_at` übergeben, einem Datum mit Uhrzeit nach ISO 8601.

Das Skript erfasst Seitenaufrufe nicht von selbst. Erfassen Sie die Seiten und Aktionen, die Ihnen wichtig sind, zum Beispiel ein Event `c:page.viewed` bei jedem Routenwechsel einer Single-Page-App.

### Shop-Befehle

Für Onlineshops hat das Skript außerdem die Befehle `product`, `cart`, `purchase` und `page`. Sie erfassen Produktaufrufe, Warenkörbe und Bestellungen für [Commerce](/de/docs/commerce/) und senden sie als System-Events `product.viewed`, `cart.updated` und `order.placed` an das Event-Log. Commerce ist in der Alpha und steht nur dem Emailit-Team offen; anderswo werden diese Befehle abgelehnt. Siehe [Shop verbinden](/de/docs/commerce/connect-your-shop/#record-shop-activity).

## Besucher identifizieren

Sobald Sie wissen, wer der Besucher ist, zum Beispiel nachdem er sich in seinem Konto angemeldet oder in eine Liste eingetragen hat, teilen Sie es dem Skript mit:

```javascript
emailit("identify", { email: "jane@example.com" });
// or, if you store Emailit contact IDs:
emailit("identify", { contact_id: "con_2wPq7Lm3XcN8bV1zKd4RtY6sHf9" });
```

Jedes spätere Event enthält diese E-Mail-Adresse oder Kontakt-ID, auf dieser Seite und bei späteren Besuchen, sodass Emailit es dem Kontakt zuordnen kann. Wenn sich der Besucher aus seinem Konto abmeldet, vergessen Sie ihn:

```javascript
emailit("reset");
```

`reset` erzeugt außerdem eine neue anonyme Besucher-ID, sodass die nächste Person an einem gemeinsam genutzten Computer nicht mit der vorherigen vermischt wird.

Events mit einer E-Mail-Adresse, die kein Kontakt hat, bleiben erhalten und erscheinen beim Kontakt, sobald es ihn gibt. Eine `contact_id`, die zu keinem Kontakt passt, wird ohne Fehler aus dem Event entfernt, damit sich mit einem öffentlichen Schlüssel nicht testen lässt, welche Kontakt-IDs existieren.

Jeder, der Ihren Tracking-Schlüssel kennt, kann `identify` mit einer beliebigen Adresse aufrufen, daher lässt Emailit Automatisierungen nicht von den Events des Skripts steuern. Sie werden aufgezeichnet, erscheinen beim Kontakt und erreichen Webhooks, starten aber keine [Durchläufe von Automatisierungen](/de/docs/automations/triggers/#custom-event), beenden keine und bringen keine weiter. Senden Sie Events, die das tun sollen, mit der [Events-API](/de/docs/events/send-events/) von Ihrem Server. Jedes Event aus dem Skript, das einen Kontakt nennt, hat `identity_verified`: Der Wert ist nur dann `true`, wenn ein signierter Link in einer Ihrer E-Mails den Besucher identifiziert hat, was Teil der Alpha von [Commerce](/de/docs/commerce/connect-your-shop/#identify-visitors) ist, und diese Events steuern Automatisierungen sehr wohl.

## Was das Skript sendet

Jedes Event enthält neben Ihrem Typ und Ihren Eigenschaften:

| Feld | Inhalt |
| --- | --- |
| `anonymous_id` | Eine zufällige Besucher-ID (`anon_…`), im Local Storage des Browsers gespeichert. |
| `email`, `contact_id` | Was Sie an `identify` übergeben haben, falls überhaupt etwas. |
| `context.page` | `url`, `path`, `title` und `referrer` der Seite. |
| `context.campaign` | Die UTM-Parameter der Seite (`utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content`), als `source`, `medium`, `name`, `term` und `content`. |
| `context.locale`, `context.timezone` | Sprache und Zeitzone des Browsers. |

Emailit ergänzt Events, die einen Kontakt nennen, um `identity_verified` (siehe [Besucher identifizieren](#identify-visitors)) und speichert den User-Agent des Browsers. IP-Adressen speichert es nicht, und das Skript setzt keine Cookies. Es legt die Besucher-ID unter `emailit:aid` und die Identität unter `emailit:identity` im Local Storage ab; ist Local Storage blockiert, gelten sie nur für die aktuelle Seite.

Events werden kurz gesammelt und zusammen gesendet, höchstens 20 auf einmal. Wenn der Besucher die Seite verlässt, werden die übrigen mit `sendBeacon` gesendet.

Wenn Sie auf Ihrer Website eine Einwilligung für Analysen benötigen, laden Sie das Skript erst, nachdem der Besucher eingewilligt hat.

## Erlaubte Websites

`allowed_origins` legt fest, welche Websites mit einem Schlüssel Events senden können. Jeder Eintrag hat eine dieser Formen:

| Eintrag | Passt auf |
| --- | --- |
| `https://shop.example.com` | Genau diesen Ursprung: Schema, Host und Port. |
| `shop.example.com` | Diesen Host mit jedem Schema und Port. |
| `*.example.com` | `example.com` und jede Subdomain. |

Eine leere Liste akzeptiert jede Website. Emailit prüft den Header `Origin`, den Browser bei jeder Anfrage mitsenden, sodass andere Websites keine Events mit Ihrem Schlüssel senden können. Ein Skript außerhalb eines Browsers kann allerdings jeden beliebigen Header setzen. Behandeln Sie Browser-Events deshalb als nicht vertrauenswürdige Eingaben und senden Sie Bestellungen und Zahlungen [aus Ihrem Backend](/de/docs/events/send-events/).

## Ungültige Events

Anders als die API speichert der Endpunkt des Skripts die gültigen Events einer Anfrage, auch wenn andere ungültig sind. Ungültige Events werden verworfen, zum Beispiel ein `w:`-Event mit einer Eigenschaft vom falschen Typ oder ein Event eines neuen Typs, sobald der Workspace so viele [Event-Typen](/de/docs/events/#limits) nutzt, wie sein Tarif umfasst. Mit dem [Debug-Modus](#debug) sehen Sie, warum.

## Debug-Modus

Sie aktivieren die Protokollierung in der Browserkonsole auf eine dieser Arten:

- Rufen Sie `emailit("debug", true)` auf.
- Fügen Sie dem Script-Tag `data-debug` hinzu.
- Öffnen Sie die Seite mit `?emailit_debug=1` in der URL.

Die Konsole zeigt dann jedes Event und die Antwort von Emailit, einschließlich der Gründe für abgelehnte Events.

## Fehlerbehebung

| Antwort in der Konsole | Ursache | Lösung |
| --- | --- | --- |
| `403` `Origin not allowed for this tracking key` | Die Website der Seite steht nicht unter **Allowed origins**. | Fügen Sie sie hinzu, z. B. sowohl `https://example.com` als auch `https://www.example.com`, oder verwenden Sie `*.example.com`. |
| `403` `This tracking key is disabled` | Der Schlüssel ist deaktiviert. | Aktivieren Sie ihn im Tab **Tracking**. |
| `403` `Website tracking is included with Pro and Business.` | Der Workspace ist im Tarif Pay as you go. | Wechseln Sie zu Pro oder Business. |
| `404` `Unknown tracking key` | Der Schlüssel in der URL des Skripts wurde gelöscht oder falsch eingegeben. | Kopieren Sie das Snippet erneut aus dem Tab **Tracking**. |
| `422` mit allen Events in `rejected` | Keines der Events war gültig. | Prüfen Sie die Gründe in `rejected`. |
| `429` | Der Schlüssel hat in kurzer Zeit zu viele Events gesendet. | Senden Sie weniger Events pro Besucher, z. B. kein Event bei jedem Scrollen oder jeder Mausbewegung. |
| Gar nichts | Ein Werbe- oder Tracking-Blocker hat das Skript gestoppt, oder es ist nicht auf der Seite. | Testen Sie in einem Browser ohne Blocker und prüfen Sie, ob das Snippet vorhanden ist. |

## Siehe auch

  - [Event-Tracking](/de/docs/events/): Scopes, Namen und wohin Events gelangen.
  - [Workspace-Events](/de/docs/events/workspace-events/): Events und ihre Eigenschaften definieren.
  - [API für Tracking-Schlüssel](/de/docs/api-reference/tracking-keys/): Schlüssel erstellen, aktualisieren und löschen.
  - [Events aus Ihrem Backend senden](/de/docs/events/send-events/): Für Bestellungen und Zahlungen.

---
Quelle: https://emailit.com/de/docs/events/tracking-script/
