> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aftersell.com/llms.txt
> Use this file to discover all available pages before exploring further.

# So verwendest du Direct-to-Checkout-UTM-Links

> Erfahre, wie du Post-Purchase-Funnels über UTM-Parameter auslöst, einschließlich der Einrichtung für Direct-to-Checkout-Links

Aftersell unterstützt das Auslösen von Funnels basierend auf UTM-Parametern – eine optionale Funktion, die speziell für fortgeschrittene Anwendungsfälle gedacht ist. Du kannst deinen Funnel so konfigurieren, dass er aktiviert wird, wenn ein Kunde deine Website mit einem bestimmten UTM-Query-String besucht.

Diese Einrichtung ist optional und in der Regel nur für fortgeschrittene Tracking-Anforderungen erforderlich, etwa Direct-to-Checkout-Links oder kampagnenspezifische Angebote.

<div id="how-utm-triggers-work">
  ## Wie UTM-Trigger funktionieren
</div>

UTM-Trigger ermöglichen es dir, bestimmte Post-Purchase-Funnels basierend auf UTM-Parametern in der URL anzuzeigen. Das ist nützlich für:

* **Kampagnenspezifische Angebote** – Zeige je nach Marketingkampagne unterschiedliche Upsells an
* **Direct-to-Checkout-Links** – Löse Funnels aus, wenn Kunden die Storefront überspringen
* **Kanal-Attribution** – Personalisiere Angebote basierend auf der Traffic-Quelle (E-Mail, Social Media, Anzeigen)
* **A/B-Tests** – Teste unterschiedliche Angebote für verschiedene Kampagnenvarianten

<div id="quick-start-basic-utm-trigger-setup">
  ## Schnellstart: Grundlegende UTM-Trigger-Einrichtung
</div>

Für Standard-Storefront-Besuche (nicht Direct-to-Checkout) kannst du UTM-Trigger über das Aftersell-App-Embed einrichten. Wie du schnell mit UTM-Triggern startest, siehst du in diesem Video:

<iframe src="https://go.screenpal.com/player/cOfD38nOD9i" title="How to set up UTM Triggers" allowFullScreen style={{ width: '100%', aspectRatio: '16/9', borderRadius: '12px' }} />

<div id="enable-the-utm-app-embed">
  ### Das UTM-App-Embed aktivieren
</div>

So verfolgst du UTM-Parameter auf Storefront-Seiten:

1. Gehe in deinem Shopify-Adminbereich zu **Online Store > Themes**
2. Klicke bei deinem aktiven Theme auf **Customize**
3. Klicke im Theme-Editor auf das **App embeds**-Symbol (Puzzleteil) in der linken Seitenleiste
4. Suche **Aftersell UTM Tracker** und schalte ihn **ein**
5. Klicke auf **Save**

Nach der Aktivierung erfasst Aftersell automatisch UTM-Parameter, wenn Kunden deine Storefront über UTM-Links besuchen.

<div id="configure-utm-triggers-in-your-funnel">
  ### UTM-Trigger in deinem Funnel konfigurieren
</div>

Nach dem Aktivieren des App-Embeds:

1. Gehe im Aftersell-Adminbereich zu **Post-purchase Funnels**
2. Erstelle oder bearbeite einen Funnel
3. Füge im Abschnitt **Triggers** einen **UTM Parameter**-Trigger hinzu
4. Konfiguriere den UTM-Parameter und den Wert, der übereinstimmen soll
5. Speichere deinen Funnel

<div id="supported-utm-parameters">
  ## Unterstützte UTM-Parameter
</div>

Aftersell unterstützt die folgenden Standard-UTM-Parameter:

* `utm_source` – Identifiziert die Traffic-Quelle (z. B. google, newsletter, facebook)
* `utm_medium` – Identifiziert das Marketingmedium (z. B. email, cpc, social)
* `utm_campaign` – Identifiziert die konkrete Kampagne (z. B. spring\_sale, product\_launch)
* `utm_term` – Identifiziert bezahlte Suchbegriffe (z. B. running+shoes)
* `utm_content` – Unterscheidet ähnliche Inhalte oder Links (z. B. banner\_ad, text\_link)
* `utm_id` – Identifiziert die Kampagnen-ID (z. B. campaign\_123)

