šŸ”µBest PracticeImpact: Cannot analyze keyword performance or optimize search campaigns
⭐Category: Best Practices

What This Rule Detects

Identifies paid search campaigns (CPC, PPC, paid search) that lack the utm_term parameter for keyword tracking. Without utm_term, you cannot analyze which specific keywords or search terms drive conversions vs which waste budget, preventing bid optimization and keyword-level ROI analysis. Note: Google Ads auto-tagging (gclid) includes keyword data automatically, making utm_term optional for Google Ads but essential for manual UTM tagging or platforms without auto-tagging.

šŸ” Want to scan for this issue automatically?

UTMGuard checks for this and 39 other validation rules in 60 seconds.

Try Free Audit

Why It Matters

Business Impact:

  • Keyword optimization impossible - Cannot identify high-ROI vs low-ROI keywords
  • Budget waste risk - May bid $10/click on keywords that never convert
  • Bid management fails - Cannot adjust bids based on keyword performance
  • Negative keyword discovery blocked - Don't know which terms to exclude
  • Search query analysis missing - Cannot refine targeting based on actual searches

Technical Impact:

  • GA4 can track the campaign but not individual keyword performance
  • All search traffic aggregated regardless of search term
  • Cannot segment by keyword to analyze conversion paths
  • Cannot create keyword-specific audiences for remarketing
  • Match type optimization impossible (cannot compare broad vs exact match)

Real Example:

  • Company runs paid search campaign on Microsoft Ads
  • Campaign: "Running Shoes" with 50 keywords
  • Budget: $5,000/month across all keywords
  • ALL keywords use: utm_campaign=running-shoes-q1 (NO utm_term)
  • GA4 shows: 1,200 clicks, 60 conversions (5% conversion rate overall)
  • CANNOT answer: Which keywords drive conversions?
  • Reality:
    • "nike running shoes" → $3/click, 12% conversion rate (highly profitable)
    • "cheap running shoes" → $8/click, 0.5% conversion rate (losing money)
    • Hidden in aggregate data
  • Impact: Equal bids on all keywords instead of optimizing
  • Lost opportunity: Could 3x conversions by reallocating budget to high-performers

Common Scenarios

Scenario 1: Microsoft Ads Without Keyword Tracking

Paid search campaigns missing term-level data:

āŒ?utm_source=bing&utm_medium=cpc&utm_campaign=running-shoes
āœ…?utm_source=bing&utm_medium=cpc&utm_campaign=running-shoes&utm_term=nike-running-shoes

Scenario 2: Manual UTM Tagging Without Keywords

Using manual UTMs instead of auto-tagging:

āŒ?utm_source=google&utm_medium=cpc&utm_campaign=product-launch
āœ…?utm_source=google&utm_medium=cpc&utm_campaign=product-launch&utm_term=project-management-software

Scenario 3: DuckDuckGo Ads Without Search Term Data

Alternative search platforms without auto-tagging:

āŒ?utm_source=duckduckgo&utm_medium=cpc&utm_campaign=privacy-software
āœ…?utm_source=duckduckgo&utm_medium=cpc&utm_campaign=privacy-software&utm_term=secure-messaging-app

😰 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

Get Your Free Audit Report

How to Fix

Step 1: Understand Google Ads Auto-Tagging vs Manual UTMs

IMPORTANT: Google Ads Auto-Tagging (gclid) Already Includes Keyword Data

Google Ads Auto-Tagging (Recommended):
ā”œā”€ā”€ URL format: ?gclid=abc123xyz (auto-appended by Google)
ā”œā”€ā”€ Keyword data: Included automatically in gclid
ā”œā”€ā”€ Benefits:
│   ā”œā”€ā”€ No manual work required
│   ā”œā”€ā”€ Keyword data flows automatically to GA4
│   ā”œā”€ā”€ More accurate (no human error)
│   ā”œā”€ā”€ Includes match type, ad group, placement data
│   └── Native Google Ads → GA4 integration
ā”œā”€ā”€ utm_term: NOT NEEDED (redundant)
└── When to use: ALL Google Ads campaigns (default)

