Sådan tracker du adskillige setups i Google Analytics 4

Denne blogpost dykker ned i, hvordan du enkelt kan tracke Google Analytics 4 i dit GTM setup uden, at du behøver at have mange forskellige tags, triggers og variabler.

For dig som CMO / Marketingansvarlig, betyder dette ikke så meget. Denne implementering gør, at du ikke bruger unødig lang tid på, at eksterne konsulenter skal sætte den samme tracking op flere gange. Enten via flere tags eller via adskillige GTM setups.

Introduktion

Den 14. oktober 2020 lancerede Google et nyt produkt, Google Analytics 4. Produktet i sig selv var faktisk ikke specielt nyt – det var en rebranding af Googles tidligere App+Web produkt, som erstattede Google Analytics SDK’en tilbage i 2019.

Googles nye produkt, GA4, sætter scenen for fremtiden indenfor Google Analytics. Der er ændret meget – både ift. Hvordan tracking fungerer rent lavpraktisk, hvor vi går fra at måle hittyper som sidevisninger, brugstid, sociale interaktioner til altid at tale om hændelser.

Dette indlæg bliver teknisk og gennemgår i dybden, hvordan vi vil opsætte en global GA4 løsning på tværs af markeder. Yderligere er dette baseret på et SPA site med cookiecompliance. Du kan overføre dette setup til dit eget regulære site el.lign. ved at tweake i setup’et. Søger du hjælp til at migrere til GA4? Så kontakt os her.

Global GTM er vejen frem

Hos Refyne praktiserer vi, at man får opsat en global Google Tag Manager løsning for alle sine websites, dog med forudsætning af, at disse websites er nogenlunde identiske ift. DOM-træet, så de samme triggers kan blive brugt på tværs af websites.

Med en global GTM sikrer du:

  • Samme tracking på tværs af dine websites
  • Nem onboarding af nye websites eller markeder
  • Du bruger mindre tid på at implementere ny tracking

Herunder anvender vi primært lookup tables til at hente de variabler, som er nødvendige for de respektive domæner. F.eks. Facebook Pixel ID, Google Analytics ID, Valutakoder m.v. Hvis du går meget op i performance kan du overveje at gøre brug af lookup tables vs regex tables for performance. I denne guide bruger jeg dog regex tables (men opgaven kunne også være klaret med lookup med et mindre performance opløft).

I Universal Analytics (den forrige Analytics-version), har vi haft muligheden for at manipulere trackeren inden, at det blev sendt til Google via en Custom Task API. Det har gjort, at vi bl.a. har haft mulighed for at:

  • Sende den samme tracking til flere forskellige analytics koder
  • Blokere duplicate transactions
  • Sende data til custom dimensions og metrics
  • Tracke hitTypes
  • Fjerne personhenførbar data såsom emails m.v., inden det lagres.

Denne mulighed er pt ikke overført til GA4, hvoraf det kræver nogle workarounds for at virke.

Hvordan ser en normal GA4 opsætning ud?

Jeg har set flere setups med tiden, hvor man vælger at implementere én configuration, ét pageview tag og diverse events for hvert eneste marked. Hvis du opererer i f.eks. 5 lande, så har du pludselig et potentiale for 15-17+ forskellige tags og triggers, som du skal styre. Dels bliver det noget rod, men det tager også lang tid at håndtere.

Hvad gør man, når customTask ikke virker?

Som bekendt er customTask API’en ikke en feature i GA4, og der er heller ikke en tilsvarende feature (som det er i dag). Derfor kræver det en work-around.

Jeg har ikke set andre metoder for samme tilgang, men jeg viser her min tilgang.

Tilgangen er ekstra effektiv, når du skal overføre et datalayer setup til Enhanced Ecommerce ift. Universal Analytics taksonomi. Her skal hver hændelse have sit eget event tag. Løsningen er ekstra god her.

Hvordan sætter vi det op?

