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:

  1. Send the content_group parameter with events (via GTM or gtag.js)

  2. 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)

  1. Select Regex Table as the variable type

  2. Input Variable: {{Page Path}} (or {{Page URL}} if you need the full URL)

  3. Set up patterns:

Pattern (Regex)

Output

^/blog/.*

Blog Posts

^/products/.*

Product Pages

^/help/.*

Help Documentation

^/about/.*

Company Info

  1. Set Default Value: "Uncategorized" (critical—this ensures all pages have a value)

  2. Name the variable: CG - Content Group

Option B: Lookup Table Variable (For exact path matching)

  1. Select Lookup Table

  2. Input Variable: {{Page Path}}

  3. Map exact paths to groups:

Input

Output

/

Homepage

/pricing

Product Pages

/blog

Blog Posts

  1. Set Default Value: "Uncategorized"

Option C: Data Layer Variable (If developers push content groups)

  1. Select Data Layer Variable

  2. Data Layer Variable Name: content_group

  3. 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)

  1. 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"

  2. 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)

  1. Open your Google Tag (GA4 Configuration)

  2. Expand Configuration Settings

  3. Under Event Parameters, click Add Row

  4. Parameter Name: content_group

  5. Value: {{CG - Content Group}}

  6. 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)

  1. Click Create custom dimension

  2. Dimension name: Content group

  3. Scope: Event

  4. Description: "Categorizes pages and screens by content type"

  5. Event parameter: content_group (must match exactly what you're sending from GTM)

  6. 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

  1. Publish your GTM changes (or use Preview mode first)

  2. Open GA4 DebugView (Admin > DebugView)

  3. Visit your website with the GA Analytics Debugger extension enabled

  4. Click on a page_view event in DebugView

  5. 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:

  1. Go to Reports > Engagement > Pages and screens

  2. Change the dimension to Content group

  3. 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:

  1. Go to Explore in GA4

  2. Create a Free form exploration

  3. Add Content group as a dimension

  4. Add metrics like Sessions, Conversions, Engagement rate

  5. 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

Previous
Previous

Site Search Tracking in GA4: Setup & Debug

Next
Next

Non-Snake Case Events in GA4: Diagnosis and Solution