Alle sechs Parameter werden erfasst und können zum Auslösen von Funnels verwendet werden.

<div id="partial-field-matching">
  ## Teilweise Feldübereinstimmung
</div>

Bei der Konfiguration von UTM-Triggern unterstützt Aftersell **teilweise Übereinstimmung** für UTM-Parameterwerte. Das bedeutet:

* ✅ **Trigger-Wert:** `spring` → **Trifft auf:** `spring_sale`, `spring_2026`, `early_spring`
* ✅ **Trigger-Wert:** `email` → **Trifft auf:** `email_newsletter`, `promotional_email`
* ✅ **Trigger-Wert:** `sale` → **Trifft auf:** `spring_sale`, `flash_sale`, `sale_2026`

Diese Flexibilität ermöglicht es dir, breitere Trigger zu erstellen, die mehrere Kampagnenvarianten abdecken, ohne für jede einzelne einen separaten Trigger anzulegen.

**Beispiel:** Wenn du einen Trigger für `utm_campaign` enthält `sale` festlegst, greift er bei jeder Kampagne mit „sale“ im Namen, etwa `spring_sale`, `summer_sale` oder `flash_sale_2026`.

<div id="direct-to-checkout-utm-links">
  ## Direct-to-Checkout-UTM-Links
</div>

Die im Video oben gezeigte Grundeinrichtung unterstützt **keine** Links, die Kunden **direkt zum Checkout** führen. Standardmäßig kann Aftersell UTM-Parameter nur auf Storefront-Seiten erkennen. Das liegt daran, dass es auf einem Theme-App-Embed basiert, das nur auf Storefront-Seiten funktioniert, nicht aber auf der Checkout- oder Thank-You-Seite.

<div id="enable-utm-tracking-on-checkout-pages">
  ### UTM-Tracking auf Checkout-Seiten aktivieren
</div>

Um UTM-Parameter auf der Checkout-Seite zu verfolgen (für Direct-to-Checkout-Links), musst du **ein Shopify-Pixel** zu deinem Store hinzufügen.

⚠️ **Wichtige Einschränkungen:**

* Diese Einrichtung setzt voraus, dass der Besucher beim Erreichen des Checkouts über einen UTM-Link einen **Cart-Token** hat. Ohne Cart-Token werden die UTM-Daten nicht erfasst.
* **Express-Checkout-Methoden (Shop Pay, Apple Pay, Google Pay) werden nicht unterstützt**, da sie den Warenkorb umgehen und keinen Cart-Token erzeugen. Kunden, die den Express-Checkout verwenden, lösen keine UTM-basierten Funnels aus.

<div id="setting-up-the-shopify-pixel">
  ### Das Shopify-Pixel einrichten
</div>

Folge dieser Schritt-für-Schritt-Anleitung, um Direct-to-Checkout-UTM-Tracking einzurichten:

1. Gehe in deinem Shopify-Adminbereich zu **Settings > Customer Events**.
2. Klicke auf **Add Custom Pixel** und gib ihm einen beliebigen Namen.
3. Wähle im **Permission**-Dropdown die Option **Analytics**. Das ist die einzige erforderliche Berechtigung.
4. Beim **Data Sale**-Dropdown kannst du **Data collected does not qualify as data sale** wählen. Aftersell behandelt alle erfassten Daten vertraulich und teilt sie mit niemandem außer dir.
5. Füge im erscheinenden Code-Editor den unten bereitgestellten Code ein.
6. Klicke auf **Save** und dann auf **Connect**.

