Jak se zbavit duplicitních transakcí v Google Analytics
Duplicitní transakce označují stav, kdy jednu objednávku na eshopu uvidíš v Google Analytics několikrát.
Tato situace občas nastává v Universal Analytics (Google Analytics 3). Novější GA4 si již umí s duplicitními transakcemi poradit.
Zda se tvého eshopu tento problém týká zjistíš nejsnáze tak, že si do svého účtu přidáš vlastní přehled pro duplicitní transakce. Klikni na tento odkaz a vyber si své Google Analytics.
Pokud v přehledu uvidíš u jednotlivých ID transakce ve sloupci Transakce čísla vyšší než 1, máš problém.
Některé transakce se ti totiž započítávají opakovaně a to navyšuje jak reportovaný počet transakcí, tak tržby.
V rámci jedné návštěvy dokáží duplicitní transakce odhalit a eliminovat samotné Google Analytics. Avšak v případě ukončené návštěvy již ne (více v článku o definici návštěvy). Proto musíš přijít na řadu ty a tento problém řešit.
Samotné řešení je však technicky náročnější a proto pokud je podíl duplicitních transakcí minimální, doporučuji ti se s tím radši smířit.
Pokud máš ale rád přesnost, mám pro tebe návod.
Jak se zbavit duplicitních transakcí v Google Analytics
Zcela ideální je zadat vývojáři eshopu, aby celou záležitost s několikanásobnými objednávkami vyřešil on.
Stačí totiž, aby děkovací stránka, která obsahuje konverzní kódy, nešla zobrazit vícekrát. Kreativitě se meze nekladou a tak je možné si informaci o odeslaných konverzních kódech uložit do databáze a při opakovém načtení stránky již konverzní kódy neposílat. Nebo ihned po odeslání konverzních kódů uživatele přesměrovat na jinou stránku.
My si ale dnes ukážeme postup pracující s cookie a Google Tag Manageru, který mi ve většině případů problém s opakovaným odesláním transakce vyřeší. V krátkosti spočívá v:
- po odeslání transakce se uloží cookie s číslem objednávky,
- při každém odesílání transakce se nejprve kontroluje, zda již cookie s číslem objednávky neexistuje,
- pokud cookie s číslem objednávky již existuje, transakce se znova nepošle.
Nastavení krok po kroku
Jak už tomu při práci v Google Tag Manageru bývá, můžeš toho hodně pokazit. Proto tento postup na zabránění duplicitním transakcí řeší celý proces včetně testování.
1) Založ paralelní měření návštěvnosti a transakcí
Vytvoř si v Google Analytics novou službu pro testování. Služba musí mít identické nastavení jako ta hlavní a to především nastavení služby, limit relace, limit kampaně a seznam vyloučených odkazujících zdrojů. U výběru dat pak shodně nastav všechna nastavení výběru dat, filtry a aktivuj elektronický obchod,
V GTM vytvoř paralelní měření návštěvnosti a transakcí do nově založené služby v GA. Bude stačit:
- nakopírovat proměnnou UA settings a změnit v ní UA id na službu, kterou jsi před chvíli založil,
- vytvořit kopii značky UA – Pageview a změnit v ní UA settings na testovací,
- vytvořit kopii značky UA – Transaction a také změnit UA settings.
Ostatní značky jako různé posílání eventů atp. kopírovat nemusíš. Nově vytvořené značky a proměnné jasně označ v názvu slovem TEST řešení duplicitních transakcí.
2) Ověř shodu dat
Po 5-7 dnech zkontroluj, že v původní službě i v tvé testovací máš nasbírané zcela stejné údaje. Sedět by měli především uživatelé, návštěvy, transakce a počty duplicitních transakcí.
Pokud se čísla shodují, můžeš pokračovat.
3) Vytvoř dataLayer proměnnou transactionId
Ze všeho nejdříve si v Google Tag Manageru založ proměnnou s názvem dl.transactionId. Ta bude odkazovat na proměnnou v dataLayeru, ve které se skrývá ID objednávky na stránce s poděkováním za nákup.
Možná už takovou proměnnou v GTM máš, jen je jinak pojmenovaná. V tom případě použij ji a jen ve všech následujících kódech uprav odkaz na tuto proměnnou.
4) Založ cookie první strany
Obdobně vytvoř proměnnou cookie.userTransactionIds typu Soubor cookie první strany. Název samotné cookie bude user_transaction_ids.
5) Vytvoř vlastní JavaScript kód pro kontrolu cookie
Tato funkce ti vrátí true, pokud na dané stránce již existuje cookie a obsahuje ID transakce, kterou chceš odeslat. To využiješ tak, že pokud tato funce vrátí true, zablokuješ další odeslání transakce.
Vytvoř novou proměnnou, pojmenuj ji js.isTransactionIdInCookie, typ vyber Custom JavaScript a vlož do ní kód.
1 2 3 |
function() { return /(,|^){{dl.transactionId}}/.test({{cookie.userTransactionIds}}); } |
Pokud jsi proměnné v předchozích krocích pojmenoval jinak, tak uprav jejich název v kódu.
6) Založ vlastní JavaScript kód pro nastavení cookie
Poslední proměnnou je JavaScript s názvem js.hitcallbackSetTransactionCookie, který po úspěšném odeslání transakce vytvoří cookie s ID transakce.
Navíc budeš předpokládat, že uživatel může nakoupit na eshopu vícekrát a tak ID každé další transakce přidáš do cookie místo toho, abys zakládal cookie novou nebo ji přepsal.
Vytvoř proměnnou js.hitcallbackSetTransactionCookie typu Custom JavaScript a vlož do ní kód.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
function() { return function() { var d, expires; var cvalue = ''; // Run the code only if a transaction is found in the data layer if ({{dl.transactionId}}) { d = new Date(); d.setTime(d.getTime() + 63072000000); expires = 'expires='+d.toUTCString(); // If the cookie already exists, append not overwrite if ({{cookie.userTransactionIds}}) { cvalue = {{cookie.userTransactionIds}} + ','; } document.cookie = 'user_transaction_ids=' + cvalue + {{dl.transactionId}} + '; ' + expires + '; path=/'; } }; } |
Názvy proměnných v kódu uprav, pokud jsi je pojmenoval jinak.
7) Vytvoř blokující pravidlo
Protože chceš zabránit odeslání transakce v případě, že cookie s ID transakce již existuje, vytvoř si blokující pravidlo.
Předpokládej, že stránka s poděkováním za objednávku se nachází na adrese /objednavka-odeslana. Vytvoř nové pravidlo spouštění s názvem Transakce již byla odeslána, typem Zobrazení stránky a přidej dvě podmínky
- Page URL contains /objednavka-odeslana
- js.isTransactionIdInCookie equals true
Pravidlo spouštění se tak aktivuje na děkovací stránce a jen pokud ID transakce již v cookie existuje.
8) Uprav spouštění značky s odesláním transakce
Nyní máš vše připraveno a již stačí pouze změnit podmínky pro spouštění značky odesílající transakci do Google Analytics. Pamatuj, že jako první vše nastavuješ jen u testovací značky.
Nejprve u značky v Další nastavení přidej nové pole k nastavení. Do pole hitCallback vyplň hodnotou {{js.hitcallbackSetTransactionCookie}}.
Čili po úspěšném odeslání transakce se spustí funkce js.hitcallbackSetTransactionCookie a ta vytvoří cookie.
U značky ještě přidej blokující pravidlo spouštění Transakce již byla odeslána.
9) Zkontroluj, že v testovací službě se duplicity neobjevují
Počkej dalších pár dní a zkontroluj, že v testovací službě se již duplicitní transakce neobjevují, ale jinak se počty návštěv a uživatelů shodují se službou hlavní.
Pokud tomu tak je, tak uprav i posílání transakcí do hlavní služby (krok 8).
Spočítej si, o kolik se liší počet transakcí v původní a testovací službě. Toto číslo udává, o kolik předtím Google Analytics transakce kvůli duplicitám nadhodnocovaly.
Do GA je pak o tom vhodné dát poznámku. Něco jako „Implementováno řešení duplicitních transakcí. Dle testu lze očekávat 11% propad v počtu transakcí a tržeb od dnešního dne.“
10) Finální ověření a ukončení testu
Když za několik dní vše vypadá dobře a v hlavní službě se již duplicitní transakce neobjevují. Můžeš test ukončit. To spočívá v:
- smazání testovací značky UA – Transaction,
- smazání testovací značky UA – Pageview,
- smazání testovací proměnné UA settings,
- smazání testovací služby v Analytics.
Závěr
Ze zkušenosti mohu říci, že i při správné implementaci se ještě tu a tam duplicitní transakce objeví. Toto řešení totiž nepostihne situaci, kdy si děkovací stránku někdo otevře v jiném prohlížeči nebo smaže cookies. Avšak duplikovanost transakcí se výrazně sníží na nevýznamné hodnoty.
Celý tento postup na eliminaci duplicitních transakcí vychází ze článku #GTMTips: Prevent Repeat Transactions. Díky za inspiraci, Simo.
Pokud ti něco nefunguje či máš otázku, dej mi vědět. Rád poradím.