A campaign in marketing analytics is a coordinated set of activities (paid ads, emails, social posts, partner placements, offline QR codes) bundled under one objective, audience, and naming convention. In GA4 and every other analytics tool, the campaign shows up as a self-identifying dimension on session data, populated from the utm_campaign URL parameter. This guide covers what a campaign is, how UTM parameters carry campaign identity, naming conventions that survive across teams, where campaign data lives in GA4 reports, Default Channel Grouping vs manual tagging, attribution model choices, common mistakes, the metrics that matter, cross-channel measurement, and a FAQ.
What is a Campaign in Marketing Analytics
A campaign is the unit of marketing measurement. It groups a set of touchpoints (every ad, email send, social post, and partner link tied to one promotion) under one identifier so you can answer the basic question: which marketing effort drove these results?
In GA4, the campaign value lives on the session_campaign dimension. Every session inherits whatever utm_campaign value tagged the link the visitor clicked. Sessions without a tagged campaign fall back to platform-injected click identifiers (gclid for Google Ads, fbclid for Meta) or, when neither is present, to direct or referral classification.
From auditing GA4 properties, the campaign dimension is the layer that’s most often broken: clicks tracked, conversions tracked, but nobody can connect ad spend to revenue because campaign values are empty, fragmented across casing variants, or polluted by internal-navigation tagging. Clean campaign data is the foundation of every acquisition report that matters.
UTM Campaign Parameters Explained
UTM parameters (short tags appended to a URL after a question mark) are how every analytics tool identifies a campaign. UTM stands for Urchin Tracking Module, named after the analytics product Google acquired in 2005. The convention recognises five keys, three required and two optional:
| Parameter | Required | Holds | Example | GA4 dimension |
|---|---|---|---|---|
utm_source |
Yes | Specific publisher, vendor, or platform | newsletter, facebook, partner_blog |
session_source |
utm_medium |
Yes | Channel category | email, cpc, social |
session_medium |
utm_campaign |
Yes | Marketing initiative name | spring-sale-2026, black-friday |
session_campaign |
utm_content |
No | Creative variant or placement | hero-cta, banner-300 |
session_manual_ad_content |
utm_term |
No | Keyword or audience label (legacy) | retargeting, brand |
session_manual_term |
The required trio answers the three questions every acquisition report needs: who (source), how (medium), why (campaign). Drop any one and GA4 falls back to whatever the Referer header tells it, which is usually wrong for paid, email, and partner traffic. A complete tagged URL looks like:
https://example.com/sale?utm_source=newsletter&utm_medium=email&utm_campaign=spring-sale-2026&utm_content=hero-cta
For a deeper walkthrough of every parameter, the source-attribution hierarchy, and tagging tools, see our pillar guide on UTM parameters.
Naming Conventions for Campaigns
Consistent naming is the biggest factor in usable campaign reports. Once a bad name lands in GA4 it stays forever: no retroactive rename, no merge. I’ve seen properties with thirty rows for one campaign because the team mixed casing and separators across email, ads, and social. A naming convention enforced through a builder tool prevents that fragmentation before it starts.
| Rule | Good | Bad | Why |
|---|---|---|---|
| Lowercase only | spring-sale-2026 |
Spring_Sale_2026 |
GA4 is case-sensitive: mixed case creates duplicates |
| Single separator (hyphens) | black-friday-email |
black friday email |
Spaces break URLs; mixing hyphens and underscores fragments reports |
| Include date or quarter | webinar-q1-2026 |
webinar |
Distinguishes recurring campaigns over time |
| Include channel hint | retargeting-meta-lookalike |
campaign-3 |
Reports become scannable without cross-referencing notes |
| No special characters | newsletter-march |
newsletter/march! |
Special chars break encoding and tracking |
| Avoid PII and session IDs | nurture-trial-day7 |
email-john@example.com |
PII violates GDPR; uniqueness explodes report cardinality |
A taxonomy template formalises the structure across teams. A common pattern: [goal]-[channel]-[audience]-[quarter-year]: for example, lead-gen-linkedin-cmo-q2-2026 or retention-email-churned-q3-2026. Document it in a shared spreadsheet, build links through a tool that enforces lowercase (Google’s Campaign URL Builder or our own UTM Builder), and review GA4 monthly for “(not set)” rows or casing duplicates.
Tracking Campaigns in GA4
GA4 surfaces campaign data in two primary acquisition reports plus the Explore module:
- Traffic acquisition (Reports β Acquisition β Traffic acquisition). Set the primary dimension to Session campaign to see every
utm_campaignvalue with its session count, engaged sessions, engagement rate, conversions, and revenue. This is the day-to-day campaign ROI report. - User acquisition (Reports β Acquisition β User acquisition). Shows the first campaign that brought each user, useful for evaluating which campaigns drive net-new audiences vs returning visits.
- Explore β Free form. Add Session campaign, Session source, and Session medium as dimensions to cross-reference campaign performance by channel, geography, device, or any custom dimension you’ve defined.
Linked Google Ads accounts populate campaign data automatically through gclid. Every non-Google channel (email, Meta ads without auto-tagging, LinkedIn, partner placements) relies entirely on UTMs. If utm_campaign is missing or misspelled, the traffic shows as “(not set)” and breaks all campaign-level analysis. For more on event tracking tied to campaigns, custom conversion events let you attribute specific actions back to the campaign that originated the session.
Default Channel Grouping vs Manual Campaign Tagging
GA4 has two layers of acquisition classification answering different questions:
- Default Channel Group is GA4’s automatic bucket: Email, Paid Search, Organic Social, Direct, Referral. It’s derived from
session_mediumagainst Google’s channel definition rules and answers “what type of channel sent this traffic?” - Manual campaign tagging via UTM parameters answers “which specific effort sent this traffic?” Campaigns live one level below the channel group. The Email channel might contain
welcome-series,spring-sale-2026,winback-q2.
Both layers need clean tagging. Channel Group only works if utm_medium uses standard values verbatim (email, cpc, social, display, affiliate, organic): a custom medium like e-mail-blast lands in “Unassigned”.
Campaign Attribution: First, Last, and Data-Driven
Campaigns rarely drive conversions in a single click. A user might discover your brand through a paid Meta ad, return via organic search a week later, and finally convert through a retargeting email. Three campaigns touched the journey, and attribution models decide which one gets the credit.
| Model | Credit assignment | Best for |
|---|---|---|
| First touch | 100% to the campaign that started the journey | Awareness campaigns, brand discovery, top-funnel ROI |
| Last touch (last non-direct click) | 100% to the campaign that closed the conversion | Bottom-funnel performance, retargeting, direct-response ads |
| Linear | Equal credit across every touchpoint | Simple multi-touch view without algorithmic complexity |
| Position-based (40/20/40) | 40% first, 40% last, 20% spread across middle | Balancing awareness and closing channels |
| Data-driven (DDA) | Algorithmic credit based on conversion-path probabilities | GA4 default; works best with 600+ conversions/month |
GA4 defaults to data-driven attribution. Switch the property-wide model in Admin β Attribution settings, or compare side-by-side in Advertising β Attribution β Model comparison. The model meaningfully changes which campaigns look successful, since top-funnel campaigns always under-perform on last-click and shine on first-touch. For trade-offs, see attribution.
Common Campaign Tracking Mistakes
Most “campaign tracking is broken” tickets trace back to one of these patterns:
- Inconsistent casing.
Summer_Saleandsummer-saleappear as two campaigns. Enforce lowercase in your builder or normalise in GTM via a lookup table. - Missing utm_campaign on paid traffic. Google Ads auto-tags via
gclid, but Meta, LinkedIn, TikTok, and most affiliate networks need manual UTMs. - Tagging internal navigation. A UTM on a homepage button starts a new session and erases the visitor’s original attribution. Tag external links only.
- Too many unique campaign names. A fresh
utm_campaignper ad variation makes reports unusable. Group ads under one campaign name; useutm_contentfor variation. - Double-tagging via redirects. A short link that redirects to an already-tagged URL can overwrite the original UTMs. Tag once, at the final destination.
- PII or session IDs in UTMs. Email addresses or per-user tokens in
utm_contentblow out cardinality and create GDPR risk. - Tagging organic search. Don’t UTM-tag your own SERP listings; GA4 detects organic via Referer; UTMs override that.
Campaign Performance Metrics
Once campaign data flows cleanly, the metrics analysts watch fall into four tiers: efficiency, engagement, conversion, and revenue. The right balance depends on objective.
| Metric | What it measures | Best for evaluating |
|---|---|---|
| CTR (click-through rate) | Clicks Γ· impressions | Ad creative and audience relevance |
| Sessions | Visits initiated by the campaign | Top-of-funnel volume |
| Engaged sessions | Sessions β₯10 sec or with conversion/2+ pageviews | Traffic quality, not just quantity |
| Conversions | Completed events flagged as conversions | Bottom-funnel campaign success |
| Conversion rate | Conversions Γ· sessions | Landing page + offer effectiveness |
| CPC / CPL / CPA | Cost per click / lead / acquisition | Paid campaign efficiency |
| ROAS | Revenue Γ· ad spend | Direct-response and e-commerce campaigns |
| LTV : CAC | Customer lifetime value vs acquisition cost | Long-term campaign profitability |
Awareness campaigns optimise for reach and engaged sessions; demand-gen campaigns for CPL; e-commerce for ROAS. Don’t mix targets within one campaign. A top-funnel push judged on last-click ROAS always looks like it’s failing. Macro-conversions like purchase or qualified lead matter most for paid campaigns.
Cross-Channel Campaign Measurement
Modern campaigns rarely live on one channel. A product launch might run paid social, email nurture, partner placements, and organic SEO in parallel. Cross-channel measurement requires three pieces:
- Consistent
utm_campaignacross channels. Same campaign name on every link:product-launch-q2-2026in Meta, email, partner microsites. Channel-source pairs stay distinct viautm_sourceandutm_mediumwhile the campaign aggregates cleanly. - One attribution model portfolio-wide. Switching per-campaign destroys comparability.
- Reporting that joins paid and organic. GA4 does this when UTMs are clean. For richer views, export to BigQuery, join with Google Ads + Meta Ads Insights + CRM revenue, visualise in Looker Studio.
For mobile + web campaigns, GA4’s app+web property type unifies session_campaign across platforms. iOS attribution caveats apply. SKAdNetwork limits user-level mobile attribution. Server-side via the Measurement Protocol can patch attribution gaps when client-side tracking is blocked.
Best Practices for Campaign Setup
Six habits separate properties with usable campaign data from properties drowning in fragmentation:
- Enforce tagging via tool, not policy. Build links through a UTM builder that lowercases inputs and validates required fields. Policy alone fails at scale.
- Maintain a campaign dictionary. A list of approved campaign names per quarter; new efforts register in advance to kill spelling drift.
- Audit “(not set)” monthly. Filter Session campaign for “(not set)” and trace which channels are leaking untagged traffic.
- Tag every external promo, never internal. Ads, emails, partner posts, podcast show notes, QR codes: UTMs. Internal nav, canonical URLs, own SERP listings: never.
- Build a campaign dashboard. Pull Session campaign Γ engagement rate Γ conversion rate Γ revenue into one Looker Studio view, refreshed daily.
- Cohorted analysis for long-cycle campaigns. B2B campaigns often convert 30-90 days after first touch, so use cohort analysis to track each campaign through its conversion window.
Frequently Asked Questions
What is a campaign in GA4?
In GA4, a campaign is a marketing initiative identified by the utm_campaign value on inbound URLs. Every session inherits the campaign that tagged the clicked link, populating session_campaign. Campaign data appears in Reports β Acquisition β Traffic acquisition and feeds attribution models.
What’s the difference between a campaign and a channel?
A channel is the broad acquisition category (Email, Paid Search, Organic Social, Direct) derived from session_medium. A campaign is a specific effort within a channel: spring-sale-2026 in Email, retargeting-q2 in Paid Social. Channels answer “what type”, campaigns answer “which effort”.
How do I track a campaign without UTM parameters?
You can’t reliably: UTMs are the standard mechanism. Google Ads auto-tags via gclid when accounts are linked, and platforms inject fbclid or msclkid, but for any non-Google paid channel, email, or partner placement manual UTMs are required. Without them traffic falls back to Referer-based detection, which usually misclassifies as Direct or Referral.
Why is my campaign showing as “(not set)” in GA4?
“(not set)” appears when GA4 has session data but no utm_campaign. Common causes: missing UTM tag on paid links, redirects that strip query parameters, or internal-navigation polluting sessions. Trace the affected channel back to its source and fix the tagging there.
Are campaign names case-sensitive in GA4?
Yes. SpringSale, springsale, and SPRINGSALE are three separate rows in GA4. Standardise on lowercase and enforce it through a UTM builder tool: there is no retroactive merge for fragmented campaign names.
How long does GA4 store campaign data?
Aggregated campaign reporting retains data for the property’s lifetime. Event-level data follows the property’s retention setting (2 or 14 months in standard, longer in GA4 360). For permanent storage, export to BigQuery: no retention limit on exported tables.
Can I rename a campaign retroactively in GA4?
No. GA4 has no retroactive rename or merge for campaign values. Once utm_campaign=Spring_Sale enters a session, that string stays in reports forever. The only fix is preventive: enforce naming through a builder tool before links go live and audit monthly for fragmentation.
Related Terms
- UTM: the parameter system that carries campaign identity
- Referral: fallback channel for external clicks without UTMs
- Attribution: how credit is assigned across multi-touch journeys
- Event: the data primitive that campaign-tagged sessions emit
- Conversion: campaign success metric for bottom-funnel
- Macro-conversion: high-value campaign outcome
- Looker Studio: campaign reporting dashboards
- BigQuery: long-term campaign data warehousing
- Measurement Protocol: server-side campaign attribution
- Cohort analysis: long-cycle campaign performance
Bottom Line
A campaign is the unit of marketing measurement: the layer where ad spend, email sends, and partner placements roll up to a single ROI number. GA4 tracks campaigns via the utm_campaign URL parameter, surfaces them in the Traffic Acquisition report, and credits them through your chosen attribution model. Clean campaign data depends on three disciplines: enforce lowercase naming through a UTM builder, tag every external promo and never internal links, and audit “(not set)” rows monthly. Get those right and every acquisition report (channel-level, campaign-level, attribution-model comparison) will tell you the truth about which marketing efforts actually move the business.