```text theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
/**  
 * IMPORTANT: This pixel can only fire on sessions where the  
 * customer has a cart object, otherwise it will be skipped.  
 * For example, clicking "Buy Now" on a product page skips the cart,  
 * going directly to checkout.  
**/  
function processData({event, cartToken}) {  
  // TODO: Edit MYSHOPIFY_DOMAIN to your domain. E.g.  
  // const MYSHOPIFY_DOMAIN = 'example-store.myshopify.com';  
  const MYSHOPIFY_DOMAIN = '';  
  
  const enableDebug = false;  
  
  // DO NOT EDIT PAST HERE  
  const SESSION_STORAGE_KEY = 'as-customer-trigger-data';  
  const HOST = 'https://start.aftersell.app';  
  
  if (!MYSHOPIFY_DOMAIN) {  
    if (enableDebug) {  
      console.log("UTM pixel didn't fire because of missing Shopify domain");  
    }  
    return;  
  }  
  if (!cartToken) {  
    if (enableDebug) {  
      console.log("UTM pixel didn't fire because of missing cart token");  
    }  
  }  
    
  let existingCustomerData = null;  
  try {  
      existingCustomerData = JSON.parse(  
          sessionStorage.getItem(SESSION_STORAGE_KEY) || 'null'  
      );  
  } catch (ignore) {  
    if (enableDebug) {  
      console.log("UTM pixel didn't fire because malformed user data json");  
    }  
  }  
    
  const allowedUrlParams = [  
        'utm_source',  
        'utm_medium',  
        'utm_campaign',  
        'utm_term',  
        'utm_id',  
        'utm_content',  
    ];  
    
  const searchParams = new URLSearchParams(event.context.window.location.search);  
  let hasCustomerData = false;  
  const customerData = {};  
  for (const param of allowedUrlParams) {  
    const paramValue = searchParams.get(param) || existingCustomerData?.[param];  
    if (paramValue) {  
        hasCustomerData = true;  
        customerData[param] = paramValue;  
    }  
  }  
  
  if (hasCustomerData) {  
    sessionStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(customerData));  
  
    const postBody = {  
      shop: MYSHOPIFY_DOMAIN,  
      cartToken,  
      checkoutToken: event.data.checkout.token ?? undefined,  
      customerTriggerData: customerData,  
    };  
  
    if (enableDebug) {  
      console.log("UTM pixel fired with the following data:", postBody);  
    }  
      
    fetch(`\${HOST}/api/v1/storefrontSessions`, {  
        method: 'POST',  
        headers: {  
            'Content-Type': 'application/json',  
        },  
        body: JSON.stringify(postBody),  
    });  
  } else {  
    if (enableDebug) {  
      console.log("UTM pixel didn't fire because there was no data to send");  
    }  
  }  
}  
  
analytics.subscribe('checkout_started', (event) => {  
   // minimum realistic time between adding item to cart and clicking checkout  
    const COOKIE_POLLING_INTERVAL_MS = 500;  
  
    let currentCookieValue = getCookieValue({ cookie: document.cookie, cookieName: 'cart' });  
    processData({event, cartToken: currentCookieValue});  
  
    setInterval(() => {  
        const newCookieValue = getCookieValue({ cookie: document.cookie, cookieName: 'cart' });  
        if (newCookieValue !== currentCookieValue) {  
            currentCookieValue = newCookieValue;  
            processData({event, cartToken: newCookieValue});  
        }  
    }, COOKIE_POLLING_INTERVAL_MS);  
});  
  
function getCookieValue({ cookie, cookieName }) {  
    const cartCookieRegex = new RegExp(`^\${cookieName}=`);  
    const cartCookie = cookie  
        .split(';')  
        .map((val) => val.trim())  
        .find((val) => cartCookieRegex.test(val));  
    if (!cartCookie) return null;  
    const cartCookieValue = cartCookie.replace(`\${cookieName}=`, '');  
    return cartCookieValue;  
}
```

**Wichtige Hinweise zur Konfiguration:**

* **Bearbeite `MYSHOPIFY_DOMAIN`:** Du musst den leeren String durch die myshopify.com-Domain deines Stores ersetzen (z. B. `'example-store.myshopify.com'`)
* **Debug-Modus aktivieren (optional):** Setze `enableDebug = true`, um Konsolenprotokolle zur Fehlerbehebung zu sehen
* **Unterstützte Parameter:** Das Pixel verfolgt alle sechs Standard-UTM-Parameter, die im Array `allowedUrlParams` aufgeführt sind

<div id="testing-your-utm-trigger-setup">
  ## Deine UTM-Trigger-Einrichtung testen
</div>

Verwende nach dem Einrichten der UTM-Trigger diese Checkliste, um zu überprüfen, ob alles korrekt funktioniert:

<div id="for-storefront-utm-tracking-app-embed">
  ### Für Storefront-UTM-Tracking (App-Embed)
</div>

