Content Grouping in GA4: Diagnosis and Solution
The Case File
Your GA4 property is collecting pageviews. Your reports show page paths, screen classes, and page titles. But when you try to analyze content performance by category—blog posts versus product pages, help documentation versus marketing landing pages—you're stuck manually filtering through hundreds of individual URLs.
The issue: Missing or incomplete content grouping data in Google Analytics 4.
This check measures whether your GA4 implementation includes the content_group parameter, which allows you to categorize pages and screens into meaningful buckets. When this data is absent, you see either blank Content Group dimensions in reports, "(not set)" values dominating your analytics, or—most commonly—no Content Group dimension available at all.
Without content grouping, you're analyzing raw page lists instead of strategic content patterns. You're missing the forest for the trees.
The Root Causes (Why This Happens)
Content grouping doesn't happen automatically in GA4. Unlike some default dimensions (page path, page title), the content_group parameter requires deliberate implementation. Here's why it goes missing:
1. No Implementation Exists
The most common culprit: Content grouping was never set up in the first place.
GA4 doesn't automatically categorize your content. Unlike Universal Analytics, which had built-in Content Grouping configuration in the Admin interface, GA4 requires you to send the content_group parameter with your events—typically page_view and screen_view.
Many organizations migrate from Universal Analytics to GA4 and assume content grouping transfers automatically. It doesn't. If you had Content Groupings in UA but didn't explicitly recreate them in GA4, your new property has no content categorization.
2. GTM Misconfiguration: Missing Event Parameter
The technical breakdown: You're using Google Tag Manager, but the content_group parameter isn't attached to your GA4 Configuration tag or event tags.
In GTM, content grouping requires:
A variable that determines the content group value (usually a Regex Table, Lookup Table, or Custom JavaScript variable)
That variable added as a parameter named exactly content_group to your GA4 tags
Common mistakes:
The variable exists but isn't added to the GA4 tag's Fields to Set or Event Parameters
The parameter is misspelled (e.g., content-group, contentGroup, or content_groups instead of content_group)
The parameter is only added to the Configuration tag but not to custom event tags, causing inconsistent data
The variable returns undefined or empty values for certain pages
3. Event Settings Variable Not Applied Globally
The modern GTM approach: GA4 introduced Event Settings variables (Google tag: Event settings) to share parameters across all GA4 tags.
If you're using this method, the content_group parameter should be defined once in an Event Settings variable, then referenced in your Google Tag (gtag configuration). However, issues arise when:
The Event Settings variable isn't attached to the Google Tag itself
You have standalone GA4 Event tags that don't inherit the Event Settings variable
The Event Settings variable is configured but the underlying content group variable returns no value
4. Custom Dimension Not Registered
Critical GA4 requirement: Even if you're sending the content_group parameter correctly, it won't appear in reports unless you register it as a custom dimension in the GA4 Admin interface.
This is a two-step process many implementers forget:
Send the content_group parameter with events (via GTM or gtag.js)
Register content_group as an event-scoped custom dimension in Admin > Custom definitions
If step 2 is skipped, the parameter is collected but invisible in reports. You can see it in DebugView, but it won't populate the Content Group dimension in Pages and screens reports or explorations.
Timing issue: If you registered the custom dimension after data collection began, historical data before registration will show "(not set)". Custom dimensions are not retroactive.
5. Incomplete Coverage
Partial implementation: Content grouping is configured for some pages but not others.
This occurs when:
The Regex Table variable only matches certain URL patterns (e.g., /blog/* and /products/*) but has no default fallback value
Content groups are hardcoded in the dataLayer on template pages but missing on custom landing pages
Third-party tools or iframes generate pageviews without content group context
The result: Some sessions have content group data, others show "(not set)", fragmenting your analysis.
6. Platform-Specific Quirks
GA4 thresholding: If your property has low traffic and Google applies data thresholding, content group values might be hidden to protect user privacy. This is rare for the Content Group dimension but possible if combined with other low-cardinality dimensions.
App + Web confusion: If you're tracking both website and mobile app in the same GA4 property, ensure content grouping logic works for both page_view (web) and screen_view (app) events. Different event structures can cause gaps.
The "So What?" (Business Impact)
Missing content grouping data creates tangible business problems:
1. Inefficient Content Strategy
Without content groups, you can't answer fundamental questions:
Which content category drives the most conversions—blog posts, product pages, or help documentation?
Are users engaging more with video landing pages or text-based articles?
Which section of your site has the highest bounce rate?
You're forced to manually export page-level data to spreadsheets and categorize hundreds of URLs yourself—a process that takes hours and is error-prone.
2. Broken Navigation Analysis
Content grouping powers navigation flow analysis. You need it to understand:
How users move between content categories (Blog → Product → Checkout)
Which content sections serve as effective entry points
Where users exit your site by content type
Without it, you're limited to individual page path analysis, which doesn't reveal strategic patterns.
3. Wasted Editorial Resources
Content teams invest significant resources in creating blog posts, guides, videos, and interactive tools. Without content grouping:
You can't measure ROI by content type
Editorial decisions are based on gut feeling rather than data
High-performing content categories get the same resources as underperforming ones
4. Incomplete Attribution
If you're running multi-touch attribution models or analyzing user journeys, missing content groups means you can't attribute conversions to content categories. You lose visibility into which types of content assist conversions versus which directly drive them.
5. Reporting Overhead
Every stakeholder report requires manual aggregation. Marketing wants "blog performance," product wants "feature page metrics," support wants "help documentation engagement." Without content groups, each request becomes a custom data export and manual categorization task.
Bottom line: Missing content grouping data doesn't break your tracking entirely, but it severely limits your ability to make strategic, data-driven decisions about content investment and optimization.
The Investigation (How to Debug)
Before implementing a fix, confirm the issue and identify the root cause. Here's how to manually verify content grouping status without Watson:
Step 1: Check GA4 Reports
Navigate to Reports > Engagement > Pages and screens.
Look at the dimension dropdown above the data table. Can you select Content group as a dimension?
If "Content group" isn't in the list: The custom dimension hasn't been registered in GA4 Admin (Root Cause #4).
If "Content group" is available but shows 100% "(not set)": The parameter is registered but not being sent with events (Root Causes #1-3, #5-6).
If "Content group" shows some values and some "(not set)": Partial implementation (Root Cause #6).
Step 2: Use DebugView
Enable DebugView in GA4 (Admin > DebugView) and visit your website with the Google Analytics Debugger extension enabled (or append ?debug_mode=true to URLs if using gtag.js).
Watch for page_view events in DebugView. Click on a page_view event and examine the Event parameters section.
Look for: A parameter named exactly content_group with a value (e.g., "Blog Posts", "Product Pages").
If content_group parameter is missing: Implementation issue in GTM or gtag.js (Root Causes #2-3).
If content_group shows undefined or blank: Variable logic error (Root Cause #2).
If content_group appears correctly in DebugView but not in reports: Custom dimension not registered (Root Cause #4) or timing issue (historical data before registration).
The Solution (How to Fix)
Here's the complete implementation guide for content grouping in GA4 using Google Tag Manager. This is the most common and flexible approach.
Step 1: Create a Content Group Variable in GTM
Navigate to: GTM > Variables > New User-Defined Variable
Variable Type: Choose based on your site structure:
Option A: Regex Table Variable (Recommended for URL-based grouping)
Select Regex Table as the variable type
Input Variable: {{Page Path}} (or {{Page URL}} if you need the full URL)
Set up patterns:
Pattern (Regex)
Output
^/blog/.*
Blog Posts
^/products/.*
Product Pages
^/help/.*
Help Documentation
^/about/.*
Company Info
Set Default Value: "Uncategorized" (critical—this ensures all pages have a value)
Name the variable: CG - Content Group
Option B: Lookup Table Variable (For exact path matching)
Select Lookup Table
Input Variable: {{Page Path}}
Map exact paths to groups:
Input
Output
/
Homepage
/pricing
Product Pages
/blog
Blog Posts
Set Default Value: "Uncategorized"
Option C: Data Layer Variable (If developers push content groups)
Select Data Layer Variable
Data Layer Variable Name: content_group
Default Value: "Uncategorized"
Step 2: Add the Parameter to Your GA4 Tags
You have two implementation approaches:
Approach A: Use Event Settings Variable (Recommended for GA4)
Create an Event Settings Variable:
Go to Variables > New
Select Google tag: Event settings
Click Add Parameter
Parameter Name: content_group (must be exact)
Value: {{CG - Content Group}} (your variable from Step 1)
Save and name it "GA4 - Event Settings"
Attach to Google Tag:
Go to Tags and open your Google Tag (GA4 Configuration)
Scroll to Configuration Settings
In the Event Settings Variable field, select {{GA4 - Event Settings}}
Save
This approach automatically adds content_group to all GA4 events (page_view, custom events, etc.).
Approach B: Add Directly to Configuration Tag (Legacy method)
Open your Google Tag (GA4 Configuration)
Expand Configuration Settings
Under Event Parameters, click Add Row
Parameter Name: content_group
Value: {{CG - Content Group}}
Save
Important: If you have standalone GA4 Event tags (not using the Google Tag), you must add the content_group parameter to each one individually, or they won't include content group data.
Step 3: Register the Custom Dimension in GA4
Navigate to: GA4 > Admin > Custom definitions (under Property column)
Click Create custom dimension
Dimension name: Content group
Scope: Event
Description: "Categorizes pages and screens by content type"
Event parameter: content_group (must match exactly what you're sending from GTM)
Click Save
Important timing note: This dimension will only populate for data collected after registration. Historical data before this point will show "(not set)".
Step 4: Test Your Implementation
Publish your GTM changes (or use Preview mode first)
Open GA4 DebugView (Admin > DebugView)
Visit your website with the GA Analytics Debugger extension enabled
Click on a page_view event in DebugView
Verify: The content_group parameter appears with the correct value for each page type
Test multiple page types (blog, product, homepage, etc.) to ensure your variable logic works correctly.
Step 5: Wait and Verify in Reports
Custom dimensions take 24-48 hours to populate in standard reports.
After waiting:
Go to Reports > Engagement > Pages and screens
Change the dimension to Content group
Verify you see your content categories with session and user metrics
If you still see "(not set)":
Double-check the parameter name is exactly content_group (no typos)
Verify the custom dimension scope is "Event" not "User"
Confirm your GTM variable isn't returning undefined or blank values
Check that your Google Tag is firing on all pages (GTM Preview mode)
Step 6: Create Explorations for Deeper Analysis
Once content grouping is working:
Go to Explore in GA4
Create a Free form exploration
Add Content group as a dimension
Add metrics like Sessions, Conversions, Engagement rate
Analyze content performance by category
You can also use content groups in:
Path exploration (to see navigation between content types)
Funnel exploration (to analyze conversion paths by content category)
Segment overlap (to compare user behavior across content types)
Case Closed
Finding missing content grouping data manually requires checking multiple interfaces—GTM variables, tag configurations, GA4 Admin settings, DebugView, and reports. You need to understand the relationship between event parameters and custom dimensions, verify variable logic, and wait days to confirm implementation in reports.
The Watson Analytics Detective dashboard spots this Info-level check instantly, alongside 60+ other data quality issues. Instead of spending hours investigating whether content grouping is configured, you get immediate visibility into:
Whether the content_group parameter is being collected
What percentage of sessions include content group data
Whether you're stuck analyzing messy page lists instead of strategic content patterns
Watson acts as your automated GA4 audit, surfacing invisible configuration gaps before they impact business decisions.
Discover what your data is hiding: Explore Watson Analytics Detective