> ## 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.

# Sådan bruger du direct-to-checkout UTM-links

> Lær hvordan du udløser post-purchase-funnels med UTM-parametre, herunder opsætning af direct-to-checkout-links

Aftersell understøtter udløsning af funnels baseret på UTM-parametre, hvilket er en valgfri funktion, der specifikt er beregnet til avancerede brugsscenarier. Du kan konfigurere din funnel til at blive aktiveret, når en kunde besøger dit site med en bestemt UTM-forespørgselsstreng.

Denne opsætning er valgfri og er typisk kun nødvendig til avancerede trackingbehov, såsom direct-to-checkout-links eller kampagnespecifikke tilbud.

<div id="how-utm-triggers-work">
  ## Sådan fungerer UTM-triggere
</div>

UTM-triggere giver dig mulighed for at vise bestemte post-purchase-funnels baseret på UTM-parametre i URL'en. Det er nyttigt til:

* **Kampagnespecifikke tilbud** - Vis forskellige upsells baseret på marketingkampagnen
* **Direct-to-checkout-links** - Udløs funnels, når kunder springer butiksfacaden over
* **Kanalattribution** - Personaliser tilbud baseret på trafikkilden (e-mail, sociale medier, annoncer)
* **A/B-test** - Test forskellige tilbud for forskellige kampagnevariationer

<div id="quick-start-basic-utm-trigger-setup">
  ## Hurtig start: Grundlæggende opsætning af UTM-triggere
</div>

Ved almindelige besøg på butiksfacaden (ikke direct-to-checkout) kan du opsætte UTM-triggere med Aftersells app embed. Se denne video for at komme hurtigt i gang med UTM-triggere:

<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">
  ### Aktivér UTM-app-embeddet
</div>

Sådan tracker du UTM-parametre på butiksfacadens sider:

1. Gå til **Online Store > Themes** i din Shopify-administrator
2. Klik på **Customize** på dit aktive tema
3. I temaeditoren skal du klikke på ikonet **App embeds** (puslespilsbrik) i venstre sidepanel
4. Find **Aftersell UTM Tracker**, og slå den **til**
5. Klik på **Save**

Når den er aktiveret, registrerer Aftersell automatisk UTM-parametre, når kunder besøger din butiksfacade via UTM-links.

<div id="configure-utm-triggers-in-your-funnel">
  ### Konfigurér UTM-triggere i din funnel
</div>

Efter du har aktiveret app-embeddet:

1. Gå til **Post-purchase Funnels** i Aftersell-administratoren
2. Opret eller redigér en funnel
3. I sektionen **Triggers** skal du tilføje en **UTM Parameter**-trigger
4. Konfigurér den UTM-parameter og værdi, du vil matche
5. Gem din funnel

<div id="supported-utm-parameters">
  ## Understøttede UTM-parametre
</div>

Aftersell understøtter følgende standard-UTM-parametre:

* `utm_source` - Identificerer trafikkilden (f.eks. google, newsletter, facebook)
* `utm_medium` - Identificerer marketingmediet (f.eks. email, cpc, social)
* `utm_campaign` - Identificerer den specifikke kampagne (f.eks. spring\_sale, product\_launch)
* `utm_term` - Identificerer betalte søgeord (f.eks. running+shoes)
* `utm_content` - Skelner mellem lignende indhold eller links (f.eks. banner\_ad, text\_link)
* `utm_id` - Identificerer kampagne-ID'et (f.eks. campaign\_123)

Alle seks parametre trackes og kan bruges til at udløse funnels.

<div id="partial-field-matching">
  ## Delvis feltmatchning
</div>

Når du konfigurerer UTM-triggere, understøtter Aftersell **delvis matchning** af UTM-parameterværdier. Det betyder:

* ✅ **Triggerværdi:** `spring` → **Matcher:** `spring_sale`, `spring_2026`, `early_spring`
* ✅ **Triggerværdi:** `email` → **Matcher:** `email_newsletter`, `promotional_email`
* ✅ **Triggerværdi:** `sale` → **Matcher:** `spring_sale`, `flash_sale`, `sale_2026`

Denne fleksibilitet lader dig oprette bredere triggere, der matcher flere kampagnevariationer, uden at du skal oprette separate triggere for hver enkelt.

**Eksempel:** Hvis du opsætter en trigger for `utm_campaign` indeholder `sale`, matcher den enhver kampagne med "sale" i navnet, såsom `spring_sale`, `summer_sale` eller `flash_sale_2026`.

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

Den grundlæggende opsætning, der vises i videoen ovenfor, understøtter **ikke** links, der sender kunder **direkte til checkout**. Som standard kan Aftersell kun registrere UTM-parametre på butiksfacadens sider. Det skyldes, at den er afhængig af et tema-app-embed, som kun fungerer på butiksfacadens sider og ikke på checkout- eller takkesiden.

<div id="enable-utm-tracking-on-checkout-pages">
  ### Aktivér UTM-tracking på checkout-sider
</div>

For at tracke UTM-parametre på checkout-siden (til direct-to-checkout-links) skal du **tilføje en Shopify-pixel** til din butik.

⚠️ **Vigtige begrænsninger:**

* Denne opsætning kræver, at den besøgende har en **cart token**, når de ankommer til checkout via et UTM-link. Uden en cart token bliver UTM-dataene ikke registreret.
* **Ekspresbetalingsmetoder (Shop Pay, Apple Pay, Google Pay) understøttes ikke**, fordi de springer indkøbskurven over og ikke genererer en cart token. Kunder, der bruger ekspres-checkout, udløser ikke UTM-baserede funnels.

