Diepteanalyse · 13 min lezen

Het Shopping-zoekopdrachtenrapport dat Google je niet geeft

Shopping- en PMax-rapporten tonen de zoekopdracht, nooit het product. Bouw het ontbrekende rapport met één URL-parameter en twee GA4-dimensies.

Illustratie die een stapel zoekopdrachten koppelt aan één product, de ontbrekende schakel die Google's rapporten verbergen.
De serieuze feiten zijn echt — de artikelcovers niet.

Kort gezegd: Shopping- en PMax-rapporten tonen de zoekopdracht maar verbergen het product. Voeg één URL-parameter toe, {lpurl}?utm_content={product_id}, en binnen een week levert GA4 je het afgeschafte zoekopdracht × product-rapport door sessionManualAdContent te koppelen aan sessionGoogleAdsQuery. Op een echt account liet die weergave zien dat 85 % van de uitgaven door paren liep die nooit converteerden, terwijl een schijfje van 0,25 % het hele account droeg op 46,8× ROAS.

Een klant stelde me ooit een vraag die met één klik beantwoord zou moeten zijn. Iemand zocht op “steelstofzuiger onder 200”, klikte op de Shopping-advertentie, en het account betaalde ervoor. Op welk van de 5.000 producten in de feed landde die klik? Ik opende het zoekopdrachtenrapport, daarna het productrapport, en er was geen manier om ze te verbinden. Die is er nog steeds niet. Google toont je de zoekopdracht, en het toont je het product, maar nooit samen.

Jaren geleden gaf de oude AdWords API je precies deze koppeling. Toen verdween die stilletjes, en geen instelling, geen rapport, geen API-veld brengt haar terug. Voor een webshop is dat gat niet cosmetisch. Zoekopdracht naar product is waar de echte optimalisatie zit. Of je titels echte vraag dekken. Welke producten rommeltraffic aantrekken. Waarom een product klikken krijgt maar nooit converteert.

Twaalf jaar schrijven tegen de Google Ads API heeft me geleerd dat een rapport dat Google afschaft, nooit terugkomt. Dus heb ik het zelf herbouwd, en de herbouw is bijna gênant eenvoudig. Eén URL-parameter. Binnen een week levert GA4 je elke betaalde klik gekoppeld als zoekopdracht × product, met sessies, conversies en omzet eraan vast. De bouw kost minuten; de rest van dit artikel gaat over wat je doet met wat terugkomt.

78 %
van klikken gematcht als zoekopdracht × product
22
campagnes bijgewerkt
1
URL-parameter, dat is de hele stack
7 dagen
tot geverifieerde data in GA4

De oplossing: één parameter, twee GA4-dimensies

Voeg een trackingsjabloon toe

Zet {lpurl}?utm_content={product_id} op je Shopping- en PMax-campagnes. De ValueTrack-variabele {product_id} stuurt de Merchant Center product-ID mee met elke klik.

GA4 bewaart het product

De UTM landt in de dimensie Session manual ad content (sessionManualAdContent).

GA4 kent de zoekopdracht al

Auto-tagging (gclid) vult sessionGoogleAdsQuery op dezelfde sessie.

Koppel de twee dimensies

Elke betaalde klik wordt een zoekopdracht × product-paar, met sessies, conversiepercentage en omzet eraan vast.

Auto-tagging en de handmatige UTM vechten niet met elkaar. De gclid blijft bron, medium en campagne afhandelen; jouw UTM draagt alleen de product-ID.

Weet wat je krijgt (en wat niet)

  • Alleen geklikte zoekopdrachten. Deze dataset begint bij de klik. Zoekopdrachten waarvoor je advertentie verscheen maar niemand klikte, bereiken GA4 nooit. Analyse op vertoningsniveau blijft in Google’s standaardrapport, zonder producten.
  • Ongeveer 20 % van de klikken matcht niet. Consent-geweigerde sessies, PMax-oppervlakken zonder enige zoekopdracht (Display, YouTube, Gmail), klikken die nooit analytics afvuurden.
  • Sessiegebonden. Eén sessie draagt één product-ID, die van de klik, ook als de gebruiker daarna nog tien andere bekijkt.

