Otevřete GA4, podíváte se na konverze a číslo sedí zhruba na čtvrtinu toho, co vidíte v e-shopu. Připíšete to atribuci a jdete dál.
Většinou to není atribucí. Je to tím, že se do GA4 nikdy nedostal signál od většiny lidí, kteří u vás nakoupili.
Ukážu vám dvě nastavení v Google Tag Manageru, která vypadají skoro stejně a jedno z nich měření vypne. Plus jednu past, která nehodí chybu nikam, takže ji nikdo nehledá.
Kolik lidí vám souhlas nedá
Na vlastním webu měřím reakce na cookie lištu dlouhodobě a čísla jsou vytrvale stejná.
Souhlas dá kolem 15 % návštěvníků. Odmítne asi 10 %. A 72 % lidí lištu ignoruje úplně, tedy neklikne na nic a jde dál číst. Zkoušel jsem lištu dole i vycentrovanou kartu uprostřed obrazovky. Rozdíl mezi nimi byl v mezích statistické chyby, takže umístění není páka.
U e-shopu bude poměr jiný, protože nakupující jsou motivovanější než čtenář blogu. Řád ale zůstává: bez souhlasu je většina vašeho provozu.
A tady je jádro problému. Consent Mode existuje právě proto, aby vám z téhle většiny něco zůstalo, i když identifikátor uložit nesmíte. Když ho nastavíte špatně, nezůstane nic.
Dvě nastavení, která vypadají stejně
V Google Tag Manageru najdete v každém tagu sekci Nastavení souhlasu. Jsou v ní dvě věci a rozdíl mezi nimi rozhoduje o tom, jestli měříte.
Vestavěné kontroly souhlasu znamenají, že tag umí sám reagovat na odmítnutý souhlas. Neuloží cookie, ale odešle takzvaný cookieless ping, tedy anonymní signál bez identifikátoru. Google z něj pozná, že návštěva proběhla, jen neví od koho. Tohle je Consent Mode v pokročilé variantě.
Consent Mode v2 oznámil Google na podzim 2023 a od začátku března 2024 ho v Evropském hospodářském prostoru vyžaduje po každém, kdo chce v Google Ads dál cílit a měřit. K dosavadním analytics_storage a ad_storage přibyly dva signály: ad_user_data a ad_personalization. Bez nich Google z EHP do remarketingových publik nepustí nikoho a omezí i měření a personalizaci reklam. Nastavuju je stejným způsobem jako předchozí dva, takže zablokovaný tag neodešle ani jeden ze čtyř.
Požadován další souhlas znamená něco úplně jiného. Je to tvrdá podmínka: dokud návštěvník nesouhlasí, tag se nespustí vůbec. Neodejde ani ping.
Když má tag obojí, druhé přebíjí první. Vestavěné kontroly jsou pak k ničemu, protože se tag nikdy nedostane ke slovu.
Slovo „další" v názvu přitom svádí k dojmu, že jde o doplněk. Není. Je to vypínač.
Jak poznat, že vám tag dusí měření
Když jsem tohle procházel na vlastním kontejneru, měl analytics_storage jako vyžadovaný další souhlas 41 tagů ze 48. Mezi nimi Google značka, přes kterou jde GA4 i konverze Google Ads.
Výsledek: z těch 85 % návštěv, které souhlas nedaly, nechodilo nikam nic. Ani ping. GA4 vidělo jen 15 % reality a Google Ads optimalizoval na konverze, které byly jen špičkou ledovce.
Zkontrolovat to jde dvěma způsoby. V rozhraní otevřete tag, rozbalíte Rozšířená nastavení a podíváte se, jestli je pole Požadován další souhlas vyplněné. To je práce na kontejner s deseti tagy.
U většího kontejneru je rychlejší stáhnout si publikovanou verzi rovnou ze serveru Googlu:
https://www.googletagmanager.com/gtm.js?id=GTM-XXXXXXX
V tom souboru najdete pole s tagy včetně nastavení souhlasu a projdete je najednou. U kontejneru se šedesáti tagy je to rozdíl mezi hodinou a pěti minutami.
Jedna výjimka, u které gate nechte být: nástroje na nahrávání relací, typicky Microsoft Clarity. Ty cookieless režim nemají, takže je blokace při odmítnutí na místě a odebrat ji nesmíte.
Past, která nehodí chybu
Tohle je nejdražší chyba, jakou jsem si sám způsobil, a stála mě tři měsíce dat.
Consent Mode se nastavuje ve dvou krocích. Nejdřív výchozí stav před načtením lišty, potom aktualizace ve chvíli, kdy návštěvník klikne. Ta aktualizace musí jít přes funkci gtag(), protože ta do dataLayer vkládá svůj vlastní objekt arguments.
Když ji napíšete ručně jako obyčejný objekt, vypadá to skoro stejně:
// Vypadá správně. Google to zahodí.
dataLayer.push({'0': 'consent', '1': 'update', '2': {...}});
// Takhle to funguje.
gtag('consent', 'update', {...});
Rozdíl je v tom, že objekt arguments má vlastnost length, kterou obyčejný objekt nemá. Consent systém Googlu podle ní pozná, že jde o volání, a bez ní zprávu tiše zahodí. Žádná chyba v konzoli, žádné varování v Tag Assistantu, nic.
U mě to znamenalo, že od 29. května do 18. srpna 2026 nechodila z Reactových stránek do GA4 vůbec žádná data. Statické stránky měřily dál, protože na nich gtm.js doběhne dřív než výchozí consent, takže ping projde. Vypadalo to jako problém kontejneru, ne kódu.
Našel jsem to až izolací jedné proměnné na lokálních testovacích stránkách proti produkčnímu kontejneru. Když měření záhadně nefunguje jen někde, hledejte rozdíl v pořadí načítání, ne v nastavení.
Proč modelování konverzí nenaskočí
Google slibuje, že vám chybějící konverze dopočítá z cookieless pingů. Má to jeden háček, o kterém se moc nemluví.
Modelování potřebuje zhruba tisíc denních událostí s odmítnutým souhlasem po dobu sedmi dní. Web, který na tuhle hranici nedosáhne, se modelování nedočká nikdy, i kdyby měl Consent Mode nastavený dokonale.
U e-shopu s běžným provozem to problém není. U firemního webu s několika stovkami návštěv denně na to nespoléhejte a počítejte s tím, že vám v GA4 část dat prostě chybí.
Objem provozu si můžete hlídat i jinak. Postavil jsem si vlastní počítadlo, které měří všechny návštěvy bez cookie, bez localStorage a bez jakéhokoli identifikátoru, takže na něj souhlas nepotřebuje. Neumí a nikdy neumí vracet unikátní návštěvníky ani relace, protože to by identifikátor vyžadovalo. Na objem a zdroj provozu ale stačí a konverzní atribuce zůstane v GA4.
Co s tím udělat tento týden
Pořadí kroků je důležité, protože každý další má smysl jen tehdy, když předchozí sedí.
- Projděte tagy v kontejneru a u Google značky, GA4 a konverzí Google Ads odeberte vyžadovaný další souhlas. Vestavěné kontroly nechte zapnuté.
- Ověřte aktualizaci souhlasu. V konzoli prohlížeče se podívejte na
google_tag_data.ics.entries, tam vidíte skutečný stav podle Googlu, ne podle toho, co si myslíte, že jste poslali. - Zkontrolujte parametr
gcsv odchozích requestech. ZaG1následuje číslice proad_storagea po ní číslice proanalytics_storage.G111znamená souhlas se vším,G100odmítnutí,G110aG101jsou mezistavy. Když při odmítnutí neodchází nic, gate tam pořád je. - Až potom řešte lištu. Design a umístění jsou až poslední na řadě, protože i po zlepšení míry souhlasu vám většina lidí souhlas nedá.
Když Tag Assistant hlásí vypršení časového limitu a nechce naběhnout, podívejte se na hlavičku cross-origin-opener-policy. Nastavená na same-origin přeruší spojení, přes které Tag Assistant se stránkou komunikuje. Řešíte pak infrastrukturu, ne kontejner.
Shrnutí
- Souhlas s cookies vám nedá většina návštěvníků. Na mém webu 72 % lidí lištu ignoruje úplně a umístění lišty s tím nehne.
- V Google Tag Manageru rozlišujte vestavěné kontroly souhlasu a požadovaný další souhlas. První při odmítnutí pošle anonymní ping, druhé tag úplně vypne.
- Když má tag obojí, vyhrává vypínač. U mě to bylo 41 tagů ze 48 a GA4 vidělo jen 15 % reality.
- Aktualizaci souhlasu posílejte přes
gtag(). Ruční push obyčejného objektu do dataLayer Google tiše zahodí, bez chyby v konzoli. - Modelování konverzí potřebuje zhruba tisíc denních událostí s odmítnutím po sedm dní. Menší weby se ho nedočkají.
- Pořadí prací: nejdřív tagy, potom ověření v konzoli, teprve nakonec design lišty.
Rozbité měření je nejčastější nález, se kterým na převzatých účtech začínám. Než začnu cokoli optimalizovat, srovnám konverzní akce a consent, protože kampaň postavená nad špatnými daty se ladit nedá. Co všechno správa Google Ads obnáší, jsem sepsal na samostatné stránce.