<div id="setting-up-the-shopify-pixel">
  ### Opsætning af Shopify-pixelen
</div>

Følg denne trinvise vejledning for at opsætte direct-to-checkout UTM-tracking:

1. Gå til **Settings > Customer Events** i din Shopify-administrator.
2. Klik på **Add Custom Pixel**, og giv den et valgfrit navn.
3. Under rullemenuen **Permission** skal du vælge **Analytics**. Det er den eneste tilladelse, der kræves.
4. I rullemenuen **Data Sale** kan du vælge **Data collected does not qualify as data sale**. Aftersell holder alle indsamlede data private og deler dem aldrig med andre end dig.
5. Indsæt koden nedenfor i den kodeeditor, der vises.
6. Klik på **Save** og derefter på **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;  
}
```

**Vigtige konfigurationsbemærkninger:**

* **Redigér `MYSHOPIFY_DOMAIN`:** Du skal erstatte den tomme streng med din butiks myshopify.com-domæne (f.eks. `'example-store.myshopify.com'`)
* **Aktivér debug-tilstand (valgfrit):** Sæt `enableDebug = true` for at se konsollogfiler til fejlfinding
* **Understøttede parametre:** Pixelen tracker alle seks standard-UTM-parametre, der er angivet i arrayet `allowedUrlParams`

<div id="testing-your-utm-trigger-setup">
  ## Test din UTM-trigger-opsætning
</div>

Når du har opsat UTM-triggere, kan du bruge denne tjekliste til at bekræfte, at alt fungerer korrekt:

<div id="for-storefront-utm-tracking-app-embed">
  ### For UTM-tracking på butiksfacaden (app embed)
</div>

* ✅ **App embed aktiveret:** Bekræft, at Aftersell UTM Tracker-app-embeddet er slået til i dine temaindstillinger
* ✅ **Test-URL:** Besøg din butik med en UTM-parameter (f.eks. `yourstore.com?utm_campaign=test`)
* ✅ **Gennemfør købet:** Læg et produkt i kurven, og gennemfør checkout
* ✅ **Tjek funnelen:** Bekræft, at den korrekte funnel vises på takkesiden
* ✅ **Order Browser:** Tjek Aftersell Order Browser for at bekræfte, at UTM-triggeren blev registreret

<div id="for-direct-to-checkout-utm-tracking-shopify-pixel">
  ### For direct-to-checkout UTM-tracking (Shopify-pixel)
</div>

* ✅ **Pixel installeret:** Bekræft, at den brugerdefinerede pixel er gemt og forbundet i Settings > Customer Events
* ✅ **Domæne konfigureret:** Bekræft, at `MYSHOPIFY_DOMAIN` er korrekt angivet i pixelkoden
* ✅ **Cart token til stede:** Sørg for, at kunden har varer i kurven, før de går til checkout (kræves til tracking)
* ✅ **Test-URL:** Brug et direct-to-checkout-link med UTM-parametre (f.eks. `yourstore.com/checkout?utm_campaign=test`)
* ✅ **Gennemfør købet:** Gennemfør checkout-processen
* ✅ **Tjek funnelen:** Bekræft, at den korrekte funnel vises på takkesiden
* ✅ **Order Browser:** Tjek Aftersell Order Browser for at bekræfte, at UTM-triggeren blev registreret
* ⚠️ **Ekspres-checkout:** Husk, at Shop Pay, Apple Pay og Google Pay IKKE fungerer med UTM-triggere

<div id="troubleshooting-tips">
  ### Fejlfindingstips
</div>

Hvis UTM-triggere ikke fungerer:

1. **Aktivér debug-tilstand:** Sæt `enableDebug = true` i pixelkoden, og tjek browserkonsollen for fejlmeddelelser
2. **Bekræft cart token:** Sørg for, at kunder har varer i kurven, før de når checkout (pixelen kræver en cart token)
3. **Tjek trigger-konfigurationen:** Bekræft, at UTM-parameteren og værdien i din funnel-trigger matcher URL-parametrene
4. **Test delvis matchning:** Husk, at triggere bruger delvis matchning - `sale` matcher `spring_sale`, `flash_sale` osv.
5. **Tjek funnel-prioritet:** Hvis flere funnels matcher, vises kun funnelen med højest prioritet
6. **Gennemgå Order Browser:** Brug Aftersell Order Browser til at se, hvilke triggere der blev udløst for hver ordre

<div id="best-practices-for-utm-triggers">
  ## Bedste praksis for UTM-triggere
</div>

* **Brug ensartet navngivning:** Etablér en navngivningskonvention for dine UTM-parametre (f.eks. `utm_campaign=email_spring_2026`)
* **Udnyt delvis matchning:** Brug bredere triggerværdier til at matche flere kampagnevariationer
* **Test før lancering:** Test altid dine UTM-links og triggere, før du sender dem til kunder
* **Dokumentér dine kampagner:** Før en oversigt over, hvilke UTM-parametre du bruger til hver kampagne
* **Kombinér med andre triggere:** Brug UTM-triggere sammen med produkt- eller ordreværdi-triggere for mere præcis målretning
* **Overvåg performance:** Tjek regelmæssigt Order Browser for at se, hvilke UTM-kampagner der driver flest upsells