Het rapport uit GA4 trekken

Open in de GA4-interface Verkennen en bouw een tabel in vrije vorm. Dimensies zijn Session manual ad content en Session Google Ads query. Statistieken zijn sessies, belangrijke gebeurtenissen (voorheen conversies) en aankoopomzet. Filter op sessiebron/-medium gelijk aan google / cpc.

Voor alles wat serieus is wil je de Data API, want dit rapport hoort in een dashboard of een BigQuery-join, niet in een browsertabblad:

from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.analytics.data_v1beta.types import (
    RunReportRequest, DateRange, Dimension, Metric, FilterExpression, Filter
)

request = RunReportRequest(
    property=f"properties/{GA4_PROPERTY_ID}",
    dimensions=[
        Dimension(name="sessionManualAdContent"),  # product ID
        Dimension(name="sessionGoogleAdsQuery"),    # search term
    ],
    metrics=[
        Metric(name="sessions"),
        Metric(name="keyEvents"),
        Metric(name="purchaseRevenue"),
    ],
    date_ranges=[DateRange(start_date="30daysAgo", end_date="today")],
    dimension_filter=FilterExpression(filter=Filter(
        field_name="sessionSourceMedium",
        string_filter=Filter.StringFilter(value="google / cpc"),
    )),
)

Koppel sessionManualAdContent aan je productfeed (id naar titel, prijs, categorie) en het rapport is compleet. Zoekopdracht, product, titel en economie in één tabel.

Geverifieerd, niet getheoretiseerd

We rolden dit uit op een live account, een Tsjechische elektronicaretailer met 22 ingeschakelde Shopping-campagnes, en ik checkte GA4 zeven dagen later:

GA4, 7 dagen na uitrol

  • Rijen google/cpc-traffic 9.753
  • Droeg de product-ID (utm_content) 96 %
  • Droeg de zoekopdracht (sessionGoogleAdsQuery) 81 %
  • Droeg beide, een werkend zoekopdracht × product-rapport 78 %

Nu het leuke deel: wat de paren je vertellen

1 · Het titelgat

Zet de zoekopdrachten naast de titel en beschrijving die ze triggerden. De mismatch springt eruit:

What people actually search
steelstofzuiger huisdierharenstofzuiger voor hondenharen allergiehuisdier stofzuiger stilbeste stofzuiger dierenharen 2026
What the title says
Stofzuiger X300 Turbo 2000W - EAN 8595…
Beschrijving: "Hoogwaardige stofzuiger met modern design en rijk toebehoren."
The gap: De titel verkoopt wattage waar niemand naar zoekt en mist de huisdierharen-usecase waar iedereen naar zoekt. (Illustratief voorbeeld.)

De feed-roadmap schrijft zichzelf. Ik heb de afgelopen twee jaar aan een AI-tool voor feedverrijking gebouwd, en de eerlijke zwakte van die hele categorie is impact bewijzen. Dit rapport lost dat op. Herschrijf de titel rond vraag die je net hebt bewezen, en kijk dan hoe CTR en conversiepercentage per zoekopdracht bewegen. AI-feedverrijking houdt op een sprong in het diepe te zijn en wordt een meetbare loop.

2 · Wie er nog meer op “jouw” zoekopdracht zit, en met welk product

Eén ding kun je niet doen. Uitgesloten zoekwoorden per product toevoegen. Google geeft je zo’n hendel niet in Shopping of PMax. Dus als een zoekopdracht × product-paar onderpresteert, leidt de vraag hoe je het uitsluit nergens heen. De productieve vraag is waarom het onderpresteert.

Neem de zoekopdracht en scrape er de live resultatenpagina voor. Ik gebruik DataForSEO, endpoint serp/google/organic/live/advanced. Eén POST met de tekst van de zoekopdracht en de location_code van je markt geeft de hele resultatenpagina terug als gestructureerde JSON, betaalde advertenties, shoppingblokken met merchantnamen en prijzen, organisch eronder. DataForSEO rekent per SERP, en één SERP dekt tot 10 resultaten. Tegen de huidige basisprijs van zo’n $0,002 per SERP kost het checken van 200 zoekopdrachten met standaarddiepte ongeveer $0,40, vóór betaalde geavanceerde parameters.