* ✅ **App-Embed aktiviert:** Überprüfe, ob das Aftersell-UTM-Tracker-App-Embed in deinen Theme-Einstellungen eingeschaltet ist
* ✅ **Test-URL:** Besuche deinen Store mit einem UTM-Parameter (z. B. `yourstore.com?utm_campaign=test`)
* ✅ **Kauf abschließen:** Lege ein Produkt in den Warenkorb und schließe den Checkout ab
* ✅ **Funnel prüfen:** Überprüfe, ob der richtige Funnel auf der Thank-You-Seite erscheint
* ✅ **Order Browser:** Prüfe im Aftersell Order Browser, ob der UTM-Trigger erkannt wurde

<div id="for-direct-to-checkout-utm-tracking-shopify-pixel">
  ### Für Direct-to-Checkout-UTM-Tracking (Shopify-Pixel)
</div>

* ✅ **Pixel installiert:** Überprüfe, ob das benutzerdefinierte Pixel unter Settings > Customer Events gespeichert und verbunden ist
* ✅ **Domain konfiguriert:** Bestätige, dass `MYSHOPIFY_DOMAIN` im Pixel-Code korrekt gesetzt ist
* ✅ **Cart-Token vorhanden:** Stelle sicher, dass der Kunde Artikel im Warenkorb hat, bevor er zum Checkout geht (fürs Tracking erforderlich)
* ✅ **Test-URL:** Verwende einen Direct-to-Checkout-Link mit UTM-Parametern (z. B. `yourstore.com/checkout?utm_campaign=test`)
* ✅ **Kauf abschließen:** Schließe den Checkout-Prozess ab
* ✅ **Funnel prüfen:** Überprüfe, ob der richtige Funnel auf der Thank-You-Seite erscheint
* ✅ **Order Browser:** Prüfe im Aftersell Order Browser, ob der UTM-Trigger erkannt wurde
* ⚠️ **Express-Checkout:** Denke daran, dass Shop Pay, Apple Pay und Google Pay NICHT mit UTM-Triggern funktionieren

<div id="troubleshooting-tips">
  ### Tipps zur Fehlerbehebung
</div>

Wenn UTM-Trigger nicht funktionieren:

1. **Debug-Modus aktivieren:** Setze `enableDebug = true` im Pixel-Code und prüfe die Browser-Konsole auf Fehlermeldungen
2. **Cart-Token überprüfen:** Stelle sicher, dass Kunden Artikel im Warenkorb haben, bevor sie den Checkout erreichen (das Pixel benötigt einen Cart-Token)
3. **Trigger-Konfiguration prüfen:** Überprüfe, ob UTM-Parameter und Wert in deinem Funnel-Trigger mit den URL-Parametern übereinstimmen
4. **Teilweise Übereinstimmung testen:** Denke daran, dass Trigger teilweise Übereinstimmung nutzen – `sale` greift bei `spring_sale`, `flash_sale` usw.
5. **Funnel-Priorität prüfen:** Wenn mehrere Funnels übereinstimmen, wird nur der Funnel mit der höchsten Priorität angezeigt
6. **Order Browser überprüfen:** Nutze den Aftersell Order Browser, um zu sehen, welche Trigger für jede Bestellung ausgelöst wurden

<div id="best-practices-for-utm-triggers">
  ## Best Practices für UTM-Trigger
</div>

* **Verwende eine einheitliche Benennung:** Lege eine Namenskonvention für deine UTM-Parameter fest (z. B. `utm_campaign=email_spring_2026`)
* **Nutze die teilweise Übereinstimmung:** Verwende breitere Trigger-Werte, um mehrere Kampagnenvarianten abzudecken
* **Teste vor dem Start:** Teste deine UTM-Links und Trigger immer, bevor du sie an Kunden sendest
* **Dokumentiere deine Kampagnen:** Führe Buch darüber, welche UTM-Parameter du für jede Kampagne verwendest
* **Kombiniere mit anderen Triggern:** Nutze UTM-Trigger zusammen mit Produkt- oder Bestellwert-Triggern für präziseres Targeting
* **Überwache die Performance:** Prüfe regelmäßig den Order Browser, um zu sehen, welche UTM-Kampagnen die meisten Upsells generieren