Først indsætter du et Custom HTML script. Her er et eksempel, som jeg bruger – dette giver mig mulighed for at sende specifikke ID’er efter, hvilket marked der besøges, men samtidig duplikere eventet og sende det videre til en RollUp konto (altså en konto som indeholder alle lande):

(function() {
var event = {{Event}};
var gtm = google_tag_manager[{{Container ID}}];
window.dataLayer.push({
'event' : 'GA4.RollUp.' + event
});
window.dataLayer.push({
'event' : 'GA4.Individual.' + '{{Regex Table - Country lookup}}.' + event,
'eventCallback' : function() { gtm.onHtmlSuccess(); }
});
})();

Hvad betyder det så?

Event

Denne lytter efter events, som sker i GTMs datalayer. Eksempelvis kan det være productDetails eller addToCart fra Enhanced Ecommerce, som skydes ud fra serveren.

Denne skal du aktivere under Variables → Configure → Event:

Window.dataLayer.push

Pusher et nyt event, som enten hedder f.eks.:

  • RollUp.productDetails
  • Individual.”Marked”.productDetails

Regex table

Regex table definerer vores variabel, og hvor vi skal sende data hen baseret på en variabel. Det kan f.eks. være baseret på URL’en, som de besøger, hvor vi kan sende den aktuelle sporingskode til GA4.

eventCallback

Basalt set er dette en metodik i Google Tag Manager, hvor vi fortæller systemet, at den kan fortsætte med øvrige ting, som foregik før dette loop. Hvis du er nysgerrig på eventCallback, så har Simo Ahava en guide her.

Hvilket output giver dette?

Her er et billede, som viser sekvenseringen af vores dataLayers nu:

Først aktiverer vi et virtualpageview (dette sendes fra serveren), herefter et productDetails, som indeholder relevante informationer omkring det produkt, som vi har besøgt. Ved 5 &6 samt 8 &9 duplikerer vi virtualpageview eventet, så vi får 2 nye events. Handlingen er den samme, men det muliggør, at vi kun skal have ét tag til at styre informationen.

Herefter skal vi vælge, hvilket ID vi sender hvornår.

Det gør vi via en Custom Javascript variabel.

Custom Javascript – Duplicate GA4 hit

Dette javascript kode har til formål at sikre, at vi sender det rigtige ID efter, hvilket dataLayer push der sker. Dvs. at vi sender det rigtige på RollUp eventet samt på de individuelle lande.

Koden kan du få her:

function() {
var event = {{Event}}
var regexFirst = /\.RollUp/
var regexSecond = /\.Individual/
if (regexFirst.test(event)) {
return "{{Constant - RollUp ID}}";
} else if (regexSecond.test(event)) {
return "{{LookUp Table - GA4 look-up}}";
}
}

Forklaring

Jeg har oprettet min RollUp som en constant. I stedet for at den er hardcodet ind i vores javascript, foretrækker jeg, at vi benytter variabler, så det hele kæder sammen i setup’et.

Derudover har jeg en LookUp Table, som sender vores GA4 ID fra de enkelte lande alt efter, hvilket website man besøger. Dette er opsat således:

Jeg slår full match og enable capture groups fra – det afhænger af setup’et, og du skal potentielt gøre brug af dem i dit.

Hvordan sætter jeg mine GA4 tag op?

Personligt gør jeg det via følgende opsætning:

  • Konfiguration af RollUp Konto
  • Konfiguration af det individuelle land
  • Pageview
  • Resterende events…

Her er det vigtigt, at du slår ”send a page view event when this configuration loads” fra. Det gør, at vi styrer alle vores events til GA4 via event tags og ikke rører ved selve konfigurationen.

For individuelle lande bliver det således:

Og for rollup kontoen:

Jeg opsætter to særskilte konfigurationer. Det gør jeg for at have friheden til at tilføje tracking til en rollup konto, som måske afviger fra de enkelte lande (eller omvendt). Potentielt set kunne du sagtens have en konfiguration og bruge sequencing, så du sikrer, at GA4 konfigurationen altid loader først.

