Stručně: Reporty Shopping a PMax ukážou dotaz, ale produkt skryjí. Přidej jeden URL parametr, {lpurl}?utm_content={product_id}, a do týdne ti GA4 vydá zrušený report dotaz × produkt spojením sessionManualAdContent a sessionGoogleAdsQuery. Na reálném účtu ten pohled odhalil, že 85 % útraty teklo přes páry, které nikdy nekonvertovaly, zatímco výseč 0,25 % nesla celý účet s ROAS 46,8×.
Klient se mě jednou zeptal na něco, co by mělo mít odpověď na jeden klik. Někdo hledal „aku vysavač do 200”, klikl na Shopping reklamu a účet to zaplatil. Na kterém z 5 000 produktů ve feedu ten proklik přistál? Otevřel jsem report vyhledávacích dotazů, pak produktový report, a nešlo je nijak propojit. Pořád to nejde. Google ti ukáže dotaz a ukáže ti produkt, ale nikdy dohromady.
Před lety ti přesně tohle párování dávalo staré AdWords API. Pak potichu zmizelo a žádné nastavení, žádný report, žádné API pole ho nevrátí. Pro e-shop to není kosmetická mezera. Právě v páru dotaz a produkt žije skutečná optimalizace. Jestli tvoje názvy odpovídají reálné poptávce. Které produkty tahají odpadní provoz. Proč produkt dostává prokliky, ale nikdy nekonvertuje.
Dvanáct let psaní proti Google Ads API mě naučilo, že když Google nějaký report zruší, už se nevrátí. Tak jsem si ho postavil sám a ta stavba je až trapně jednoduchá. Jeden URL parametr. Do týdne ti GA4 vydá každý placený proklik spárovaný jako dotaz × produkt, s relacemi, konverzemi a tržbami u toho. Stavba zabere minuty; zbytek článku je o tom, co uděláš s tím, co se vrátí.
Řešení: jeden parametr, dvě GA4 dimenze
Přidej tracking šablonu
Na kampaně Shopping a PMax nastav {lpurl}?utm_content={product_id}. ValueTrack proměnná {product_id} posílá s každým proklikem ID produktu z Merchant Center.
GA4 produkt uloží
UTM dopadne do dimenze Manuální obsah inzerce relace (sessionManualAdContent).
GA4 už dotaz zná
Auto-tagging (gclid) ve stejné relaci doplní sessionGoogleAdsQuery.
Spoj obě dimenze
Z každého placeného prokliku se stane pár dotaz × produkt, s relacemi, konverzním poměrem a tržbami.
Auto-tagging a manuální UTM se spolu neperou. Gclid se dál stará o zdroj, médium a kampaň; tvoje UTM nese jen ID produktu.
Měj jasno, co dostaneš (a co ne)
- Jen proklikané dotazy. Tahle datová sada začíná u prokliku. Dotazy, kde se tvoje reklama zobrazila, ale nikdo neklikl, do GA4 nikdy nedorazí. Analýza na úrovni zobrazení zůstává ve standardním reportu Googlu, bez produktů.
- Zhruba 20 % kliknutí se nespáruje. Relace s odmítnutým souhlasem, PMax plochy bez jakéhokoli dotazu (Display, YouTube, Gmail), prokliky, kde se analytika vůbec nespustila.
- Vázáno na relaci. Jedna relace nese jedno ID produktu, to proklikané, i když si pak uživatel projde deset dalších.
Jak report z GA4 vytáhnout
V rozhraní GA4 otevři Prozkoumat a postav tabulku ve volné formě. Dimenze jsou Manuální obsah inzerce relace a Vyhledávací dotaz Google Ads relace. Metriky jsou relace, klíčové události (dříve konverze) a tržby z nákupu. Filtruj na zdroj/médium relace rovno google / cpc.
Na cokoli vážnějšího budeš chtít Data API, protože tenhle report patří do dashboardu nebo do joinu v BigQuery, ne do záložky prohlížeče:
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"),
)),
)
Spoj sessionManualAdContent se svým produktovým feedem (id na název, cenu, kategorii) a report je kompletní. Dotaz, produkt, název a ekonomika v jedné tabulce.
Ověřeno, ne vyteoretizováno
Nasadili jsme to na živý účet, český prodejce elektroniky s 22 zapnutými Shopping kampaněmi, a o sedm dní později jsem zkontroloval GA4:
GA4, 7 dní po nasazení
- Řádků provozu google/cpc 9 753
- Neslo ID produktu (utm_content) 96 %
- Neslo vyhledávací dotaz (sessionGoogleAdsQuery) 81 %
- Neslo obojí, funkční report dotaz × produkt 78 %
A teď ta zábava: co ti páry prozradí
1 · Mezera v názvu
Postav dotazy vedle názvu a popisu, který vyvolaly. Nesoulad bije do očí:
Roadmapa feedu se napíše sama. Poslední dva roky stavím AI nástroj na obohacování feedů a poctivá slabina celé té kategorie je prokazování dopadu. Tenhle report to řeší. Přepiš název kolem poptávky, kterou sis právě prokázal, a pak sleduj, jak se CTR a konverzní poměr hýbou po dotazech. AI obohacování feedu přestává být skokem do tmy a stává se měřitelnou smyčkou.
2 · Kdo další je na „tvém” dotazu a s jakým produktem
Vylučující klíčová slova na úrovni produktu přidat nemůžeš. Google ti v Shoppingu ani PMaxu takovou páku nedá. Takže když pár dotaz × produkt podává slabý výkon, otázka „jak ho vyloučím” nikam nevede. Produktivní otázka je, proč podává slabý výkon.
Vezmi ten dotaz a oscrapuj si k němu živou stránku s výsledky. Používám DataForSEO, endpoint serp/google/organic/live/advanced. Jeden POST s textem dotazu a location_code tvého trhu vrátí celou výsledkovou stránku jako strukturovaný JSON, placené reklamy, Shopping bloky se jmény prodejců a cenami, organiku pod nimi. DataForSEO účtuje za SERP a jeden SERP pokrývá až 10 výsledků. Při současné základní ceně zhruba $0.002 za SERP vyjde kontrola 200 dotazů s výchozí hloubkou asi na $0.40, bez placených pokročilých parametrů.
Typický nález. Tvůj středně drahý spacák sbírá prokliky na generický dotaz a tentýž dotaz ukazuje tři levné značky ve stejné kategorii za polovinu tvé ceny. Produkt je v pořádku. Tu konkrétní aukci prohrává cena.
Teď máš reálné možnosti. Přecenit. Protlačit do názvu odlišovač („péřová výplň, komfort −15 °C”). Přesunout produkt do kampaně s biddingem, který sedí jeho marži. Nebo dotaz přijmout jako horní část trychtýře a posuzovat ho podle asistovaných metrik místo last clicku.
3 · Rozhodnutí o struktuře a biddingu
Produkty přitahující dotazy s vysokým záměrem si zaslouží vlastní asset groups a rozpočty. Produkty sbírající jen generický provoz patří do sběrných skupin s konzervativními cíli. Tenhle report dává segmentaci Shoppingu důkazní základnu a nahrazuje pocit od břicha.
4 · Zdravotní prohlídka PMaxu
PMax ti o vyhledávání neřekne skoro nic. Tenhle report je nejblíž auditu toho, co pro tebe PMax na vyhledávací ploše skutečně nakupuje, po produktech.
Projdu s tebou jeden reálný export, krok po kroku
Všechno výše je proč. Tady je, jak to doopravdy vypadá, každý krok, co stáhneš, na co koukáš a jaké reálné číslo se vrátí.
Data jsou z druhého účtu, středně velkého českého e-shopu v segmentu levného zboží. Není to ten prodejce elektroniky z GA4 boxu výše; beru ho, protože jeho katalog je dost široký na to, aby se každý vzorec ukázal v plném měřítku. Jeho surový report vyhledávacích dotazů ze Shoppingu jsem stáhl přes Google Ads API do lokální SQLite tabulky a pustil na něj agregace níže. Jedna výhrada hned na začátku. Surový report ti dá reklamní nebo produktovou skupinu, pod kterou se dotaz zobrazil, ne konkrétní produkt. Přesně tuhle mezeru zavírá ten UTM trik. Ale i na úrovni produktové skupiny jsou mezivýstupy dost hlasité na to, aby pointa vyšla.
Zdroj všech čísel v této sekci: report vyhledávacích dotazů Shopping (Google Ads), jeden středně velký český e-shop, ~22,6 mil. řádků, data stažena v dubnu 2026. Částky přepočtené z CZK kurzem ~25 CZK/EUR.
Krok 1 · Stáhni surový report a změř tu hromadu
Vyexportuj report vyhledávacích dotazů Shopping přes Google Ads API (search_term_view) do čehokoli, na čem spustíš GROUP BY, do SQLite nebo BigQuery. Než cokoli spojíš nebo vyfiltruješ, pusť prostý COUNT(*) a pár SUMů. Potřebuješ vycítit, jak velká a jak zašuměná ta surová hromada je, protože tenhle jeden fakt resetuje všechna očekávání, která následují:
Surová hromada, jeden COUNT a tři SUMy
- Řádky reportu (dotaz × produktová skupina) 22 640 716
- Unikátní vyhledávací dotazy 5 370 131
- Produktové skupiny, pod kterými se zobrazily 10 393
- Náklad / tržby (smíšený ROAS 6,8×) 103 tis. / 697 tis. €
22,6 milionu řádků, 5,4 milionu unikátních dotazů. To nikdo nepřečte. Jediný úkol toho čísla je říct ti další krok, totiž zhroutit hromadu podle dimenze, která platí účty, a varovat tě, že ruční triáž po řádcích je beznadějná.
Krok 2 · Zahoď 96 % dřív, než cokoli analyzuješ
Spočítej řádky s nulou prokliků a vyfiltruj je. Report vyhledávacích dotazů Shopping loguje každý dotaz, na který se tvoje reklama zobrazila, a na většinu z nich nikdy nikdo neklikl. Čistě zobrazovací řádky tě nemůžou nic stát a nemůžou nic prodat. Je to šum, kvůli kterému tabulka vypadá děsivě.
WHERE clicks > 0 zhroutí tabulku na 738 444 řádků, velikost, se kterou se dá reálně pracovat.
Záplava zobrazení
- Řádky s nulou prokliků (čistá zobrazení) 21 902 272 (96,7 %)
- Řádky, které tě vůbec něco stály 738 444 (3,3 %)
96,7 % toho děsivého čísla nikdy nebylo nic jiného než šum. Filtruj na proklikané řádky, než cokoli analyzuješ, a každá agregace níže poběží na části, která reálně utrácí peníze.
Krok 3 · Polož tu jednu otázku, která účet překreslí
Na proklikaných řádcích rozděl útratu na „aspoň jednou konvertoval” a „nikdy nekonvertoval” a sečti náklad každé skupiny. Tohle je číslo, které z „účet je v pohodě, ROAS 6,8” udělá „většina rozpočtu nedělá nic”. Spočítej ho dřív než jakýkoli nápad na optimalizaci:
Brzda nulových konverzí
- Řádky reportu s nulou konverzí 99,75 %
- Podíl celkové útraty, který tyhle řádky snědly 85,5 %
- Náklad bez jediné konverze za ním 88 tis. €
- Jen z proklikaných řádků, podíl s nulou konverzí 92,3 %
85 % rozpočtu proteklo kombinacemi dotaz × produktová skupina, které ani jednou nekonvertovaly.
To není zaokrouhlovací chyba, kterou doladíš později. Je to hlavní událost. A viděl jsi ji jen proto, že jsi dotaz zhroutil na to, proti čemu se prodával.
Krok 4 · Zjisti, jestli je plýtvání pár padouchů, nebo celý dav
Seřaď proklikané řádky podle nákladu, vezmi horní 1 % a horních 10 % a podívej se, kolik celkové útraty drží. Tohle rozhodne o tvé taktice. Když rozpočet pálí hrstka dotazů, pozastavíš je a máš hotovo. Když je plýtvání rozetřené natenko, pozastavování dotazů nemá smysl a potřebuješ strukturální zásahy:
Kde proplýtvaný náklad opravdu sedí
- Horní 1 % proklikaných řádků dle nákladu 10,5 % útraty
- Horních 10 % proklikaných řádků dle nákladu 29,8 % útraty
Brzda je dlouhý ocas. Horní 1 % nákladných řádků drží sotva desetinu útraty, takže pozastavení 20 špatných dotazů nezmění nic. Oprav strukturu, tedy který produkt sedí v které kampani na jakém cíli, místo honění jednotlivých dotazů. A pamatuj, že vylučující slovo na úrovni produktu ti Google stejně přidat nedovolí.
Krok 5 · Zjisti, proč dlouhý ocas protéká: jeden dotaz, mnoho produktů
Pro každý vyhledávací dotaz spočítej, pod kolika různými produktovými skupinami se zobrazil. Tohle vysvětluje plýtvání mechanicky. Shopping páruje dotaz proti signálům celého tvého feedu, ne proti relevanci jednoho produktu. Jeden dotaz protéká do nesouvisejících koutů katalogu a ty platíš za každý mimoběh.
Konkrétní případ z účtu. Dotaz „obojek proti štěkání” pořád pálil rozpočet, tak jsem na něj pustil COUNT(DISTINCT ad_group). Zobrazil se pod 139 různými reklamními a produktovými skupinami, za 39 € a zhruba nula konverzí. „lego technic” se dotklo 300.
Rozstřik dotazu po katalogu
- Dotazy zobrazené pod více než jednou produktovou skupinou 46,7 %
- Nejvíc produktových skupin, kam dosáhl jeden dotaz 6 661
- „obojek proti štěkání" → skupiny / náklad / konverze 139 / 39 € / ~0
Skoro polovina dotazů je rozmázlá přes víc produktových skupin a ti nejhorší dosahují tisíců. To je motor brzdy nulových konverzí z kroku 3 a přesně ta věc, kterou konečně uvidíš, jakmile každý proklik nese ID svého produktu.
Krok 6 · Prohlédni si nejhorší nesoulady, protože jsou absurdní
Vytáhni nejnákladnější řádky, které nikdy nekonvertovaly, a přečti si dotaz vedle produktové skupiny, proti které se prodával. Agregátní čísla přesvědčí tvůj spreadsheet. Tyhle tři řádky přesvědčí tvého šéfa:
| Vyhledávací dotaz | Zobrazeno pod produktovou skupinou | Prokliky | Náklad | Konv. |
|---|---|---|---|---|
| výcvikový obojek pro psa | Kabelky | 97 | 11 € | 0 |
| obojek proti štěkání | Kojenecké potřeby | 76 | 9,60 € | 0 |
| lego technic | Svítidla | 70 | 6,80 € | 0 |
Dotaz na výcvikový obojek pro psa zaplacený pod skupinou Kabelky. Obojek proti štěkání prodávaný proti Kojeneckým potřebám. Produktová skupina nemá s dotazem nic společného. Google spároval na hrubé signály feedu, sebral proklik a naúčtoval ho účtu. S dotazem × produktem tohle vidíš na jeden pohled; ve standardním reportu Googlu nikdy. (Kategorie přeložené a anonymizované.)
Krok 7 · A teď výplata: 0,25 %, které platí celý účet
Obrať krok 3. Izoluj jen řádky, které konvertovaly, a sečti jejich náklad a tržby. Tohle je důvod, proč celé cvičení dává smysl. Jakmile umíš oddělit vítěze od brzdy, vítěze chráníš a zbytek necháš vyhladovět.
Výseč, která se uživí
- Řádky, které konvertovaly (podíl ze všech) 57 209 (0,25 %)
- Kolik stály 14,9 tis. €
- Kolik vrátily 697 tis. €
- ROAS té výseče 46,8×
Čtvrt procenta řádků běží na 46,8× ROAS a fakticky nese celý účet. Zbylých 99,75 % stahuje smíšené číslo dolů na 6,8×. Najít tu výseč, chránit její rozpočet a všechno ostatní od ní strukturně odsunout je celá ta práce. A nic z toho nejde, dokud každý řádek nenese produkt, proti kterému se prodával. Přesně tohle ti kupuje ten jednoparametrový UTM ze začátku článku.
Stáhni si kompletní instrukce pro svou AI
Celá metoda výše, přepsaná jako zadání, které vložíš rovnou do Clauda nebo jiného schopného coding agenta. Nastaví tracking šablonu, vytáhne report dotaz × produkt z GA4 a pustí agregace na tvém účtu. Šablona a její tři pasti jsou tam taky. Nech e-mail a soubor je tvůj.
One file, one list. I only write when there's something worth reading.
FAQ
Funguje to pro Performance Max?
Ano, pro vyhledávací a shopping plochu. Prokliky z Display, YouTube a Gmailu nesou ID produktu, ale žádný dotaz, takže u těch řádků čekej prázdnou dimenzi dotazu.
Rozbije mi UTM atribuci v GA4?
Ne. Auto-tagging (gclid) se dál stará o zdroj, médium a kampaň; ty přidáváš jen obsah inzerce. Co by věci rozbilo, je custom parametr uvnitř utm_campaign, takže tam žádný nedávej.
Proč jen 78% pokrytí?
Zbytek snědí consent mode, PMax plochy bez dotazu a blokátory analytiky. 78 % bohatě stačí na každý use case výše, protože čteš vzorce, neaudituješ halíře.
Uvidím dotazy, na které se reklama zobrazila, ale nikdo neklikl?
Ne. Tahle datová sada začíná u prokliku. Analýza na úrovni zobrazení zůstává ve standardním reportu vyhledávacích dotazů, bez produktů.
Funguje ten vzorec i mimo Google, třeba Bing nebo Sklik?
Ano. Vzorec se přenese na jakoukoli platformu s URL šablonou, produktovým makrem a analytickou dimenzí, která ho zachytí. Konkrétní makra se liší podle platformy.
Za jak dlouho budu mít použitelná data?
Záleží na objemu. Náš účet měl použitelný report za 7 dní; menší účty by měly sbírat 30.
CTA: Které z tvých produktů si své prokliky vydělají a které ti je jen účtují? Přidej ten parametr dnes a za týden to budeš vědět. Nebo mi pošli svůj účet a přečteme si ten report spolu.