Een typische bevinding. Je middenklasse slaapzak verzamelt klikken op een generieke zoekopdracht, en dezelfde zoekopdracht toont drie budgetmerken in dezelfde categorie tegen de helft van jouw prijs. Het product is prima. De prijs verliest die specifieke veiling.

Nu heb je echte opties. Herprijzen. Het onderscheidende kenmerk in de titel zetten (“donsvulling, −15 °C comfort”). Het product verplaatsen naar een campagne met een biedstrategie die past bij zijn marge-realiteit. Of de zoekopdracht accepteren als upper-funnel en hem beoordelen op assisterende statistieken in plaats van last click.

3 · Structuur- en biedbeslissingen

Producten die zoekopdrachten met hoge intentie aantrekken, verdienen hun eigen componentengroepen en budgetten. Producten die alleen generieke traffic verzamelen, horen in restgroepen met conservatieve targets. Dit rapport geeft shopping-segmentatie een bewijsbasis, en het vervangt onderbuikgevoel.

4 · Een gezondheidscheck voor PMax

PMax vertelt je vrijwel niets over zoeken. Dit rapport is het dichtste wat je krijgt bij een audit van wat PMax daadwerkelijk voor je inkoopt op het zoekoppervlak, per product.

Kijk hoe ik één echte export doorloop, stap voor stap

Alles hierboven is het waarom. Hier is hoe het er echt uitziet, elke stap, wat je downloadt, waar je naar staart en het echte getal dat terugkomt.

De data is een tweede account, een middelgrote Tsjechische webshop in het koopjessegment. Het is niet de elektronicaretailer uit het GA4-blok hierboven; ik gebruik dit account omdat het assortiment breed genoeg is dat elk patroon op volle schaal zichtbaar wordt. Ik trok het ruwe Shopping-zoekopdrachtenrapport via de Google Ads API naar een lokale SQLite-tabel en draaide de aggregaties hieronder. Eerst één kanttekening. Het ruwe rapport geeft je de advertentiegroep of productgroep waaronder de zoekopdracht werd geserveerd, niet het individuele product. Dat is precies het gat dat de UTM-truc dicht. Maar zelfs op productgroepniveau zijn de tussentijdse uitkomsten luid genoeg om het punt te maken.

Bron voor elk getal in deze sectie: Google Ads Shopping-zoekopdrachtenrapport, één middelgroot Tsjechisch webshopaccount, ~22,6M regels, data getrokken april 2026. Bedragen omgerekend uit CZK tegen ~25 CZK/EUR.

Stap 1 · Trek het ruwe rapport en meet de berg

Exporteer het Shopping-zoekopdrachtenrapport via de Google Ads API (search_term_view) naar iets waarop je een GROUP BY kunt draaien, SQLite of BigQuery. Voordat je ook maar iets koppelt of filtert, draai je een kale COUNT(*) en een paar SUM’s. Je moet voelen hoe groot en hoe luidruchtig de ruwe berg is, want dat ene feit reset elke verwachting die volgt:

De ruwe berg, één COUNT en drie SUM's

  • Rapportregels (zoekopdracht × productgroep) 22.640.716
  • Unieke zoekopdrachten 5.370.131
  • Productgroepen waaronder ze werden geserveerd 10.393
  • Uitgaven / omzet (blended ROAS 6,8×) €103k / €697k

22,6 miljoen regels, 5,4 miljoen unieke zoekopdrachten. Geen mens leest dat. De enige taak van dat getal is je de volgende zet aanwijzen, namelijk de berg inklappen langs de dimensie die de rekeningen betaalt, en je waarschuwen dat handmatige triage per regel hopeloos is.

Stap 2 · Gooi er 96 % van weg vóór je iets analyseert

Tel de regels met nul klikken en filter ze eruit. Het Shopping-zoekopdrachtenrapport logt elke zoekopdracht waarvoor je advertentie verscheen, en op de meeste van die zoekopdrachten heeft nooit iemand geklikt. Regels met alleen vertoningen kunnen je niets kosten en niets converteren. Het is ruis die de tabel angstaanjagend laat lijken.