Manual UTM Tagging:
ā”œā”€ā”€ URL format: ?utm_source=google&utm_medium=cpc&utm_campaign=...&utm_term=`{keyword}`
ā”œā”€ā”€ Keyword data: Must manually add utm_term
ā”œā”€ā”€ When required:
│   ā”œā”€ā”€ Google Ads with auto-tagging disabled
│   ā”œā”€ā”€ Microsoft Ads (no native GA4 integration)
│   ā”œā”€ā”€ DuckDuckGo Ads
│   ā”œā”€ā”€ Baidu Ads (China)
│   ā”œā”€ā”€ Yandex Ads (Russia)
│   └── Any search platform without auto-tagging
└── utm_term: REQUIRED for keyword tracking

Decision Tree: Do I need utm_term?

Are you using Google Ads?
ā”œā”€ YES → Is auto-tagging enabled (gclid)?
│   ā”œā”€ YES → utm_term NOT NEEDED (gclid includes keyword data)
│   └─ NO → Add utm_term=`{keyword}` to track keywords
└─ NO → Using other search platform?
    ā”œā”€ Microsoft Ads → ADD utm_term=`{keyword}`
    ā”œā”€ DuckDuckGo → ADD utm_term=`{keyword}`
    ā”œā”€ Yandex → ADD utm_term=`{keyword}`
    └─ Other → ADD utm_term=`{keyword}`

Step 2: Check Google Ads Auto-Tagging Status

Verify if auto-tagging is enabled:

Google Ads:

1. Google Ads account → Settings
2. Account settings → Auto-tagging
3. Check status: "Tag the URL that people click through from my ad"
4. If enabled: āœ… You're good! No utm_term needed
5. If disabled: āŒ Either enable auto-tagging OR add manual UTMs with utm_term

Recommendation:

  • āœ… ENABLE auto-tagging for Google Ads (best practice)
  • āœ… Let gclid handle all tracking automatically
  • āŒ Avoid manual UTMs for Google Ads (more work, less accurate)
  • āš ļø Never mix gclid with manual UTMs (creates duplicate sessions)

Step 3: Add utm_term for Non-Google Search Platforms

Microsoft Ads (Bing):

Option A: Dynamic Keyword Insertion (Recommended)

1. Microsoft Ads → Campaign → Ad Group
2. Ad → Edit destination URL
3. Add parameter: `{QueryString}`
4. Full URL structure:
   https://example.com/landing
   ?utm_source=bing
   &utm_medium=cpc
   &utm_campaign=summer-sale
   &utm_term=`{QueryString}`

Result: Microsoft automatically inserts actual search query
Example: User searches "nike shoes" → utm_term=nike+shoes

Option B: Manual Keyword Insertion

1. Create unique URL per keyword (tedious, not recommended)
2. Keyword: "running shoes"
   URL: ?utm_term=running-shoes
3. Keyword: "nike running shoes"
   URL: ?utm_term=nike-running-shoes
4. Problem: Must maintain URLs for every keyword
5. Use Option A (dynamic) instead

DuckDuckGo Ads:

1. Campaign setup → Ad URLs
2. Add parameters:
   utm_source=duckduckgo
   utm_medium=cpc
   utm_campaign=`{campaign-name}`
   utm_term=`{keyword:default}`
3. Dynamic insertion: `{keyword:default}`
4. Result: Actual search term captured in utm_term

Yandex.Direct (Russia):

1. Campaign → Ad settings
2. URL template field
3. Add: utm_term=`{keyword}`
4. Yandex macros available:
   - `{keyword}` → Keyword that triggered ad
   - `{source_type}` → Match type
5. Full URL: ?utm_source=yandex&utm_medium=cpc&utm_campaign=...&utm_term=`{keyword}`

Baidu Ads (China):

