What This Rule Detects
Identifies when UTM parameters use system-reserved keywords that GA4 uses internally to represent missing or untagged data. Using values like "null", "undefined", "(not set)", "(none)", "n/a", or "na" as utm_source makes your paid campaigns indistinguishable from actual untagged traffic, causing them to disappear from attribution reports.
š Want to scan for this issue automatically?
UTMGuard checks for this and 39 other validation rules in 60 seconds.
Try Free AuditWhy It Matters
Business Impact:
- Paid campaigns invisible - Advertising spend appears to have zero results
- Budget allocation destroyed - Cannot measure which sources drive revenue
- ROI calculation impossible - Paid traffic looks identical to missing/untagged traffic
- Reporting shows "missing data" - Your tagged campaigns appear as data quality issues
Technical Impact:
- GA4 uses these keywords internally to represent MISSING attribution data
- When you use them as utm_source, GA4 cannot distinguish your PAID traffic from UNTAGGED traffic
- Reports show your campaigns as "(not set)" - looks like tracking failure, not active campaign
- Data exports contain your expensive ad traffic in "unknown source" rows
Real Example:
- Developer uses
utm_source=nullas placeholder, forgets to change it - Launches $15,000 Google Ads campaign
- GA4 reports show:
- Traffic source: "(not set)" or "null"
- Indistinguishable from actual untagged/direct traffic
- Campaign appears to have zero conversions
- Reality: Campaign drove 200 conversions, but data looks like tracking error
- Result: Marketing manager pauses "broken" campaign, wasting $15,000 budget
Common Scenarios
Scenario 1: Development Placeholder Left in Production
Developer uses "null" as temporary value during testing:
Scenario 2: Unknown Source Placeholder
Using "(none)" when actual source is uncertain:
Scenario 3: Not Applicable Shorthand
Using "n/a" when source doesn't seem to fit categories:
š° Is this your only tracking issue?
This is just 1 of 40+ ways UTM tracking breaks. Most marketing teams have 8-12 critical issues they don't know about.
⢠94% of sites have UTM errors
⢠Average: $8,400/month in wasted ad spend
⢠Fix time: 15 minutes with our report
ā Connects directly to GA4 (read-only, secure)
ā Scans 90 days of data in 2 minutes
ā Prioritizes issues by revenue impact
ā Shows exact sessions affected
How to Fix
Step 1: Identify All Reserved Keywords in Your UTM Parameters
Complete list of GA4 system-reserved values (NEVER use these):
ABSOLUTELY FORBIDDEN:
āāā null ā GA4 internal for missing data
āāā undefined ā JavaScript/system null state
āāā (not set) ā GA4 placeholder for missing values
āāā (none) ā GA4 placeholder for absent data
āāā n/a ā Commonly confused with "not applicable"
āāā na ā Abbreviation of "not applicable"
āāā not set ā Variation of "(not set)"
āāā not provided ā GA historical keyword (deprecated)
āāā (direct) ā GA4 reserved for Direct traffic
āāā unknown ā System placeholder (avoid)
Why these are forbidden:
- GA4 uses these INTERNALLY to represent data quality issues
- Your paid campaigns become invisible in reports
- Appear identical to actual untagged/broken tracking
- Cannot be filtered out (mixed with real missing data)
Step 2: Search for Reserved Keywords in Active Campaigns
Manual audit across platforms:
Google Ads:
- Campaigns ā All campaigns
- Click "Columns" ā Modify columns ā Add "Final URL"
- Search for: "null", "undefined", "none", "n/a"
- Review tracking templates for reserved keywords
Facebook Ads:
- Ads Manager ā Campaigns
- Check URL parameters on each campaign
- Search campaign URLs for reserved keywords
Email platforms (Mailchimp, Constant Contact, SendGrid):
- Review email templates
- Check all link tracking parameters
- Verify utm_source not using reserved values
Partner/affiliate links:
- Request current link formats from partners
- Check for placeholder values
- Provide correct utm_source alternatives
Step 3: Replace Reserved Keywords with Descriptive Source Names
Replacement strategy:
If using "null" or "undefined":
ā utm_source=null
ā
utm_source=`{actual_platform_name}`
Examples:
- utm_source=partner-website
- utm_source=email-signature
- utm_source=qr-code-flyer
If using "(none)" or "n/a":
ā utm_source=(none)
ā
utm_source=`{specific_identifier}`
Examples:
- utm_source=offline-event
- utm_source=podcast-mention
- utm_source=print-magazine
If using "unknown":
ā utm_source=unknown
ā
Identify actual source before launching campaign
If truly unknown, use:
- utm_source=organic (for unpaid)
- utm_source=other (last resort, but track separately)
Step 4: Update All Active Campaign Links
Platform-specific update instructions:
Google Ads:
- Go to affected campaigns
- Settings ā Campaign URL options
- Update "Final URL suffix" or "Tracking template"
- Replace:
utm_source=nullāutm_source=google - Save and verify changes
Facebook Ads:
- Edit each affected ad
- Update URL parameters
- Replace:
utm_source=undefinedāutm_source=facebook - Publish changes
Email campaigns:
- Update email templates
- Replace reserved keywords with email platform name
- Example:
utm_source=mailchimp,utm_source=constant-contact - Test send to verify parameters
Partner links:
- Contact partners using reserved keywords
- Provide corrected links with proper utm_source
- Example:
utm_source=partner-name-blog
Step 5: Implement Validation Before Launch
Pre-launch checklist:
Before launching any campaign, verify:
ā utm_source is NOT any reserved keyword
ā utm_source describes actual traffic source
ā utm_source is specific (not "web", "link", "campaign")
ā No parentheses in values: (none), (not set)
ā No programming terms: null, undefined, n/a
ā Test in GA4 Real-Time report to confirm proper attributionUse validation tools:
- Google Campaign URL Builder (validates format)
- UTMGuard audits (detects reserved keywords automatically)
- Create team documentation listing forbidden keywords
Examples
ā Incorrect Examples
Using "null" as utm_source:
?utm_source=null&utm_medium=cpc&utm_campaign=google-ads-summer
Result: GA4 shows as "(not set)" or "null" in reports
Impact: Indistinguishable from actual missing data
Action: Campaign appears broken, gets paused
Using "(none)" as utm_source:
?utm_source=(none)&utm_medium=email&utm_campaign=weekly-digest
Result: Appears as missing source attribution
Impact: Email campaign invisible in source reports
Action: Cannot measure email campaign performance
Using "undefined" as utm_source:
?utm_source=undefined&utm_medium=social&utm_campaign=instagram
Result: Shows as system error in GA4
Impact: Looks like tracking failure, not active campaign
Action: Traffic appears as data quality issue
ā Correct Examples
Specific source instead of "null":
?utm_source=partner-techcrunch&utm_medium=referral&utm_campaign=guest-article-jan
Result: Clearly shows traffic from TechCrunch partnership
Impact: Can measure partner referral performance
Action: Proper attribution, can calculate partnership ROI
Email platform name instead of "(none)":
?utm_source=mailchimp&utm_medium=email&utm_campaign=weekly-newsletter-2024-q1
Result: Shows Mailchimp as source in reports
Impact: Can compare email platform performance
Action: Email campaign tracked correctly
Platform name instead of "undefined":
?utm_source=instagram&utm_medium=social&utm_campaign=product-launch-stories
Result: Instagram identified as traffic source
Impact: Can analyze Instagram story campaign performance
Action: Full attribution with campaign-level ROI visibility
GA4 Impact Analysis
Traffic Source Reports:
- Reserved keywords ā Appears as "(not set)" or system placeholder
- Proper source names ā Appears as distinct traffic source
- Impact: Campaign visibility vs invisibility
Channel Grouping:
- Reserved keywords ā May classify as "Unassigned" or "Direct"
- Proper naming ā Classified correctly based on utm_medium
- Impact: Channel analysis broken vs working
Conversion Attribution:
- Reserved keywords ā Conversions attributed to "(not set)"
- Proper naming ā Conversions attributed to actual campaign
- Impact: ROI invisible vs measurable
Data Quality:
- Reserved keywords ā Appears as data quality issue
- Proper naming ā Appears as valid campaign traffic
- Impact: Looks like broken tracking vs successful campaign
Detection in UTMGuard
UTMGuard automatically detects reserved keywords in UTM parameters:
- Scans all utm_source, utm_medium, utm_campaign values
- Compares against list of GA4 system-reserved keywords
- Flags any usage of forbidden values
- Counts affected sessions
- Reports specific campaigns using reserved keywords with priority ranking
Audit Report Shows:
- Total sessions using reserved keywords
- Which reserved keyword was used
- Affected campaigns and URLs
- Estimated advertising spend with broken attribution
- Priority ranking by traffic volume
Related Validation Rules
Related Validation Rules
Frequently Asked Questions
Q: What if I already launched campaigns with reserved keywords?
A: Update the URLs immediately. Historical data cannot be fixed, but stopping the issue prevents further data corruption. Create a GA4 annotation marking when you fixed it to explain data discontinuity.
Q: Can I use "Other" as a utm_source?
A: Technically yes, but not recommended. "Other" is vague and makes reporting unclear. Use a specific identifier instead. Example: Instead of "other", use "offline-event" or "podcast-mention" or "print-ad".
Q: Will GA4 reject reserved keywords or just misclassify them?
A: GA4 will NOT reject them. It accepts the value but treats it identically to actual missing data, making your campaigns invisible. This is why detection is critical - the tracking "works" but data is unusable.
Q: Are reserved keywords case-sensitive?
A: No. "null", "Null", and "NULL" are all problematic. GA4 treats them as the same reserved value. Avoid all variations.
Q: What about "direct" as a utm_source?
A: Never use it. "(direct)" is GA4's reserved value for traffic with no source attribution (typed URL, bookmarks). Using utm_source=direct contradicts the purpose of UTM tagging.
Q: Can I use "not-applicable" with hyphens instead of "n/a"?
A: Still not recommended. While technically different, it suggests you don't know the source. Every campaign should have a specific, identifiable source. If truly unsure, delay launch until source is determined.
Q: How do I handle QR codes where source is ambiguous?
A: QR codes are the source. Use: utm_source=qr-code-{location} and utm_medium=offline or utm_medium=print. Example: utm_source=qr-code-flyer&utm_medium=print&utm_campaign=local-event-jan.
Q: What if my development team uses "null" in testing environments?
A: Acceptable for dev/staging environments ONLY. Implement validation that blocks deployment to production if reserved keywords detected. Use environment-specific URL builders that enforce proper naming in production.
ā Fixed this issue? Great! Now check the other 39...
You just fixed one tracking issue. But are your Google Ads doubling sessions? Is Facebook attribution broken? Are internal links overwriting campaigns?
⢠Connects to GA4 (read-only, OAuth secured)
⢠Scans 90 days of traffic in 2 minutes
⢠Prioritizes by revenue impact
⢠Free forever for monthly audits
Join 2,847 marketers fixing their tracking daily
External Resources
- GA4: Traffic Source Dimensions
- Google: Campaign URL Builder
- Best Practices for UTM Parameters
- GA4: Default Channel Grouping
reserved_keyword_source