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

# Direct-naar-checkout UTM-links gebruiken

> Leer hoe je post-purchase funnels activeert met UTM-parameters, inclusief de installatie voor direct-naar-checkout links

Aftersell ondersteunt het activeren van funnels op basis van UTM-parameters, een optionele functie die specifiek bedoeld is voor geavanceerde toepassingen. Je kunt je funnel zo configureren dat deze wordt geactiveerd wanneer een klant je site bezoekt met een specifieke UTM-querystring.

Deze setup is optioneel en meestal alleen nodig voor geavanceerde trackingbehoeften, zoals direct-naar-checkout links of campagnespecifieke aanbiedingen.

<div id="how-utm-triggers-work">
  ## Hoe UTM-triggers werken
</div>

Met UTM-triggers kun je specifieke post-purchase funnels tonen op basis van UTM-parameters in de URL. Dit is handig voor:

* **Campagnespecifieke aanbiedingen** - Toon verschillende upsells op basis van de marketingcampagne
* **Direct-naar-checkout links** - Activeer funnels wanneer klanten de storefront overslaan
* **Kanaalattributie** - Personaliseer aanbiedingen op basis van de verkeersbron (e-mail, social media, advertenties)
* **A/B-testen** - Test verschillende aanbiedingen voor verschillende campagnevarianten

<div id="quick-start-basic-utm-trigger-setup">
  ## Snel starten: basisinstallatie van UTM-triggers
</div>

Voor standaard storefront-bezoeken (niet direct-naar-checkout) kun je UTM-triggers instellen met de Aftersell app embed. Bekijk deze video om te zien hoe je snel aan de slag gaat met UTM-triggers:

<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">
  ### Schakel de UTM app embed in
</div>

Om UTM-parameters op storefront-pagina's te tracken:

1. Ga in je Shopify-beheer naar **Online Store > Themes**
2. Klik op **Customize** bij je actieve thema
3. Klik in de thema-editor op het **App embeds**-pictogram (puzzelstukje) in de linkerzijbalk
4. Zoek **Aftersell UTM Tracker** en zet deze **aan**
5. Klik op **Save**

Zodra dit is ingeschakeld, legt Aftersell automatisch UTM-parameters vast wanneer klanten je storefront bezoeken via UTM-links.

<div id="configure-utm-triggers-in-your-funnel">
  ### Configureer UTM-triggers in je funnel
</div>

Na het inschakelen van de app embed:

1. Ga naar **Post-purchase Funnels** in het Aftersell-beheer
2. Maak of bewerk een funnel
3. Voeg in de sectie **Triggers** een **UTM Parameter**-trigger toe
4. Configureer de UTM-parameter en waarde die je wilt matchen
5. Sla je funnel op

<div id="supported-utm-parameters">
  ## Ondersteunde UTM-parameters
</div>

Aftersell ondersteunt de volgende standaard UTM-parameters:

* `utm_source` - Identificeert de verkeersbron (bijv. google, newsletter, facebook)
* `utm_medium` - Identificeert het marketingmedium (bijv. email, cpc, social)
* `utm_campaign` - Identificeert de specifieke campagne (bijv. spring\_sale, product\_launch)
* `utm_term` - Identificeert betaalde zoekwoorden (bijv. running+shoes)
* `utm_content` - Onderscheidt vergelijkbare content of links (bijv. banner\_ad, text\_link)
* `utm_id` - Identificeert het campagne-ID (bijv. campaign\_123)

Alle zes parameters worden getrackt en kunnen worden gebruikt om funnels te activeren.

<div id="partial-field-matching">
  ## Gedeeltelijke veldmatching
</div>

Bij het configureren van UTM-triggers ondersteunt Aftersell **gedeeltelijke matching** voor waarden van UTM-parameters. Dit betekent:

* ✅ **Triggerwaarde:** `spring` → **Matcht:** `spring_sale`, `spring_2026`, `early_spring`
* ✅ **Triggerwaarde:** `email` → **Matcht:** `email_newsletter`, `promotional_email`
* ✅ **Triggerwaarde:** `sale` → **Matcht:** `spring_sale`, `flash_sale`, `sale_2026`

Deze flexibiliteit stelt je in staat om bredere triggers te maken die meerdere campagnevarianten matchen, zonder voor elke variant een aparte trigger aan te maken.

**Voorbeeld:** Als je een trigger instelt voor `utm_campaign` bevat `sale`, dan matcht deze elke campagne met "sale" in de naam, zoals `spring_sale`, `summer_sale` of `flash_sale_2026`.

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

De basisinstallatie die in de video hierboven wordt getoond, ondersteunt **geen** links die klanten **rechtstreeks naar de checkout** sturen. Standaard kan Aftersell UTM-parameters alleen op storefront-pagina's detecteren. Dit komt doordat het afhankelijk is van een thema-app embed, die alleen werkt op storefront-pagina's en niet op de checkout- of bedankpagina.

<div id="enable-utm-tracking-on-checkout-pages">
  ### UTM-tracking inschakelen op checkoutpagina's
</div>

Om UTM-parameters op de checkoutpagina te tracken (voor direct-naar-checkout links), moet je een **Shopify-pixel toevoegen** aan je winkel.

⚠️ **Belangrijke beperkingen:**