Hvilken trigger skal vi bruge?

Det afhænger af dit setup. Men langt de fleste løsninger ville kunne enten gøre brug af DOM Ready, eller hvis du benytter dig af Cookieinformation / Cookiebot, så kan du med fordel bruge ”cookie_cat_statistic”, så vi kun konfigurerer vores GA4, når brugeren har givet samtykke til det.

Her er et eksempel på en trigger. Men brug den, som passer til dig og dit setup:

Nu har vi fået konfigureret vores GA4 opsætning. Så skal vi opsætte events, så vi også får sendt data afsted til systemet.

GA4 Pageview Event

GA4 har fastdefinerede eventnavne, som systemet gør brug af. Hvis du er nysgerrig på hvilke, så kan du finde en oversigt her over både standard events og øvrige sporingshændelser.

I dette eksempel opretter vi et pageview tag:

Her sætter vi manuelt et ID. I Measurement ID sætter vi vores Custom JS-variabel, som vi definerede tidligere – {{Custom JS – Duplicate GA4}}. Event Name kan være hvad som helst. Om det er view_item eller page_view er underordnet for dette eksempel. Dog er triggeren vigtig.

Trigger: Event – Regex – Virtualpageview

Da dette setup er baseret på en Single Page Application (SPA). Dvs. vi loader content ind dynamisk og GTMs datamodel loades som udgangspunkt kun 1 gang, så har jeg via udviklerne fået skudt et event ud fra serveren, hver gang en ny side loader. Dette er ikke en nødvendighed for opsætningen. Du kan sagtens opsætte dette til et alm. Site også, der er dog adskillige måder at gøre det på (f.eks. browser events), som jeg ikke vil dække her.

Hvis du vil gøre brug af events, skal du sørge for, at du laver et regex match på dit event. Det gør, at vi kan benytte os af den samme trigger på tværs af vores nye events.

F.eks. har jeg dette for mit virtual pageview tag:

Jeg eksekverer mit tag på virtualpageview, men ikke når mit event matcher mit regex. Du kunne også bare have ”does not equal virtualpageview”. Begge dele ville virke. Det gør jeg fordi, at jeg er afhængig af vores nye events til at sikre, at jeg sender data til de rigtige ID’er via mit custom JS. Hvis den aktiverede på virtualpageview, så ville den ikke sende data.

Øvrige Events til Enhanced Ecommerce

Hele denne tankegang gør, at du får simplificeret til GA4 setup, så du ikke har en million forskellige tags til de enkelte lande, og du pludselig glemmer sporing på ét land el.lign.

Hvis du ønsker at overføre denne opsætning til at virke med Universal Analytics’ Enhanced Ecommerce, så kan du også det via ét tag. Dog laver jeg to tags her. Ét der styrer alle hændelser udover købet, og ét der styrer købet. Det gør jeg fordi, at du skal sende event parameters ind enkeltvis på købet. F.eks. value, currency, affiliation m.v. er enkelte parametre.

Hvis du ønsker at bruge ét tag til alt ecommerce, kan du også gøre det.

Her har jeg brugt samme setup som før:

Det kræver dog lidt remapping af informationen, hvis du gør brug af Universal Analytics dataLayer opsætningen, da den ikke kan overføres direkte til GA4. Det gør jeg via en lookup table på mit event:

Lookup table – GA4 Events

Items parameter

Baseret på dette output kan jeg således sende den relevante datalagsstruktur for det enkelte event:

Afslutning

Som helhed er jeg blevet stor fan af RegEx Tables i Google Tag Manager. Måden hvorpå, at det kan spille sammen, og de muligheder, det giver os, er fantastiske.

Hvis du nåede helt til bunden af indlægget, vil jeg meget gerne høre mere om dit set-up, og hvordan I tilgår opgaven med flere GA4 setups.

Har du brug for hjælp til transition til GA4?

Du er altid velkommen til at ringe til os og få en uforpligtende snak om dit nuværende setup.