1. Campaign setup → Tracking template
2. Add parameter: utm_term=`{keyword}`
3. Format: Use pinyin or English transliteration for reporting
4. Full URL: ?utm_source=baidu&utm_medium=cpc&utm_campaign=...&utm_term=`{keyword}`

Step 4: utm_term Naming Best Practices

Format recommendations:

Lowercase + Hyphens:

āœ… utm_term=running-shoes
āœ… utm_term=nike-air-max-2024
āœ… utm_term=project-management-software
āŒ utm_term=Running+Shoes (spaces as +)
āŒ utm_term=Running%20Shoes (URL encoded spaces)
āŒ utm_term=RUNNING-SHOES (uppercase)

Match Type Indication (Optional):

Include match type for advanced analysis:
- utm_term=running-shoes-exact
- utm_term=running-shoes-phrase
- utm_term=running-shoes-broad

Enables comparison:
"Do exact match keywords convert better than broad match?"

Standardization Rules:

1. Always lowercase
2. Replace spaces with hyphens
3. Remove special characters (', ", !, ?)
4. Keep consistent formatting across all keywords
5. Avoid URL encoding (%20) - use hyphens instead

Step 5: Analyze Keyword Performance in GA4

GA4 Reports for Keyword Analysis:

Traffic Acquisition Report:

1. Reports → Acquisition → Traffic acquisition
2. Filter: utm_medium = cpc
3. Add dimension: "Manual term / keyword" (utm_term)
4. Metrics to analyze:
   ā”œā”€ā”€ Sessions per keyword
   ā”œā”€ā”€ Conversions per keyword
   ā”œā”€ā”€ Conversion rate by keyword
   ā”œā”€ā”€ Revenue per keyword
   └── Engagement rate by keyword
5. Identify winners and losers

Custom Exploration:

1. Explore → Create free-form exploration
2. Dimensions:
   - Session source (utm_source)
   - Session medium (utm_medium)
   - Session campaign (utm_campaign)
   - Manual term / keyword (utm_term)
3. Metrics:
   - Conversions
   - Conversion value
   - Sessions
   - Engagement rate
4. Analysis:
   - Sort by conversion rate
   - Identify keywords with >10% conversion rate (winners)
   - Identify keywords with <1% conversion rate (cut)

Optimization Actions:

High-Converting Keywords (>8% conversion rate):
ā”œā”€ā”€ Increase bids by 20-50%
ā”œā”€ā”€ Expand to similar keywords
ā”œā”€ā”€ Move to exact match for cost control
└── Increase budget allocation

Medium-Converting Keywords (3-7% conversion rate):
ā”œā”€ā”€ Maintain current bids
ā”œā”€ā”€ Test ad copy variations
ā”œā”€ā”€ Monitor for optimization opportunities
└── Consider bid adjustments by device/time

Low-Converting Keywords (<2% conversion rate):
ā”œā”€ā”€ Decrease bids by 50%
ā”œā”€ā”€ Add as negative keywords if 0% conversion
ā”œā”€ā”€ Pause if cost per conversion too high
└── Reallocate budget to top performers

No-Conversion Keywords (0% after 100+ clicks):
ā”œā”€ā”€ Pause immediately
ā”œā”€ā”€ Add to negative keyword list
└── Reallocate budget to proven keywords

Examples

āŒ Incorrect Examples

Microsoft Ads without keyword tracking:
?utm_source=bing&utm_medium=cpc&utm_campaign=running-shoes
Problem: 20 keywords in campaign, no way to tell which perform
Impact: Bidding $5/click on all keywords equally
Reality: "nike running shoes" converts at 15%, "cheap shoes" at 0.5%
Cannot optimize: All keywords look identical in GA4
Result: Wasting budget on low-performers, under-investing in winners

Manual Google Ads UTMs without term:
?utm_source=google&utm_medium=cpc&utm_campaign=software-sale
Problem: Disabled auto-tagging, using manual UTMs without utm_term
Impact: Lost keyword-level data, cannot measure keyword ROI
Alternative: Enable auto-tagging (gclid) to get keyword data automatically
Result: Manual tracking but missing the most important dimension (keywords)

DuckDuckGo Ads aggregated:
?utm_source=duckduckgo&utm_medium=cpc&utm_campaign=privacy-tools
Problem: All keywords aggregated, no search term visibility
Impact: 15 keywords, cannot identify which searches convert
Cannot answer: Do users searching "vpn" convert better than "secure browser"?
Result: Missing keyword optimization insights

Mixed broad and exact match without distinction:
?utm_term=running-shoes (used for both broad AND exact match)
Problem: Cannot compare match type performance
Impact: Don't know if broad match wasting budget vs exact match
Cannot optimize: Should I use broad match or exact match keywords?
Result: Match type strategy guesswork instead of data-driven

āœ… Correct Examples

Microsoft Ads with keyword tracking:
?utm_source=bing&utm_medium=cpc&utm_campaign=running-shoes&utm_term=nike-air-max-2024
Result: Each keyword tracked separately
GA4 Shows:
ā”œā”€ā”€ nike-air-max-2024:     $3 CPC, 15% conversion, $20 CPA (WINNER)
ā”œā”€ā”€ running-shoes-cheap:   $8 CPC, 0.5% conversion, $1600 CPA (LOSER)
ā”œā”€ā”€ best-running-shoes:    $5 CPC, 8% conversion, $62 CPA (GOOD)
└── marathon-shoes:        $4 CPC, 12% conversion, $33 CPA (WINNER)
Decision: Increase bids 50% on "nike-air-max" and "marathon-shoes"
Action: Pause "running-shoes-cheap" (losing money)
Impact: 3x more conversions with same budget

Google Ads with auto-tagging (recommended):
?gclid=abc123xyz
Result: Keyword data included automatically via gclid
GA4 Shows: Full keyword performance via Google Ads integration
Benefits:
- Zero manual work
- Includes match type automatically
- Ad group and placement data included
- More accurate than manual tracking
No utm_term needed: gclid handles everything

DuckDuckGo Ads with term tracking:
?utm_source=duckduckgo&utm_medium=cpc&utm_campaign=privacy-tools&utm_term=secure-messaging-app
Result: Search term performance visible
GA4 Shows:
ā”œā”€ā”€ secure-messaging-app:  8% conversion rate (top performer)
ā”œā”€ā”€ encrypted-chat:        5% conversion rate (moderate)
ā”œā”€ā”€ privacy-messenger:     2% conversion rate (low)
└── anonymous-texting:     0% conversion (pause)
Decision: Focus 60% of budget on "secure-messaging-app"
Impact: 2.5x increase in conversion rate through keyword optimization

Match type comparison with utm_term:
Campaign URLs:
- Exact: utm_term=running-shoes-exact
- Phrase: utm_term=running-shoes-phrase
- Broad: utm_term=running-shoes-broad
Result: Can compare match type effectiveness
GA4 Shows:
ā”œā”€ā”€ running-shoes-exact:   $4 CPC, 12% conversion, $33 CPA (BEST)
ā”œā”€ā”€ running-shoes-phrase:  $5 CPC, 8% conversion, $62 CPA (GOOD)
└── running-shoes-broad:   $7 CPC, 3% conversion, $233 CPA (POOR)
Decision: Focus on exact match, reduce broad match budget
Impact: 45% reduction in CPA by shifting to exact match

GA4 Impact Analysis

Keyword Performance Visibility:

  • Without utm_term → All keywords aggregated (cannot compare)
  • With utm_term → Individual keyword metrics and ROI
  • Impact: Blind bidding vs data-driven optimization

Bid Optimization:

  • Without utm_term → Equal bids across all keywords
  • With utm_term → Optimized bids based on keyword performance
  • Impact: Wasted budget vs maximized ROI

Negative Keyword Discovery:

  • Without utm_term → Cannot identify non-converting keywords
  • With utm_term → Clear list of keywords to exclude
  • Impact: Continued waste vs cleaned-up campaigns

Match Type Analysis:

  • Without utm_term → Cannot compare broad vs exact match performance
  • With utm_term → Data-driven match type strategy
  • Impact: Guesswork vs optimized match type selection

Detection in UTMGuard

UTMGuard identifies paid search campaigns missing utm_term:

  1. Scans all traffic for paid search (utm_medium=cpc, ppc, paid-search)
  2. Identifies search platform campaigns
  3. Checks if utm_term parameter exists OR gclid present (Google Ads)
  4. Flags paid search without keyword tracking (excluding Google Ads with gclid)
  5. Recommends adding utm_term for keyword-level optimization

Audit Report Shows:

  • Total paid search sessions without keyword data
  • Affected platforms (Microsoft Ads, DuckDuckGo, etc.)
  • Note: Google Ads with gclid NOT flagged (keyword data included)
  • Implementation guide for dynamic keyword insertion
  • Example utm_term format for each platform

Frequently Asked Questions

Q: Does Google Ads require utm_term?

A: No. Google Ads auto-tagging (gclid) automatically includes keyword data. You do NOT need utm_term if gclid is enabled (recommended). Only add utm_term if you've disabled auto-tagging, but this is not recommended as you'll lose additional data that gclid provides (ad group, placement, etc.).

Q: What's better - Google Ads gclid or manual UTMs with utm_term?

A: gclid auto-tagging is far superior. Benefits: (1) Automatic - no manual work, (2) More data - includes keyword, match type, ad group, placement, (3) More accurate - no human error, (4) Native integration with GA4. Only use manual UTMs if you have specific requirements that prevent auto-tagging.

Q: Can I use utm_term for non-search campaigns?

A: Technically yes, but it's unconventional. utm_term is designed for paid search keywords. For other campaigns, use utm_content instead. Example: Display campaign creative variations → use utm_content, not utm_term. Social media post variations → use utm_content, not utm_term.

Q: How do I track broad vs exact match keywords?

A: Include match type in utm_term value. Example: utm_term=running-shoes-exact vs utm_term=running-shoes-broad. This enables GA4 reports comparing match type performance. Very useful for optimizing match type strategy and bid adjustments.

Q: Should utm_term match the exact search query or target keyword?

A: Use the target keyword you're bidding on, not the actual search query (which may vary). Example: Bidding on "running shoes" (broad match) → User searches "best running shoes for women" → Use utm_term=running-shoes-broad. The search query may vary, but utm_term represents your targeted keyword.

Q: Can I use dynamic keyword insertion for utm_term?

A: Yes, and it's recommended! Most ad platforms support dynamic parameters. Microsoft Ads: {QueryString}, Google Ads (if using manual UTMs): {keyword}, Yandex: {keyword}. Dynamic insertion is more accurate and requires zero maintenance compared to manual keyword URLs.

Q: What if I have 500+ keywords - do I need 500 unique URLs?

A: No! Use dynamic keyword insertion (see above). The ad platform automatically populates utm_term with the triggered keyword. One URL template works for all keywords: utm_term={QueryString} or utm_term={keyword}. Zero maintenance required.

Q: How do I handle misspellings and variations in utm_term?

A: Dynamic insertion captures actual search terms, including misspellings. In GA4 reports, you'll see all variations. For analysis, you can group related terms using GA4's search and replace feature or regex filters. Example: Group "runningshoes", "running shoes", "runing shoes" into "running-shoes" for cleaner reporting.

Q: Does utm_term affect Google Ads Performance Max campaigns?

A: Performance Max campaigns don't use traditional keywords, so utm_term is not applicable. Use auto-tagging (gclid) for Performance Max. Google automatically includes relevant signals without keyword-level detail (by design - Performance Max is automated).

āœ… 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

Run Complete UTM Audit (Free Forever)

Join 2,847 marketers fixing their tracking daily

External Resources


Last Updated: November 9, 2025
Rule ID: missing_term_search
Severity: Info
Category: Best Practices