WHERE clicks > 0 klapt de tabel in tot 738.444 regels, een formaat waar je echt mee kunt werken.

De vertoningenvloed

  • Regels met nul klikken (pure vertoningen) 21.902.272 (96,7 %)
  • Regels die ooit geld kostten 738.444 (3,3 %)

96,7 % van het angstaanjagende getal was nooit iets anders dan ruis. Filter op geklikte regels voordat je iets analyseert, en elke aggregatie hieronder draait op het deel dat echt geld uitgeeft.

Stap 3 · Stel de ene vraag die het account herkadert

Splits op de geklikte regels de uitgaven in “minstens één keer geconverteerd” versus “nooit geconverteerd”, en tel de kosten van elk op. Dit is het getal dat “het account is prima, ROAS is 6,8” verandert in “het meeste budget doet niets”. Bereken het vóór elk optimalisatie-idee:

De nul-conversie-rem

  • Rapportregels die nul keer converteerden 99,75 %
  • Aandeel van totale uitgaven dat die regels opaten 85,5 %
  • Uitgaven zonder enige conversie erachter €88k
  • Alleen van geklikte regels, aandeel met nul conversies 92,3 %

85 % van het budget liep door zoekopdracht × productgroep-combinaties die nooit één keer converteerden.

Dat is geen afrondingsfout die je later optimaliseert. Het is de hoofdact. En je kon het alleen zien omdat je de zoekopdracht hebt ingeklapt naar waartegen die werd verkocht.

Stap 4 · Check of de verspilling een paar schurken is of de hele meute

Sorteer de geklikte regels op kosten, neem de top 1 % en de top 10 %, en kijk hoeveel van de totale uitgaven ze vasthouden. Dit bepaalt je tactiek. Als een handjevol termen het budget verbrandt, pauzeer je die en ben je klaar. Als de verspilling dun is uitgesmeerd, is termen pauzeren zinloos en heb je structurele fixes nodig:

Waar de verspilde uitgaven écht zitten

  • Top 1 % van geklikte regels op kosten 10,5 % van uitgaven
  • Top 10 % van geklikte regels op kosten 29,8 % van uitgaven

De rem is long-tail. De top 1 % van dure regels houdt amper een tiende van de uitgaven vast, dus 20 slechte termen pauzeren verandert niets. Fix de structuur, welke producten in welke campagne op welk target zitten, in plaats van individuele zoekopdrachten te jagen. En onthoud dat Google je sowieso geen uitsluiting per product laat toevoegen.

Stap 5 · Ontdek waarom de long tail lekt: één zoekopdracht, veel producten

Tel voor elke zoekopdracht onder hoeveel verschillende productgroepen die werd geserveerd. Dit verklaart de verspilling mechanisch. Shopping matcht een zoekopdracht tegen de signalen van je hele feed, niet tegen de relevantie van één product. Eén zoekopdracht lekt over ongerelateerde hoeken van je assortiment, en je betaalt voor elke misser.

Een concreet geval uit het account. De zoekopdracht “anti-blafapparaat” bleef budget verbranden, dus draaide ik er COUNT(DISTINCT ad_group) op. Hij was geserveerd onder 139 verschillende advertentie- en productgroepen, voor €39 en ongeveer nul conversies. “lego technic” raakte er 300.

Zoekopdracht-spray over het assortiment

  • Unieke termen geserveerd onder meer dan één productgroep 46,7 %
  • Meeste productgroepen die één zoekopdracht bereikte 6.661
  • "anti-blafapparaat" → groepen / kosten / conversies 139 / €39 / ~0

Bijna de helft van de zoekopdrachten is uitgesmeerd over meerdere productgroepen, en de ergste overtreders bereiken er duizenden. Dat is de motor van de nul-conversie-rem uit stap 3, en precies het ding dat je eindelijk kunt zien zodra elke klik zijn product-ID draagt.

Stap 6 · Bekijk de ergste mismatches, want ze zijn absurd

Trek de duurste regels die nooit converteerden en lees de zoekopdracht naast de productgroep waartegen die werd verkocht. De aggregaatgetallen overtuigen je spreadsheet. Deze drie rijen overtuigen je baas:

Duurste nul-conversie zoekopdracht × productgroep-paren (vertaald en geanonimiseerd; illustratief voor de echte rijen).
ZoekopdrachtGeserveerd onder productgroepKlikkenKostenConv.
hondentrainingsband Handtassen97€110
anti-blafapparaat Babyproducten76€9,600
lego technic Verlichting70€6,800

Een zoekopdracht voor een hondentrainingsband betaald onder de groep Handtassen. Een anti-blafapparaat verkocht tegen Babyproducten. De productgroep heeft niets met de zoekopdracht te maken. Google matchte op brede feedsignalen, incasseerde de klik en rekende het account af. Met zoekopdracht × product zie je dit in één oogopslag; met Google’s standaardrapport nooit. (Categorieën vertaald en geanonimiseerd.)

Stap 7 · Nu de beloning: de 0,25 % die het hele account betaalt

Keer stap 3 om. Isoleer alleen de regels die wel converteerden en tel hun kosten en omzet op. Dit is de reden waarom de hele exercitie ertoe doet. Zodra je de winnaars kunt scheiden van de rem, bescherm je de winnaars en verhonger je de rest.

Het schijfje dat zijn brood verdient

  • Regels die converteerden (aandeel van alle regels) 57.209 (0,25 %)
  • Wat ze kostten €14,9k
  • Wat ze opleverden €697k
  • ROAS op dat schijfje 46,8×

Een kwart procent van de regels draait op 46,8× ROAS en draagt feitelijk het account. De andere 99,75 % trekt het blended cijfer omlaag naar 6,8×. Dat schijfje vinden, zijn budget beschermen en al het andere ervandaan structureren is het hele werk. En niets daarvan is mogelijk totdat elke regel het product draagt waartegen die werd verkocht. Dat is wat de één-parameter-UTM bovenaan dit artikel je oplevert.

Take it with you

Download de complete instructies voor je AI

De hele methode hierboven, herschreven als een brief die je zo in Claude of een andere capabele coding agent plakt. Hij zet het trackingsjabloon, trekt het zoekopdracht × product-rapport uit GA4 en draait de aggregaties op jouw account. Het sjabloon en zijn drie valkuilen zitten er ook in. Laat je e-mail achter en het bestand is van jou.

One file, one list. I only write when there's something worth reading.

FAQ

Werkt dit voor Performance Max?

Ja, voor het zoek- en shoppingoppervlak. Klikken vanaf Display, YouTube en Gmail dragen de product-ID maar geen zoekopdracht, dus reken erop dat die rijen een lege zoekopdrachtdimensie hebben.

Breekt de UTM mijn GA4-attributie?

Nee. Auto-tagging (gclid) blijft bron, medium en campagne afhandelen; je voegt alleen ad content toe. Wat wél iets zou breken is een aangepaste parameter in utm_campaign, dus zet daar nooit iets in.

Waarom maar 78 % dekking?

Consent mode, zoekopdrachtloze PMax-oppervlakken en analytics-blockers eten de rest op. 78 % is ruim voldoende voor elk gebruik hierboven, want je leest patronen, je controleert geen centen.

Kan ik zoekopdrachten zien waarvoor mijn advertentie verscheen maar niemand klikte?

Nee. Deze dataset begint bij de klik. Analyse op vertoningsniveau blijft in het standaard zoekopdrachtenrapport, zonder producten.

Werkt het patroon ook buiten Google, zeg Bing of Sklik?

Ja. Het patroon werkt op elk platform met een URL-sjabloon, een productmacro en een analytics-dimensie om die op te vangen. De specifieke macro’s verschillen per platform.

Hoe lang duurt het tot ik bruikbare data heb?

Hangt af van volume. Ons account had binnen 7 dagen een werkbaar rapport; kleinere accounts verzamelen er beter 30.


CTA: Welke van jouw producten verdienen hun klikken, en welke sturen je alleen een rekening? Voeg de parameter vandaag toe, en over een week weet je het. Of stuur me je account en we lezen het rapport samen.

Waar het allemaal om draait

Wil je dit niveau van inzicht in je eigen account?

Eén e-mail. Ik zeg je eerlijk of het de moeite waard is voor jouw setup.

Contact →