De beste GA4-inrichting voor meertalige websites
Een website in drie talen roept steeds dezelfde vraag op: één GA4-property per taal, of één voor allemaal? Het antwoord is bijna altijd één property, met de taal als extra dimensie. Aparte properties verdrievoudigen de inrichting en het onderhoud (elk key event, elke doelgroep, elke koppeling met Google Ads en elke aangepaste dimensie drie keer) en maken de meest gestelde vraag, "hoe doet de hele site het?", onbeantwoordbaar zonder rapporten met de hand op te tellen.
Deze gids behandelt de drie manieren waarop meertalige sites gebouwd worden, de GA4-inrichting voor elk ervan, en hoe je een dimensie page_language toevoegt in Google Tag Manager, zodat je nog steeds per taal kunt filteren en vergelijken.
Drie manieren om een meertalige site te bouwen
- Submappen:
example.com/nl/,example.com/fr/. De meest gebruikte variant, en het makkelijkst te meten. - Subdomeinen:
nl.example.com,fr.example.com. - Aparte domeinen:
example.nl,example.fr. Gebruikelijk voor webshops per land, en de variant die extra werk vraagt.
Alle drie komen op hetzelfde uit: één GA4-property, één webdatastream, één Google-tag en een taaldimensie. Het verschil zit in hoe de identiteit van de bezoeker een overstap naar een andere taal overleeft.
Submappen en subdomeinen: één property, verder niets
Met submappen draait alles op één domein, dus één Tag Manager-container die één Google-tag laadt is de hele inrichting. Subdomeinen zijn net zo eenvoudig: GA4 zet zijn cookie op het hoofddomein, dus een bezoeker die van nl.example.com op fr.example.com gaat, houdt hetzelfde client-ID zonder enige configuratie. (Universal Analytics had hiervoor cross-domain-instellingen nodig; GA4 niet.)
Je kunt één container voor alle subdomeinen gebruiken of één per subdomein, zolang elke container hetzelfde Measurement ID laadt. Met één container houd je alles makkelijker consistent. Bij Measurebase dekt één domein elk subdomein, met één snippet en één tagginghost: één domein, veel subdomeinen.
Aparte domeinen: één property plus cross-domain tracking
Cookies zijn aan een domein gebonden, dus een bezoeker die van example.nl op example.fr gaat, zou een nieuwe sessie starten als nieuwe gebruiker, met het eerste domein als referrer. Hetzelfde Measurement ID op beide domeinen is nodig, maar niet genoeg. Voeg beide domeinen toe aan de datastream:
- Ga in GA4 naar Admin › Data collection and modification › Data streams en open je webstream.
- Klik op Configure tag settings, daarna Configure your domains.
- Voeg voor elk domein een voorwaarde toe, matchtype Contains:
example.nl,example.fr, enzovoort. Sla op.
De Google-tag voegt nu een parameter _gl toe aan links tussen die domeinen, die het client-ID meeneemt, en GA4 ziet ze niet langer als verwijzingen naar elkaar. De volledige achtergrond, inclusief redirects en formulieren die de parameter kwijtraken, lees je in cross-domain tracking tussen twee verschillende hoofddomeinen.
Waarom de eigen Language-dimensie van GA4 niet genoeg is
GA4 heeft al een dimensie met de naam Language, en het is verleidelijk om die te gebruiken. Die bevat de taal van de browser van de bezoeker, niet de taal van de pagina die hij leest. Een Nederlandstalige met een Engelse browser die je Nederlandse pagina's leest, telt als Engels, en een expat die je Franse site op een Duitse laptop bekijkt, telt als Duits. Voor "hoe presteren mijn taalversies" heb je de taal van de pagina nodig, en die voeg je zelf toe als page_language.
page_language bouwen in Tag Manager
Kies de meest betrouwbare bron op je site:
- Het lang-attribuut (aanbevolen als je CMS het goed instelt): elke goed gebouwde pagina vermeldt zijn taal in
<html lang="nl">. Maak een variabele van het type Custom JavaScript genaamdPage languagemetfunction () { return (document.documentElement.lang || '').slice(0, 2).toLowerCase() || '(not set)'; }. Dit werkt voor submappen, subdomeinen en domeinen. - Een RegEx Table op de URL, als het lang-attribuut ontbreekt of niet klopt. Gebruik als Input
{{Page Path}}voor submappen (patroon^/nl/geeftnl) of{{Page Hostname}}voor subdomeinen en domeinen (patroon\.nl$geeftnl). Vink Full Matches Only uit en stel een standaardwaarde in: je hoofdtaal voor een site waarvan de standaardtaal op de root staat, of(not set)om pagina's te zien die erdoorheen glippen.
Gebruik taalcodes (nl, fr, en) in plaats van namen. Ze zijn korter, worden nooit per ongeluk vertaald en komen overeen met wat de meeste CMS'en, feeds en advertentieplatforms gebruiken.
Meesturen met elk event en registreren
- Voeg een rij toe aan je Google Tag: Event Settings variabele: parameter
page_language, waarde{{Page language}}. Werk je met content groups, dan is dit dezelfde variabele. - Zorg dat die variabele geselecteerd is onder Shared event settings in de Google-tag en onder Event Settings Variable in elke GA4-eventtag.
- Ga in GA4 naar Admin › Data display › Custom definitions › Create custom dimension: naam
Page language, scope Event, eventparameterpage_language. Schrijf hem precies zoals in Tag Manager.
Registreer de dimensie voordat je de container publiceert: aangepaste dimensies vullen zich pas vanaf het moment dat ze bestaan. Test daarna in Tag Manager Preview en GA4 DebugView op een pagina in elke taal.
Content groups die over talen heen werken
Nu de taal een eigen dimensie heeft, moeten je content groups hem weglaten. Groepeer /nl/blog/, /fr/blog/ en /blog/ allemaal als Blog (een patroon zoals /blog/ zonder anker matcht alle drie), en je kunt de blog over talen heen vergelijken, of elke sectie binnen één taal, met twee dimensies in plaats van een lange lijst gecombineerde groepen. Vertaalde slugs hebben één rij per taal nodig: /blog/|/blogue/.
E-commerce, valuta en Google Ads
- Valuta: stuur de
currencyvan elke shop mee met elk e-commerce-event. GA4 rekent alles om naar de rapportagevaluta van de property, zodat de omzet van alle landenshops correct optelt. - Key events: markeer ze één keer in de gedeelde property. Een aankoop is een aankoop in elke taal.
- Google Ads: één property die één keer gekoppeld is, dekt elke taal. Splits campagnes per taal in Ads, en gebruik
page_languageom in GA4 doelgroepen per taal te bouwen.
Als je GA4 via een servercontainer laat lopen
De inrichting hierboven blijft gelijk: page_language en content_group worden in de browser gezet en komen ongewijzigd via de servercontainer bij GA4 aan. Twee dingen om op elkaar af te stemmen. Met aparte domeinen heeft elk domein een eigen first-party tagging-host nodig, en de cross-domain-instellingen hierboven gelden nog steeds in de datastream. En met één servercontainer achter alle talen kun je page_language gebruiken in server-side triggers, bijvoorbeeld om Nederlandse en Franse aankopen naar verschillende Meta-pixels te sturen. In Measurebase dekt één domein ook zijn subdomeinen; aparte landendomeinen zijn aparte domeinen op hetzelfde account, zie meerdere domeinen beheren op één account.
Veelgestelde vragen
Moet ik ooit een aparte GA4-property per taal gebruiken?
Alleen als de taalversies echt aparte bedrijven zijn: andere eigenaren, teams die elkaars data niet mogen zien, of juridische redenen. Voor één bedrijf met één site in meerdere talen is één property makkelijker te beheren en krijg je totalen zonder extra werk.
Heb ik een aparte datastream per taal nodig?
Nee. Eén webdatastream verwerkt elk domein, elk subdomein en elke submap. Meerdere webstreams in één property versnipperen je configuratie (Enhanced measurement, domeinen, intern verkeer) zonder iets toe te voegen wat je niet al uit page_language haalt.
En een site waar de standaardtaal geen prefix heeft?
Dan moet de standaardwaarde van de RegEx Table die taal zijn, omdat die pagina's op geen enkel patroon matchen. Het lang-attribuut voorkomt dit helemaal, nog een reden om daarvoor te kiezen.
Kan ik zien naar welke taal een bezoeker overschakelde?
Ja. Meet klikken op je taalkiezer als event (bijvoorbeeld language_switch met from en to als parameters), of vergelijk in een exploration de page_language van de landingspagina met die van latere pagina's.
Maakt hreflang uit voor GA4?
Nee. hreflang vertelt zoekmachines welke pagina welke taal bedient; GA4 negeert het. Het is wel een goed teken dat je lang-attributen ook goed staan, en daar leunt de aanbevolen variabele op.