* Deze setup vereist dat de bezoeker een **cart token** heeft wanneer die via een UTM-link bij de checkout aankomt. Zonder cart token worden de UTM-gegevens niet vastgelegd.
* **Express-checkoutmethoden (Shop Pay, Apple Pay, Google Pay) worden niet ondersteund**, omdat ze de winkelwagen omzeilen en geen cart token genereren. Klanten die express checkout gebruiken, activeren geen funnels op basis van UTM.

<div id="setting-up-the-shopify-pixel">
  ### De Shopify-pixel instellen
</div>

Volg deze stapsgewijze instructies om direct-naar-checkout UTM-tracking in te stellen:

1. Ga in je Shopify-beheer naar **Settings > Customer Events**.
2. Klik op **Add Custom Pixel** en geef deze een naam naar keuze.
3. Selecteer onder de dropdown **Permission** de optie **Analytics**. Dit is de enige vereiste machtiging.
4. Voor de dropdown **Data Sale** kun je kiezen voor **Data collected does not qualify as data sale**. Aftersell houdt alle verzamelde gegevens privé en deelt ze nooit met iemand anders dan jou.
5. Plak in de code-editor die verschijnt de onderstaande code.
6. Klik op **Save** en vervolgens op **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;  
}
```

**Belangrijke configuratienotities:**

* **Bewerk `MYSHOPIFY_DOMAIN`:** Je moet de lege string vervangen door het myshopify.com-domein van je winkel (bijv. `'example-store.myshopify.com'`)
* **Schakel debugmodus in (optioneel):** Stel `enableDebug = true` in om consolelogs te zien voor probleemoplossing
* **Ondersteunde parameters:** De pixel trackt alle zes standaard UTM-parameters die in de array `allowedUrlParams` staan

<div id="testing-your-utm-trigger-setup">
  ## Je UTM-triggerinstallatie testen
</div>

Gebruik na het instellen van UTM-triggers deze checklist om te controleren of alles correct werkt:

<div id="for-storefront-utm-tracking-app-embed">
  ### Voor storefront UTM-tracking (app embed)
</div>

* ✅ **App embed ingeschakeld:** Controleer of de Aftersell UTM Tracker app embed is ingeschakeld in je thema-instellingen
* ✅ **Test-URL:** Bezoek je winkel met een UTM-parameter (bijv. `yourstore.com?utm_campaign=test`)
* ✅ **Aankoop voltooien:** Voeg een product toe aan de winkelwagen en voltooi de checkout
* ✅ **Funnel controleren:** Controleer of de juiste funnel op de bedankpagina verschijnt
* ✅ **Order Browser:** Controleer in de Aftersell Order Browser of de UTM-trigger is gedetecteerd

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

* ✅ **Pixel geïnstalleerd:** Controleer of de custom pixel is opgeslagen en verbonden in Settings > Customer Events
* ✅ **Domein geconfigureerd:** Bevestig dat `MYSHOPIFY_DOMAIN` correct is ingesteld in de pixelcode
* ✅ **Cart token aanwezig:** Zorg ervoor dat de klant items in de winkelwagen heeft voordat die naar de checkout gaat (vereist voor tracking)
* ✅ **Test-URL:** Gebruik een direct-naar-checkout link met UTM-parameters (bijv. `yourstore.com/checkout?utm_campaign=test`)
* ✅ **Aankoop voltooien:** Voltooi het checkoutproces
* ✅ **Funnel controleren:** Controleer of de juiste funnel op de bedankpagina verschijnt
* ✅ **Order Browser:** Controleer in de Aftersell Order Browser of de UTM-trigger is gedetecteerd
* ⚠️ **Express checkout:** Onthoud dat Shop Pay, Apple Pay en Google Pay NIET werken met UTM-triggers

<div id="troubleshooting-tips">
  ### Tips voor probleemoplossing
</div>

Als UTM-triggers niet werken:

1. **Schakel debugmodus in:** Stel `enableDebug = true` in in de pixelcode en controleer de browserconsole op foutmeldingen
2. **Controleer het cart token:** Zorg ervoor dat klanten items in de winkelwagen hebben voordat ze de checkout bereiken (de pixel vereist een cart token)
3. **Controleer de triggerconfiguratie:** Controleer of de UTM-parameter en waarde in je funneltrigger overeenkomen met de URL-parameters
4. **Test gedeeltelijke matching:** Onthoud dat triggers gedeeltelijke matching gebruiken - `sale` matcht `spring_sale`, `flash_sale`, enz.
5. **Controleer de funnelprioriteit:** Als meerdere funnels matchen, wordt alleen de funnel met de hoogste prioriteit getoond
6. **Bekijk de Order Browser:** Gebruik de Aftersell Order Browser om te zien welke triggers voor elke bestelling zijn geactiveerd

<div id="best-practices-for-utm-triggers">
  ## Best practices voor UTM-triggers
</div>

* **Gebruik consistente naamgeving:** Stel een naamgevingsconventie vast voor je UTM-parameters (bijv. `utm_campaign=email_spring_2026`)
* **Benut gedeeltelijke matching:** Gebruik bredere triggerwaarden om meerdere campagnevarianten te matchen
* **Test voordat je lanceert:** Test altijd je UTM-links en triggers voordat je ze naar klanten stuurt
* **Documenteer je campagnes:** Houd bij welke UTM-parameters je voor elke campagne gebruikt
* **Combineer met andere triggers:** Gebruik UTM-triggers naast product- of bestelwaardetriggers voor preciezere targeting
* **Monitor de prestaties:** Controleer regelmatig de Order Browser om te zien welke UTM-campagnes de meeste upsells opleveren
