En bref: Les rapports Shopping et PMax montrent la requête, mais cachent le produit. Ajoute un paramètre d’URL, {lpurl}?utm_content={product_id}, et en une semaine GA4 te rend le rapport requête × produit que Google a supprimé, en joignant sessionManualAdContent à sessionGoogleAdsQuery. Sur un compte réel, cette vue a révélé que 85 % des dépenses passaient par des paires qui n’ont jamais converti. Les 0,25 % de paires qui ont converti tournaient à 46,8× de ROAS et rapportaient la totalité du chiffre d’affaires.
Tu veux juste la méthode distillée ?
Télécharge les instructions complètes pour l’IA — un fichier que tu colles dans Claude ou n’importe quel agent de code capable, et il sort le rapport requête × produit de ton propre compte. Laisse ton e-mail et le fichier est à toi — ou continue simplement ta lecture.
Un fichier, une liste. Je n'écris que quand il y a quelque chose à lire.
Un client m’a un jour posé une question qui devrait se régler en un clic. Quelqu’un a cherché « aspirateur sans fil moins de 200 », a cliqué sur l’annonce Shopping, et le compte a payé. Sur lequel des 5 000 produits du flux ce clic a-t-il atterri ? J’ai ouvert le rapport sur les termes de recherche, puis le rapport produits, et je n’ai trouvé aucun moyen de relier la requête au produit. Il n’y en a toujours pas. Google te montre la requête, il te montre le produit, mais jamais ensemble.
Il y a des années, la vieille API AdWords te donnait exactement cet appariement. Puis il a discrètement disparu, et aucun réglage, aucun rapport, aucun champ d’API ne le ramène. Pour une boutique en ligne, cette lacune n’a rien d’anecdotique. C’est dans le lien entre la requête et le produit que se joue la véritable optimisation : il te dit si tes titres collent à la vraie demande, quels produits attirent du trafic pourri, et pourquoi un produit reçoit des clics sans jamais convertir.
Douze ans à développer sur la Google Ads API m’ont appris une chose : quand Google retire un rapport, il ne revient pas. Alors je l’ai reconstruit moi-même, et la reconstruction est d’une simplicité presque gênante. Un paramètre d’URL. En une semaine, GA4 te restitue chaque clic payant sous la forme d’une paire requête × produit, avec les sessions, les conversions et le chiffre d’affaires associés. La mise en place prend quelques minutes ; le reste de cet article explique comment exploiter le résultat.
La solution : un paramètre, deux dimensions GA4
Ajoute un modèle de suivi
Mets {lpurl}?utm_content={product_id} sur tes campagnes Shopping et PMax. La variable ValueTrack {product_id} envoie l’ID produit Merchant Center à chaque clic.
GA4 stocke le produit
L’UTM atterrit dans la dimension Contenu d’annonce manuel de la session (sessionManualAdContent).
GA4 connaît déjà la requête
L’auto-tagging (gclid) remplit sessionGoogleAdsQuery sur la même session.
Joins les deux dimensions
Chaque clic payant devient une paire requête × produit, avec sessions, taux de conversion et chiffre d’affaires à la clé.
L’auto-tagging et l’UTM manuel ne se marchent pas dessus. Le gclid continue de gérer source, support et campagne ; ton UTM ne porte que l’ID produit.
Sache ce que tu obtiens (et ce que tu n’obtiens pas)
- Uniquement les requêtes cliquées. Ce jeu de données commence au clic. Les requêtes où ton annonce s’est affichée sans que personne ne clique n’atteignent jamais GA4. L’analyse au niveau des impressions reste dans le rapport standard de Google, sans les produits.
- Environ 20 % des clics ne s’apparieront pas. Les données manquantes viennent des sessions au consentement refusé, des surfaces PMax sans aucune requête (Display, YouTube, Gmail) et des clics pour lesquels la balise Analytics ne s’est jamais déclenchée.
- Un seul produit par session. La session porte l’ID du produit sur lequel l’utilisateur a cliqué, même s’il en parcourt ensuite dix autres.
Obtiens les instructions IA complètes pour cette méthode
Toute la méthode, réécrite en brief que tu peux coller tel quel dans Claude ou dans n’importe quel agent de code capable. Il pose le modèle de suivi, sort le rapport requête × produit de GA4 et lance les agrégations sur ton compte. Le modèle et ses trois pièges sont aussi dedans. Laisse ton e-mail et le fichier est à toi.
Un fichier, une liste. Je n'écris que quand il y a quelque chose à lire.
Extraire le rapport de GA4
Dans l’interface GA4, ouvre Explorer et monte un tableau au format libre. Les dimensions sont Contenu d’annonce manuel de la session et Requête Google Ads de la session. Les métriques sont les sessions, les événements clés (anciennement conversions) et les revenus liés aux achats. Filtre sur source/support de la session égal à google / cpc.
Pour tout usage sérieux, il te faudra passer par la Data API, car ce rapport a sa place dans un dashboard ou une jointure BigQuery, pas dans un onglet de navigateur :
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"),
)),
)
Joins sessionManualAdContent à ton flux de produits (id → titre, prix, catégorie) et le rapport est complet. Requête, produit, titre, conversions et chiffre d’affaires dans un seul tableau.
Vérifié, pas théorisé
Nous avons déployé ça sur le compte en production d’un détaillant tchèque d’électronique qui gère 22 campagnes Shopping activées. Sept jours plus tard, j’ai vérifié GA4 :
GA4, 7 jours après le déploiement
- Lignes de trafic google/cpc 9 753
- Portaient l’ID produit (utm_content) 96 %
- Portaient la requête (sessionGoogleAdsQuery) 81 %
- Portaient les deux, un rapport requête × produit opérationnel 78 %
Maintenant la partie amusante : ce que les paires révèlent
1 · Le décalage du titre
Place les requêtes à côté du titre et de la description qu’elles ont déclenchés. Le décalage saute aux yeux :
La feuille de route du flux s’écrit toute seule. J’ai passé ces deux dernières années à construire un outil d’enrichissement de flux par IA et, pour être honnête, le point faible de toute la catégorie, c’est la difficulté à en prouver l’impact. Ce rapport résout le problème. Réécris le titre pour coller à la demande que tu viens de prouver, puis observe l’évolution du CTR et du taux de conversion, requête par requête. L’enrichissement de flux par IA cesse de reposer sur la confiance et devient une boucle mesurable.
2 · Qui d’autre apparaît sur « ta » requête, et avec quel produit
Une chose que tu ne peux pas faire, c’est ajouter des mots clés à exclure par produit. Google ne te donne aucun levier de ce genre en Shopping ou en PMax. Alors quand une paire requête × produit sous-performe, demander comment l’exclure ne mène nulle part. La question productive, c’est pourquoi elle sous-performe.
Prends la requête et scrape la page de résultats en temps réel. J’utilise l’endpoint serp/google/organic/live/advanced de DataForSEO. Un POST avec le texte de la requête et le location_code de ton marché renvoie toute la page de résultats en JSON structuré : annonces payantes, blocs shopping avec noms de marchands et prix, et résultats organiques en dessous. DataForSEO facture à la SERP, et une SERP couvre jusqu’à 10 résultats. Au prix de base actuel d’environ 0,002 $ par SERP, vérifier 200 requêtes à la profondeur par défaut coûte à peu près 0,40 $, sans compter les paramètres avancés payants.
Un constat typique. Ton sac de couchage milieu de gamme attire des clics sur une requête générique, et la même requête affiche trois marques discount de la même catégorie à la moitié de ton prix. Le produit est bon. C’est son prix qui lui fait perdre cette enchère.
Tu as maintenant de vraies options. Revois ton prix. Mets ton argument différenciant dans le titre (« garnissage duvet, confort −15 °C »). Déplace le produit vers une campagne dont les enchères collent à sa marge réelle. Ou accepte la requête comme haut de l’entonnoir et évalue-la à l’aide d’indicateurs qui tiennent compte des conversions assistées plutôt qu’au dernier clic.
3 · Décisions de structure et d’enchères
Les produits qui attirent des requêtes à forte intention méritent leurs propres groupes de composants et budgets. Les produits qui ne collectent qu’un trafic générique vont dans des groupes fourre-tout avec des objectifs prudents. Ce rapport fonde la segmentation shopping sur des preuves plutôt que sur l’intuition.
4 · Un bilan de santé pour PMax
PMax ne te dit presque rien sur les recherches. Ce rapport est ce qui se rapproche le plus d’un audit, produit par produit, de ce que PMax achète réellement sur les emplacements de recherche.
Parcourons un export réel, étape par étape
Tout ce qui précède, c’est le pourquoi. Ce qui suit, c’est le comment : ce que tu télécharges, ce que tu regardes et le vrai chiffre qui revient.
Les données de cette section proviennent d’un second compte : celui d’une boutique en ligne tchèque de taille moyenne dans le segment discount. Cette boutique n’est pas le détaillant d’électronique de l’encadré GA4 ci-dessus. J’ai choisi cette boutique parce que son catalogue est assez large pour que chaque tendance apparaisse à pleine échelle. J’ai extrait son rapport brut sur les termes de recherche Shopping via la Google Ads API dans une table SQLite locale et lancé les agrégations ci-dessous. Une réserve : le rapport brut te donne le groupe d’annonces ou le groupe de produits sous lequel la requête a été diffusée, pas le produit individuel. C’est précisément le trou que l’astuce de l’UTM comble. Mais même au niveau du groupe de produits, les chiffres ci-dessous montrent clairement où part réellement le budget.
Source de chaque chiffre de cette section : rapport sur les termes de recherche Shopping de Google Ads, le compte d’une boutique en ligne tchèque de taille moyenne, ~22,6 M de lignes, données extraites en avril 2026. Montants convertis des couronnes tchèques (CZK) en euros au taux de ~25 CZK/EUR.
Étape 1 · Extraire le rapport brut et mesurer le tas
Exporte le rapport sur les termes de recherche Shopping via la Google Ads API (search_term_view) vers n’importe quel outil où tu peux lancer un GROUP BY, comme SQLite ou BigQuery. Avant de joindre ou de filtrer quoi que ce soit, lance un simple COUNT(*) et quelques SUM. Il faut prendre la mesure du volume et du bruit de ce jeu de données brut, car ce seul constat change la façon d’aborder toute la suite :
Le tas brut, un COUNT et trois SUM
- Lignes du rapport (requête × groupe de produits) 22 640 716
- Requêtes distinctes 5 370 131
- Groupes de produits sous lesquels elles ont été diffusées 10 393
- Dépenses / revenus (ROAS global 6,8×) 103 k€ / 697 k€
22,6 millions de lignes, 5,4 millions de requêtes uniques. Aucun humain ne lit ça. Ces deux chiffres n’ont qu’un rôle : écarter l’idée d’un tri manuel ligne par ligne. La seule façon d’avancer consiste à agréger ces lignes selon la dimension qui paie les factures.
Étape 2 · Jettes-en 96 % avant d’analyser quoi que ce soit
Compte les lignes à zéro clic, puis filtre-les. Le rapport sur les termes de recherche Shopping enregistre chaque requête pour laquelle ton annonce s’est affichée, et la plupart de ces requêtes, personne n’a jamais cliqué dessus. Les lignes qui n’ont que des impressions ne peuvent ni te coûter ni convertir. C’est du bruit qui rend la table effrayante.
WHERE clicks > 0 réduit la table à 738 444 lignes, une taille avec laquelle tu peux vraiment travailler.
Le déluge d’impressions
- Lignes à zéro clic (impressions pures) 21 902 272 (96,7 %)
- Lignes qui ont fini par coûter de l’argent 738 444 (3,3 %)
96,7 % du chiffre effrayant n’a jamais été autre chose que du bruit. Filtre sur les lignes cliquées avant d’analyser quoi que ce soit, et toutes les agrégations qui suivent ne portent plus que sur les lignes qui génèrent réellement des dépenses.
Étape 3 · Pose la seule question qui change ton regard sur le compte
Classe les lignes cliquées dans deux catégories : « a converti au moins une fois » et « n’a jamais converti ». Puis additionne le coût de chacune. C’est cette répartition qui transforme « le compte va bien, le ROAS est de 6,8 » en « la majeure partie du budget ne fait rien ». Calcule-la avant toute idée d’optimisation :
Le poids mort sans conversion
- Lignes du rapport ayant converti zéro fois 99,75 %
- Part des dépenses totales que ces lignes ont absorbée 85,5 %
- Dépenses n’ayant généré aucune conversion 88 k€
- Sur les lignes cliquées uniquement, part sans conversion 92,3 %
85 % du budget a transité par des combinaisons requête × groupe de produits qui n’ont jamais converti une seule fois.
Ce n’est pas une simple erreur d’arrondi à corriger plus tard. C’est le plus gros problème du compte. Et tu ne pouvais le voir que parce que tu as ramené chaque requête au groupe de produits sous lequel elle a été diffusée.
Étape 4 · Vérifie si le gaspillage vient de quelques lignes isolées ou de l’ensemble des lignes
Trie les lignes cliquées par coût, prends le top 1 % et le top 10 %, et mesure leur part des dépenses totales. Le résultat détermine la tactique à adopter. Si une poignée de termes brûle le budget, tu les mets en pause et c’est réglé. Si le gaspillage est diffus, mettre des termes en pause est inutile et il te faut des correctifs structurels :
Où se concentrent réellement les dépenses gaspillées
- Top 1 % des lignes cliquées par coût 10,5 % des dépenses
- Top 10 % des lignes cliquées par coût 29,8 % des dépenses
Le gaspillage est diffus. Le top 1 % des lignes coûteuses ne pèse qu’un dixième des dépenses, donc mettre en pause 20 mauvais termes ne change rien. Au lieu de courir après des requêtes individuelles, corrige la structure : décide quels produits vont dans quelle campagne et avec quel objectif. Et souviens-toi que, de toute façon, Google ne te laisse même pas ajouter un mot clé à exclure par produit.
Étape 5 · Découvre pourquoi la longue traîne fuit : une requête, plusieurs produits
Pour chaque requête, compte sous combien de groupes de produits distincts elle a été diffusée. Cela explique mécaniquement le gaspillage. Shopping fait correspondre une requête aux signaux de tout ton flux, pas à la pertinence d’un seul produit. Une seule requête se répand dans des recoins de ton catalogue qui n’ont rien à voir, et chaque mauvaise correspondance te coûte.
Un cas concret du compte. La requête « collier anti-aboiement » continuait de brûler du budget, alors j’ai lancé COUNT(DISTINCT ad_group) dessus. Elle avait été diffusée sous 139 groupes d’annonces et de produits différents, pour 39 € et à peu près zéro conversion. La requête « lego technic » a été diffusée sous 300 groupes d’annonces et de produits différents.
L’éparpillement des requêtes dans le catalogue
- Requêtes distinctes diffusées sous plus d’un groupe de produits 46,7 % de 5 370 131
- Plus grand nombre de groupes de produits atteints par une seule requête 6 661
- « collier anti-aboiement » → groupes / coût / conversions 139 / 39 € / ~0
Près de la moitié des requêtes sont étalées sur plusieurs groupes de produits, et les pires en atteignent des milliers. C’est de là que vient le poids mort sans conversion de l’étape 3. Et c’est exactement ce que tu peux enfin voir une fois que chaque clic porte son ID produit.
Étape 6 · Examine les pires incohérences : elles sont absurdes
Sors les lignes au coût le plus élevé qui n’ont jamais converti et lis la requête à côté du groupe de produits sous lequel elle a été diffusée. Les chiffres agrégés donnent l’ampleur du problème. Voici les trois lignes à mettre sous les yeux de ton patron :
| Requête | Diffusée sous le groupe de produits | Clics | Coût | Conv. |
|---|---|---|---|---|
| collier de dressage pour chien | Sacs à main | 97 | 11 € | 0 |
| collier anti-aboiement | Produits pour bébé | 76 | 9,60 € | 0 |
| lego technic | Éclairage | 70 | 6,80 € | 0 |
La requête « collier de dressage pour chien » a été diffusée sous le groupe Sacs à main. La requête « collier anti-aboiement » a été diffusée sous Produits pour bébé. Le groupe de produits n’a rien à voir avec la requête. Google a associé la requête à des signaux généraux du flux, obtenu le clic et facturé le compte. Avec le rapport requête × produit, tu vois ça d’un coup d’œil ; avec le rapport standard de Google, jamais. (Catégories traduites et anonymisées.)
Étape 7 · Maintenant le gain : les 0,25 % qui paient tout le compte
Inverse l’étape 3. Isole uniquement les lignes qui ont converti et totalise leur coût et leur chiffre d’affaires. C’est tout l’intérêt de l’exercice. Une fois que tu peux séparer les gagnants du poids mort, tu protèges les gagnants et coupes les vivres au reste.
La tranche qui mérite sa place
- Lignes ayant converti (part de toutes les lignes) 57 209 (0,25 %)
- Ce qu’elles ont coûté 14,9 k€
- Ce qu’elles ont rapporté 697 k€
- ROAS sur cette tranche 46,8×
Ces 0,25 % de lignes tournent à 46,8× de ROAS et font vivre le compte à eux seuls. Les 99,75 % restants tirent le ROAS global vers le bas, à 6,8×. Tout le travail consiste à trouver ces 0,25 %, à protéger leur budget et à restructurer le reste du compte pour qu’il cesse de leur disputer le même budget. Rien de tout cela ne fonctionne tant que chaque ligne n’indique pas le produit associé à l’annonce sur laquelle l’utilisateur a cliqué. Cette information vient d’une seule source : le paramètre utm_content={product_id} que tu as configuré au départ.
Télécharge les instructions complètes pour ton IA
Toute la méthode ci-dessus, réécrite en brief que tu peux coller tel quel dans Claude ou dans n’importe quel agent de code capable. Il pose le modèle de suivi, sort le rapport requête × produit de GA4 et lance les agrégations sur ton compte. Le modèle et ses trois pièges sont aussi dedans. Laisse ton e-mail et le fichier est à toi.
Un fichier, une liste. Je n'écris que quand il y a quelque chose à lire.
FAQ
Est-ce que ça marche pour Performance Max ?
Oui, pour la surface search et shopping. Les clics Display, YouTube et Gmail portent l’ID produit mais pas de requête, donc attends-toi à voir ces lignes avec une dimension requête vide.
L’UTM va-t-il casser mon attribution GA4 ?
Non. L’auto-tagging (gclid) continue de gérer source, support et campagne ; tu n’ajoutes que le contenu d’annonce. Ce qui casserait tout, c’est un paramètre personnalisé dans utm_campaign : n’en mets jamais un là-dedans.
Pourquoi seulement 78 % de couverture ?
Le mode consentement, les surfaces PMax sans requête et les bloqueurs analytics grignotent le reste. 78 % suffit largement pour tous les usages ci-dessus, parce que tu lis des tendances, tu ne comptes pas les centimes.
Je peux voir les requêtes pour lesquelles mon annonce s’est affichée sans clic ?
Non. Ce jeu de données commence au clic. L’analyse au niveau des impressions reste dans le rapport standard sur les termes de recherche, sans les produits.
Le procédé fonctionne-t-il hors de Google, disons Bing ou Sklik ?
Oui. Le procédé se transpose à toute plateforme avec un modèle d’URL, une macro produit et une dimension analytics pour la capter. Les macros précises diffèrent selon la plateforme.
Combien de temps avant d’avoir des données exploitables ?
Ça dépend du volume. Notre compte avait un rapport exploitable au bout de 7 jours de données. Pour un compte plus petit, il en faudra 30.
CTA: Lesquels de tes produits méritent leurs clics, et lesquels ne font que te coûter de l’argent ? Ajoute le paramètre aujourd’hui, et dans une semaine tu sauras. Ou envoie-moi ton compte et on lit le rapport ensemble.