Content groups in GA4 instellen met Google Tag Manager
Een contentgroep is een bak met pagina's die bij elkaar horen: alle productpagina's van één categorie, elke blogpost over één thema, de supportsectie, de checkout. GA4 rapporteert standaard op losse pagina's, prima voor een site met twintig pagina's en nutteloos voor een site met tweeduizend. Met contentgroepen zie je hoe een hele sectie presteert en vergelijk je secties met elkaar: krijgt de herencollectie meer betrokken bezoeken dan de damescollectie, komen lezers van de kennisbank terug, welk deel van de blog levert leads op?
GA4 heeft hier een eigen plek voor: de content_group parameter. Stuur die mee met je paginaweergaven en events, dan vult GA4 zijn eigen Content group dimensie. Deze gids zet het in vier stappen op met Google Tag Manager. Onderdeel van de GA4-handleiding.
Stap 0: bepaal eerst je groepen
Elke site is anders, dus de groepen komen uit je eigen structuur, niet uit een sjabloon. Een paar patronen die werken:
- Webshops: één groep per hoofdcategorie (Heren, Dames, Kinderen, Sale), plus Checkout en Account.
- Blogs en kennisbanken: één groep per thema of onderwerp.
- Leadgeneratiesites: Diensten, Cases, Blog, Over ons, Contact.
Twee regels houden de data bruikbaar. Houd het bij minder dan zo'n tien groepen, zodat een rapport leesbaar blijft. En zorg dat je URL's de groep ook echt verraden: de opzet hieronder leest het paginapad, dus /men/shirts/... is makkelijk te groeperen en /p/18342 niet. Zit er geen structuur in je URL's, gebruik dan een datalayer-waarde uit je CMS (zie de veelgestelde vragen).
Stap 1: een RegEx Table-variabele in Tag Manager
Ga in Tag Manager naar Variables › User-Defined Variables › New, kies RegEx Table (onder Utilities) en noem hem RegEx Table · Content group.
- Input variable:
{{Page Path}}. Het pad is het deel van de URL na het domein, dus dezelfde tabel werkt op elk domein en in elke omgeving. - Voeg per groep een rij toe. Het patroon is een reguliere expressie, de output is de groepsnaam. Bijvoorbeeld patroon
^/men/met outputMen, en^/blog/|^/news/met outputBlog. De verticale streep (pipe) betekent "of". - Zet Default Value op
Other, zodat pagina's die op geen enkele rij matchen toch een groep krijgen in plaats van een lege waarde. - Onder Advanced Settings vink je Full Matches Only uit (een patroon hoeft alleen ergens in het pad voor te komen, niet het hele pad te matchen) en laat Enable Capture Groups and Replace Functionality uit staan.
De tabel wordt van boven naar beneden gelezen en stopt bij de eerste match, dus specifieke rijen horen boven algemene: de tabel moet eerst kijken naar ^/blog/ga4/ voordat ^/blog/ aan de beurt is. Houd patronen simpel en test ze op regex101.com voordat je ze plakt; een typfout in een reguliere expressie faalt zonder melding en zet alles in Other.
Stap 2: stuur content_group mee met elk event
De netste manier om een parameter aan alles te hangen wat GA4 ontvangt, is een gedeelde instellingenvariabele: je definieert hem één keer in plaats van in elke tag.
- Maak een variabele van het type Google Tag: Event Settings, noem hem
GA4 · Event settings, en voeg een rij toe: parametercontent_group, waarde{{RegEx Table · Content group}}. - Open je Google Analytics-tag, die met je
G-measurement ID (of de Google tag in een container die nog niet is omgezet naar Destination-tags). Ga naar Shared event settings, selecteer daar{{GA4 · Event settings}}. Paginaweergaven krijgen de groep nu mee. - Open elke Google Analytics: GA4 Event tag en selecteer dezelfde variabele onder Event Settings Variable. Klikken, formulierinzendingen en aankopen krijgen de groep nu ook mee, zodat je ziet in welke sectie een conversie plaatsvond.
In een oudere container zie je misschien nog een "GA4 Configuration"-tag met een Fields to Set tabel. Dat werkt op dezelfde manier: voeg content_group daar toe, en ook als eventparameter op elke eventtag.
Stap 3: test voordat je publiceert
Open Preview in Tag Manager, klik door pagina's uit verschillende groepen en controleer op elke pagina de waarde van de variabele in het tabblad Variables. Open daarna DebugView in GA4 (Admin › Data display › DebugView), klik op een page_view event en zoek naar content_group tussen de parameters. Controleer ook een pagina die in Other hoort te vallen: belandt die in een echte groep, dan is een patroon te ruim.
Publiceer pas als elke groep binnenkomt zoals bedoeld. Contentgroepen worden niet toegepast op data die al verzameld is, dus een fout die een maand doorloopt, blijft in die maand staan.
Stap 4: waar de data verschijnt
content_group is een parameter die GA4 herkent, dus je hoeft niets te registreren. Hij vult de ingebouwde Content group dimensie, die je terugvindt in:
- Reports › Engagement › Pages and screens: zet de primaire dimensie van "Page path and screen class" op Content group voor weergaven, gebruikers en engagement per sectie.
- Explorations: voeg Content group toe als dimensie en splits key events, omzet of engagement uit per sectie.
- Looker Studio en BigQuery: de dimensie is beschikbaar in de GA4-connector, en in de BigQuery-export is het een eventparameter zoals elke andere.
Omdat de groep ook met events meereist, vertelt een filter als "key events waar Content group Blog is" je hoeveel van je conversievolume in je content begint, niet alleen hoeveel mensen die lezen.
Meer dan één manier van groeperen
GA4 heeft één ingebouwde contentgroep, Universal Analytics had er vijf. Wil je een tweede indeling (bijvoorbeeld "paginatype": product, categorie, artikel, landingspagina naast je categoriegroepen), bouw dan een tweede RegEx Table en stuur die als eigen parameter, zoals page_type in dezelfde Event Settings-variabele mee. Registreer hem daarna als aangepaste dimensie met eventbereik onder Admin › Data display › Custom definitions. Aangepaste dimensies vullen pas vanaf het moment dat je ze registreert, dus eerst registreren, dan publiceren.
Een indeling op taal is een speciaal geval met een eigen artikel: de beste GA4-inrichting voor meertalige websites.
Als je GA4 via een servercontainer laat lopen
Aan de opzet verandert niets. content_group wordt in de browser gezet en reist bij elke hit mee naar je servercontainer, dus het komt ongewijzigd bij GA4 aan. Het is ook beschikbaar voor elke andere tag in de servercontainer: je kunt dezelfde groep als custom parameter naar Meta of Google Ads sturen, of hem gebruiken in een server-side trigger, zonder hem twee keer te bouwen. En omdat hits naar je eigen domein gaan, worden ook bezoekers met een adblocker gegroepeerd, wat de vergelijking tussen secties completer maakt.
Veelgestelde vragen
Heb ik een aangepaste dimensie nodig voor content_group?
Nee. GA4 herkent content_group en vult zelf de ingebouwde Content group-dimensie. Een aangepaste dimensie heb je alleen nodig voor extra indelingen met je eigen parameternamen.
Gelden contentgroepen ook voor mijn historische data?
Nee. Een groep wordt aan events gekoppeld op het moment dat ze verzameld worden. Pagina's die bezocht zijn voordat je de opzet publiceerde, hebben geen contentgroep, en een patroon later aanpassen deelt oudere data niet opnieuw in.
Mijn URL's laten de categorie niet zien. Wat nu?
Lees de groep uit de pagina in plaats van uit de URL. De meeste CMS'en en shopplatforms kunnen de categorie of templatenaam in de datalayer zetten; een Data Layer Variable vervangt dan {{Page Path}} als input, of levert direct de waarde voor content_group aan.
Waarom komt alles in Other terecht?
Meestal door een patroon dat nooit matcht: een ontbrekende slash, een escape-teken dat er niet hoort, of Full Matches Only dat nog aangevinkt staat. Test de patronen op regex101 tegen echte paden uit je Pages-rapport en controleer de variabele in Tag Manager Preview.
Kan ik contentgroepen in GA4 instellen zonder Tag Manager?
Ja. Met gtag.js geef je content_group mee in de config-aanroep of bij elk event. GA4 zelf heeft geen interface om groepen op URL te definiëren; de waarde moet altijd met het event meekomen.