Ik heb net een Google Ads-audit afgerond op een Nederlands e-commerce account met zevenstellige omzet in technische producten, het soort catalogus waarbij Shopping vrijwel alle groei levert, de marges dun zijn en elk procentpunt aan verspilling zich opstapelt. Het eerste wat ik bij elke audit controleer, is waar het geld naartoe gaat. De grootste kostenpost was geen categorie, campagne of product. Hij heette “Unknown” en was goed voor bijna de helft van het budget.
Dat label is het symptoom. De oorzaak eronder is wat er gebeurt met een Shopping-account wanneer je de feed behandelt als een statische export in plaats van als een strategiedocument dat dagelijks meebeweegt met je data. Ik zie dezelfde constructiefout terugkomen bij vrijwel ieder account boven zo'n €20k per maand dat ik onder ogen krijg. Hieronder volgt de volledige audit, in algemene vorm.
1 · Het “Unknown”-probleem
In de Google Ads-interface kun je de spend opsplitsen naar Google Product Category. Staat zo'n 50% van de spend in een rij met het label “Unknown” of “Onbekend”, dan is er meestal een van deze drie dingen aan de hand:
- De feed heeft geen
google_product_categorygemapt, of het is alleen op het hoogste niveau ingesteld. - Het veld
product_type, je eigen categorieboom, ontbreekt of staat voor de hele catalogus op dezelfde vaste waarde. Splits je de spend op dat veld, dan valt alles in één hoop. - De
custom_label_*-velden (vrije velden waarmee je producten zelf kunt indelen, bijvoorbeeld op marge of voorraad) zijn leeg, waardoor je de catalogus in de campagnes op geen enkele eigen dimensie kunt opdelen.
Het gevolg zit aan twee kanten. Google valt terug op zijn eigen inschatting van je producten, op basis van titel, omschrijving en afbeelding, en die inschatting kun je nergens corrigeren. En jij kunt je uitgaven niet meer terugvoeren op een categorie, dus van bijna de helft van het budget weet je niet waar het heen ging. Bij dit account ging het om €23.800 per maand.
De oplossing is mechanisch (koppel de taxonomie van Google aan je CMS-categorieën, vul product_type vanuit je echte categorieboom, vul de custom_label_*-velden). De les is structureel: de feed is de strategie. De campagne-indeling, het bod en de asset group volgen daar alleen uit.
Die twee manieren van kijken naast elkaar:
| Feed als statische export | Feed als strategiedocument | |
|---|---|---|
| Wie bepaalt de campagne-indeling | De specialist, handmatig in de interface | Labels die elke nacht uit je eigen data worden berekend |
| Hoe vaak de indeling verandert | Bij de lancering, daarna zelden | Elke nacht, automatisch |
| Waar de strategie leeft | In campagne-instellingen die niemand kan teruglezen | In feedlabels die iedereen kan zien |
| Als een product zich anders gaat gedragen | Er gebeurt niets, tot iemand het opmerkt | Het product verhuist zelf naar de juiste campagne |
| Overdraagbaarheid | Zit in het hoofd van de beheerder | De architectuur legt zichzelf uit |
2 · Het prestatiepatroon over 6 maanden
Nadat ik de data had gesegmenteerd op feedgezondheid, heb ik de totale kosten tegen de ROAS (return on ad spend: omzet per euro advertentiebudget) uitgezet over de afgelopen zes maanden. Drie dingen vielen op:
- Stabiele ROAS tussen 1,9 en 2,2. Geen grote schokken en geen algoritmische verrassingen. Dat is het cijfer dat je krijgt wanneer niets kapot is en ook niemand iets actief verbetert.
- Dip naar zo'n 1,6 in december bij de grootste campagnes, ondanks hogere spend dan in november. Klassieke seizoensgebonden CPC-inflatie die een catalogus met lage marges hard raakt.
- De grootste afzonderlijke campagne was een “Marge 0-10%”-bucket die €18-24k per maand opslokte. Bij een SKU met 0-10% marge is een ROAS van 2,0 verlieslatend: de marge op die omzet is een fractie van wat de klik heeft gekost, en break-even ligt daar een veelvoud boven. Elk procentpunt verspilling weegt hier extra zwaar.
Samengevat: een stabiel account zonder onderscheid tussen producten, waarbij het grootste deel van het budget naar de categorie gaat die zich dat gebrek aan onderscheid het minst kan veroorloven.
3 · De DSA-valkuil
Het account draaide met slechts één Dynamic Search Ads-campagne (DSA: Google kiest daarbij zelf zoektermen en landingspagina's op basis van je website), die twee taken tegelijk moest uitvoeren: nieuwe long-tail zoektermen ontdekken en converteren op de zoektermen die hij al had geleerd. Met Maximize Conversion Value (Target ROAS) erbovenop werken die twee taken elkaar actief tegen. De bidder beloont voorspelbare converteerders en laat discovery uithongeren; de discovery-kant krijgt nooit de tijd om te leren.
De cijfers uit de audittabel vertelden hetzelfde verhaal. Specifieke DSA-targets zoals Categorie = gereedschap leverden een ROAS van 3,38 op. Het catch-all target Alle webpagina’s haalde daar maar een fractie van. DSA had duidelijk zijn discovery-taak goed gedaan. Alleen werden de winnaars nooit doorgeschoven.
De oplossing bestaat uit twee campagnes waar er eerst één was:
- DSA Explorer. Breed, lager budget, geen agressieve Target ROAS. Zijn taak is het vinden van nieuwe zoektermen. Niet afknijpen.
- Search Converter. Exact en phrase match op de categorieën waarvan DSA de waarde al heeft bewezen. Eigen budget, eigen biedstrategie, eigen negatieven. De gemigreerde categorie en de best converterende URL's belanden op de uitsluitingslijst van DSA, zodat de twee campagnes elkaar niet langer kannibaliseren.
Bij accounts die zwaar op DSA leunen is deze splitsing meestal de ingreep met het meeste effect. In de accounts waar ik hem heb doorgevoerd, leverde de splitsing op zichzelf al een efficiëntiewinst van 10-20% op.
4 · De Hybrid Matrix
Zodra de feed gezond is en DSA is opgesplitst, wordt de eigenlijke architectuur vanzelf duidelijk: een matrix van drie campagnefamilies naast elkaar, geen keten van boven naar beneden.
Drie campagnefamilies, elk aangestuurd door labels uit de feed:
Search (geautomatiseerd via de API). Sniper (exact match op zoektermen met duidelijke koopintentie, gevonden via Google Search Console en Semrush), Brand Protection (zelf bieden op je eigen merknaam, zodat een concurrent die positie niet goedkoop overneemt), DSA Explorer (long-tail vangnet met laag budget).
PMax (Performance Max, de belangrijkste winstbron). Hero (top 5% bestsellers, geen tROAS, marktaandeel maximaliseren), Profit (hoge marge + Closers, strikte tROAS), Volume (lage marge + Openers, lagere ROAS accepteren omdat ze de Profit-campagne ondersteunen).
Standard Shopping (de reparatiewerkplaats). Zombies (0 impressies in 30 dagen, lage handmatige CPC om het algoritme te voeden), Overstock Dump (hoge voorraad, agressieve biedingen om magazijnkapitaal vrij te maken), Bleeders (kosten > €20 met €0 winst, volledig uitgesloten).
Het geheel wordt aangestuurd door feedlabels. Welke SKU een “Hero” is, bepaalt de feed, en dat werkt consequent door: zodra een SKU zich niet meer als Hero gedraagt, verliest hij het label en valt hij automatisch uit de Hero-campagne. Het onderhoud verhuist daarmee van de Google Ads-interface naar je datapipeline.
5 · Openers, Closers, Assisters
De meest ongemakkelijke bevinding kwam uit BigQuery. Als je de kostendata van Ads koppelt aan ruwe GA4-eventdata, kun je per product het verschil berekenen tussen “dit product is aangeklikt” en “dit product is gekocht”.
Drie profielen komen naar voren:
- Closers. Hoge directe verkopen, lage assisted sales. Ze doen precies wat de cijfers beloven. Veilig om te optimaliseren op ROAS of POAS (Profit On Ad Spend: dezelfde som, maar dan met winst in plaats van omzet). Veilig om op te schalen of stop te zetten op basis van diezelfde metric.
- Openers / Assisters. Hoge assisted sales, lage directe verkopen. Mensen klikken hierop (vaak omdat ze goedkoop of populair zijn) en kopen vervolgens iets anders. Nooit stopzetten op basis van lage ROAS. Ze vullen winkelmandjes. Optimaliseer ze op CPA, of accepteer bewust een lagere ROAS.
- Traffic Wasters. Veel sessies, geen verkopen, direct noch assisted. Die kun je wegsnijden.
Ongeveer een op de vijf SKU's in de audit was een Opener met een ROAS die op zichzelf beroerd oogde. Stopzetten op basis van ROAS zou de verkopen hebben geraakt die deze producten elders in de catalogus aanjagen. Dit is in mijn ervaring een van de duurste fouten die e-commerce teams in Google Ads maken. De Google Ads-interface toont assists niet op productniveau, dus je ziet hem pas als je in ruwe GA4-data of BigQuery kijkt.
6 · De datapipeline
De architectuur werkt alleen als je de feed elke nacht opnieuw opbouwt vanuit de data. Het patroon dat steeds terugkomt:
- 03:00 · BigQuery-refresh. Kostendata van Google Ads, ruwe GA4-events, marge-/voorraad-/retourdata uit het CMS inladen. Koppelen op
item_id. - 03:30 · 5 custom labels berekenen. Margebucket, levenscyclus (Zombie/Bleeder/Winner/Kickstart), attributierol (Opener/Closer/Traffic), POAS-bucket, voorraadstatus.
- 04:00 · Doorzetten naar een Google Sheet. Die sheet is gekoppeld aan Merchant Center als Supplemental Feed, een aanvullende feed die extra velden toevoegt aan bestaande producten.
- 06:00 · Producten verplaatsen zichzelf. Een SKU die vorige week nog een Zombie was (Standard Shopping, lage handmatige CPC) en daar 30 conversies binnenhaalde, wordt vandaag automatisch een Winner, krijgt het Hero-label en verhuist naar PMax zonder tussenkomst van een mens.
In de Nederlandse praktijk is stap 1 vaak de moeilijkste. Omzetdata doorgeven lukt bijna elk webshopplatform wel, maar marge per SKU zit bij veel Nederlandse webshops in een apart inkoopsysteem of in een spreadsheet van de inkoper, niet in een veld dat je 's nachts kunt uitlezen. Zolang dat veld ontbreekt, werkt de helft van de labels niet. Behandel die dataontsluiting dus als eerste projectfase, niet als detail achteraf.
Zodra dat draait, gebruik je de Google Ads-interface vooral om mee te kijken. De strategie zit stroomopwaarts, in BigQuery en de Sheet. Dat maakt het account ook overdraagbaar: geef het morgen aan een andere specialist en de architectuur legt zichzelf uit, omdat de labels gewoon in de feed staan.
7 · De geavanceerde stap: waardecorrectie
Zodra de labels stabiel zijn, is de volgende laag het corrigeren van de conversiewaarden die je naar Google stuurt. Als BigQuery laat zien dat Product A zo'n €100 aan indirecte (assisted) omzet oplevert voor elke €10 directe omzet, kun je de conversiewaarde die je naar Google terugstuurt corrigeren: bij de aankoop zelf, of achteraf met een waardecorrectie op de al doorgegeven conversie. Value rules zijn hier niet het juiste gereedschap, want die corrigeren op apparaat, locatie en doelgroep en niet op product. De bidder ziet dan een realistischer waarde bij de klikken op Product A en biedt er niet langer te laag op.
Dit is de geavanceerde versie van de Opener/Closer-fix. De meeste accounts komen hier nooit aan toe omdat de pipeline er nog niet is. Maar zodra de pipeline er staat, kan waardecorrectie het verschil maken tussen een stabiele ROAS van 2,0 en een stabiele ROAS van 2,6, zonder een euro extra adspend. Reken die winst dan wel af tegen je werkelijke omzet en marge. Meet je hem af aan de gecorrigeerde waarde die je zelf naar Google stuurt, dan meet je je eigen correctie terug.
8 · Voor wie is dit interessant, en wat is een realistische eerste stap?
Moet je hier iets mee? Mijn inschatting per situatie:
- Nu interessant: webshops met serieuze Shopping-spend (dit account zit ruim boven de €20k per maand, maar het patroon loont al veel eerder), honderden of duizenden SKU's, en marges die per product flink verschillen.
- Nog niet: een webshop met enkele tientallen producten en een bescheiden budget. Daar wint een schone feed met correcte categorieën plus een eenvoudige campagnestructuur het van elke pipeline. Bouw geen nachtelijke BigQuery-machine voor een catalogus die je in een middag handmatig kunt labelen.
- Eerst iets anders: als je conversietracking niet klopt of je marge per product nergens is vastgelegd, begin daar. Elke laag hierboven staat of valt met die twee dingen.
De realistische eerste stap kost een kwartier: open Google Ads, segmenteer je Shopping-spend op productcategorie en kijk hoeveel procent er in “Unknown” staat. Of leg die vraag voor aan je bureau. Het antwoord zegt je meteen hoeveel sturing er nog in je feed zit.
Drie regels die ik iedereen zou meegeven die een Shopping-account van deze omvang runt
- Behandel de feed als code. Hij verdient versiebeheer, tests en een nachtelijke rebuild-pipeline. Als je je feed niet elke nacht herschrijft met labels die je afleidt uit je eigen data, laat je een groot deel van wat het algoritme van Google kan ongebruikt.
- Stop niet enkel op basis van ROAS. Check altijd de assist-kolom. Bij dit account was een op de vijf SKU's een Opener, 20% van de catalogus. Pauzeer je die op ROAS, dan verlies je de assists waar verkopen elders op leunen.
- Splits discovery van conversie. Elk campagnetype dat Google je verkoopt als “alles-in-één” (DSA, brede PMax, destijds Smart Shopping) doet twee dingen tegelijk. Jouw taak is om discovery hongerig te houden en conversie strikt te sturen, niet om die twee te vermengen.
De verspilling vinden is bij een Google Ads-audit zelden het probleem. Die ligt bijna altijd voor het oprapen onder een label als “Unknown”. Het werk zit in het herbouwen van de datapipeline, zodat wat je vandaag oplost morgen ook opgelost blijft.
