Een grote retailer met winkels in Nederland en België wil vooral één ding van zijn website. Dat bezoekers een afspraak maken in de winkel. Retargeting liep al, maar standaard. Wie de website verliet zonder afspraak, kreeg opnieuw te zien wat diegene al had bekeken. Keek je naar een product, dan kreeg je dat product.
Maar wat iemand bekeek, vertelt niet welke stap diegene verder brengt. Dus bouwden we een model dat per afhaakmoment voorspelt welke vervolgstap het meest kansrijk is, en lieten we die stap de advertentie bepalen. Met hetzelfde budget leverde dat 51% meer winkelafspraken op.
We noemen de opdrachtgever hier niet bij naam en delen percentages, geen budgetten of absolute aantallen afspraken.
Uitdaging
Wie naar een product keek, zoekt misschien nog steeds dat product. Toch kan een andere boodschap diegene sneller naar een afspraak helpen. Alleen wisten we per pagina niet welke stap dat was. De bestaande retargeting keek terug naar wat iemand had gezien. Wij wilden vooruitkijken naar wat iemand nog moest doen.
Het doel was om met hetzelfde retargetingbudget via Google en Meta minimaal 32% meer winkelafspraken per maand te halen. De kosten per afspraak zouden dan met 24% dalen. Daarnaast wilden we drie dingen bereiken.
- Bezoekers die zonder afspraak vertrokken een persoonlijke advertentie tonen die hen helpt de meest kansrijke vervolgstap te zetten.
- Het mediabudget verdelen op basis van de kans dat een bezoeker uiteindelijk een afspraak maakt.
- Per retargetingflow zien hoeveel bezoekers we bereiken en welke advertenties hen terugbrengen, zodat we gericht kunnen verbeteren.
Een Markov-model als basis
We richtten ons op bezoekers die de website zonder afspraak verlieten. Om te bepalen welke advertentie hen verder kon helpen, onderzochten we in BigQuery welke routes bezoekers aflegden en welke stappen tot een afspraak leidden.
Dat leverde ruim 90.000 unieke routes op, en daar kwamen we eerst niet verder mee. Van alle routes kwam 80% maar één keer voor. Veel verschillende klantreizen dus, maar te weinig herhaling om per route iets te voorspellen. Daarom groepeerden we pagina's in categorieën en pasten we het Markov-model opnieuw toe. Zo kregen we genoeg herhaling om de overgangskansen betrouwbaar te berekenen.
Het model berekent vanuit iedere pagina welke vervolgstappen bezoekers zetten en hoe waarschijnlijk die zijn. Door die stappen aan elkaar te koppelen, zien we ook hoe groot de kans is dat iemand uiteindelijk een afspraak maakt. Daar hingen we twee dingen aan op.
De meest kansrijke vervolgstap bepaalt de boodschap
Vanuit de laatst bekeken pagina voorspelt het model welke vervolgstap het meest kansrijk is op weg naar een afspraak. Die stap bepaalt de boodschap en de landingspagina. De eerder bekeken thema's gebruiken we om de advertentie persoonlijk te maken. Zo sluit de advertentie aan op de interesse van de bezoeker en geeft die een concrete reden om terug te komen. Hieronder een voorbeeld van hoe dat uitpakt.
De totale afspraakkans bepaalt het budget
Het model berekent ook hoe groot de kans is dat een bezoeker vanuit het afhaakmoment uiteindelijk een afspraak maakt. Op basis daarvan verdeelden we bezoekers over drie groepen met een lage, middelhoge of hoge afspraakkans. Iedere groep kreeg een eigen budget. Zo konden we de media-inzet per groep sturen en meteen toetsen of de voorspelde afspraakkans ook in de campagneresultaten terugkwam.
Oplossing & implementatie
We werkten dit in drie stappen uit. We maakten de persoonlijke advertenties, bouwden de techniek om ze bij de juiste bezoeker te krijgen en brachten de prestaties per flow in kaart.
1. Duizenden persoonlijke advertenties maken
Voor iedere retargetingflow kreeg Claude een briefing met de afhaakpagina, de voorspelde vervolgstap en de eerder bekeken paginagroepen. Claude kreeg ook bestaande teksten van de retailer en toegang tot de beeldbank. De afbeeldingen gaven we beschrijvende bestandsnamen, zodat Claude snel een passend beeld bij de boodschap kon kiezen.
Dat leverde 1.120 unieke boodschappen op. Met de Channable Image Editor werkten we die uit tot 9.676 advertentievarianten, waarvan het grootste deel voor een specifieke winkel. De 40 belangrijkste varianten controleerden we handmatig, de rest met steekproeven.
2. De juiste advertentie na het juiste afhaakmoment
Tijdens een websitebezoek verandert de meest relevante advertentie steeds. Daarom houden we per pagina bij welke advertentie past bij de laatst bekeken pagina en de eerdere interesses. Server-side GTM zoekt die combinatie op in een tabel in BigQuery en slaat de bijbehorende advertentie-ID tijdelijk op in Firestore. Bij iedere nieuwe pagina overschrijven we die.
Pas na 30 minuten inactiviteit sturen we de laatst opgeslagen advertentie-ID naar Google Ads en Meta. Zo krijgt de bezoeker één advertentie die past bij het uiteindelijke afhaakmoment, in plaats van losse advertenties voor elke stap uit hetzelfde bezoek.
3. Per retargetingflow volgen wat werkt
Na het uitleveren wilden we weten of de advertenties bezoekers ook terugbrachten. Daarom combineerden we in BigQuery de afhaakmomenten uit de Markov-analyse met de advertentievertoningen uit Google Ads en Meta. Via GA4 en de advertentie-ID in de UTM-code zagen we hoeveel bezoekers vanuit iedere flow terugkwamen.
Zo zagen we per flow hoeveel bezoekers afhaakten, hoeveel vertoningen daarop volgden en hoeveel mensen terugkwamen. Dat vertelde ons waar we bezoekers onvoldoende bereikten en welke advertenties of landingspagina's we moesten verbeteren.
Resultaat
In de twee maanden na livegang haalden we met hetzelfde maandelijkse mediabudget 51% meer winkelafspraken dan in de eerste helft van het jaar. De kosten per afspraak daalden met 34%. De doelstelling was 32% meer afspraken en 24% lagere kosten per afspraak. Beide haalden we ruim.
Wat we leerden
Markov hielp ons de klant beter te begrijpen. We vonden kansrijke vervolgstappen die we zelf niet hadden bedacht, en we konden bezoekers retargeten met klantreizen die buiten onze handmatige flows zouden vallen.
De drie budgetgroepen gaven ons vanaf de start meer controle. Verrassend genoeg deed ook de groep met een lage afspraakkans het goed. Onze verklaring is dat deze bezoekers uit zichzelf minder snel terugkomen, waardoor hun klantreizen historisch laag scoren. Met de juiste advertentie bleken we ook hen richting een afspraak te kunnen helpen.
Ook leerden we hoe we AI beter kunnen inzetten. Bij grote aantallen advertenties in één keer schreef AI vooral generieke teksten die steeds hetzelfde patroon volgden. Door de advertenties in een loop in batches van vijf te laten schrijven, werd de copy een stuk beter. Iedere advertentie kreeg zo meer aandacht en de verschillen tussen klantreizen kwamen beter terug in de boodschap.
De campagne gaf ons bovendien aanknopingspunten voor de website zelf. Voor een aantal pagina's bevestigden de campagneresultaten welke vervolgstappen werkten. Die kennis verwerkten we in de eerste CRO-briefings voor de retailer. En de meest succesvolle flows zijn input voor het platform waarmee de retailer straks ook e-mails en websitecontent personaliseert.
Conclusie
Personalisatie op schaal klinkt groot, maar de uitdaging zat vooral in de praktische toepassing. Patronen herkennen in ruim 90.000 klantreizen, een Markov-model vertalen naar begrijpelijke keuzes, en met AI, Channable, server-side GTM, BigQuery en Firestore zelf de infrastructuur bouwen om duizenden persoonlijke advertenties uit te leveren.
Die investering in techniek leverde 51% meer winkelafspraken op bij hetzelfde mediabudget. En de inzichten uit het model helpen ons nu al bij CRO en straks bij e-mail en websitecontent. Zo zetten wij data en techniek in. Eerst snappen welke stap een bezoeker verder brengt, dan pas de advertentie maken.
