UTM Parameters
Chapter 20 — Using UTM Parameters in Paid Search & PPC
Paid search burns budget fast. Clean UTM tagging keeps every click grouped as paid search, lets you compare engines side-by-side, and protects downstream joins in BI and CRM. This chapter shows the safest patterns for Google Ads, Microsoft Ads, and other engines—without breaking auto-tagging.
The PPC UTM Switchboard: three choices that set your build
Use this quick mental model before you tag:
- Engine: Google Ads, Microsoft Ads, or another engine
- Tagging mode: Auto-tagging on (gclid/msclkid/auto-UTM) or manual template
- Data needs: GA-only or external tools (warehouse, BI, CRM) also need UTMs
Rules of thumb:
1) Always set utm_medium=cpc and keep utm_source equal to the engine in lowercase (google, bing, yandex, baidu, yahoo-jp).
2) If Google Ads auto-tagging is on and GA4 is linked, keep gclid. Add neutral UTMs via Final URL Suffix for non-GA tools.
3) If auto-tagging is off or you use a non-Google analytics stack, apply an account-level tracking template. Pass a clean campaign code via a custom parameter.
Tag PPC with stable source/medium so analytics groups clicks correctly
Use a consistent core set so all engines roll up cleanly:
utm_source: engine name (google, bing, yandex, baidu, yahoo-jp)utm_medium: cpc (stay consistent; avoid ppc/paidsearch here)utm_campaign: campaign identifier or human-readable codeutm_term: keyword or actual query (choose the right token per engine)utm_content: ad/creative variant or match/device markers (optional)
CAC comparison for “Report Download” leads in one view.
With Google Ads auto-tagging on, add neutral UTMs via Final URL Suffix
Keep gclid enabled. GA4 will attribute using gclid when linked. To support third-party tools, add a neutral Final URL Suffix at the account level:
utm_source=google&utm_medium=cpc&utm_campaign=gads_{campaignid}&utm_term={searchterm}&utm_content=ag_{adgroupid}_cr_{creative}
Notes that prevent data loss:
- {campaignid} is stable and ideal for joining to a warehouse. If you need a readable name in the URL, set a custom parameter at campaign level like {_cn}=EMEA_Brand_Q2_2026 and use
utm_campaign={_cn}. - {searchterm} captures the user’s query, including DSA/PMax. {keyword} returns the matched keyword and can be blank in those formats.
- This suffix works with parallel tracking and does not break gclid.
utm_campaign=gads_{campaignid} to join by ID and label performance “PMax – Enterprise – Q2” in their warehouse.
If you disable auto-tagging, use an account-level tracking template
When auto-tagging is off—or you’re reporting to a non-Google stack—standardize UTMs with a tracking template:
Account-level tracking template:
- {lpurl}
?utm_source=google&utm_medium=cpc&utm_campaign={_cn}&utm_term={keyword}&utm_content=ag_{adgroupid}_cr_{creative}
How to set {_cn}:
- At the campaign level, add a custom parameter {_cn} equal to your campaign name or code, for example US_Competitor_Q3_2026.
utm_term, and keep a readable code in utm_campaign.
Microsoft Ads: choose auto-UTM or a manual template, but not both
Option A — Auto-UTM (fast, safe default):
- Settings > Accounts > UTM Tagging > Turn on “Add UTM tags to my URLs.”
- Microsoft will append
utm_source=bing,utm_medium=cpc, and core fields like campaign, term, and content.
Option B — Manual template (full control):
- {lpurl}
?utm_source=bing&utm_medium=cpc&utm_campaign={Campaign}&utm_term={QueryString}&utm_content=ag_{AdGroup}-ad_{AdId}
Token choice:
- {Keyword} is your bidded term and can be blank for DSA. Use {QueryString} to capture the actual user query.
utm_term with the real query via {QueryString}.
Use engine tokens to auto-fill utm_term and utm_content
Keep sources lowercase and use each engine’s tokens for term/query. Templates below assume you keep utm_medium=cpc.
| Platform | utm_source |
Keyword token | Query token |
|---|---|---|---|
| Yahoo Japan Ads | yahoo-jp | {keyword} | {query} |
| Yandex Direct | yandex | {keyword} | {phrase} |
| Baidu | baidu | {keyword} | {querystring} |
Templates:
Yahoo Japan Ads
- {lpurl}
?utm_source=yahoo-jp&utm_medium=cpc&utm_campaign={campaignid}&utm_term={query}&utm_content=ad_{adid}
Yandex Direct
- {lpurl}
?utm_source=yandex&utm_medium=cpc&utm_campaign={campaign_id}&utm_term={phrase}&utm_content=ad_{ad_id}
Baidu
- {lpurl}
?utm_source=baidu&utm_medium=cpc&utm_campaign={campaignid}&utm_term={querystring}&utm_content=ad_{creative}
utm_term on Yahoo Japan Ads so their team can segment “industrial robot safety” searches in Looker.
Use utm_content to tag ad and variant signals for cross-tool analysis
Ad platforms report creative details, but UTMs make it easy to slice sessions and leads in your warehouse or CRM.
- ag_{adgroupid}_cr_{creative}
- {matchtype}_{device}
- cta_tco or cta_costs for different messages
utm_content=cta_tco or cta_costs to compare landing-page engagement by ad message in BI.
Keep all PPC clicks in one channel with cpc and lowercase sources
- Always use
utm_medium=cpcfor search ads. - Keep engine names lowercase: google, bing, yandex, baidu, yahoo-jp.
- Put brand/non-brand in
utm_campaign, not inutm_medium.
utm_medium=ppc and cpc. Standardizing on cpc fixed the paid search rollup and ended budget disputes.
QA steps that prevent broken PPC redirects from stripping UTMs
Do this before bulk changes:
- Use the platform’s test URL or preview. Confirm a 200 status on the landing page.
- Check that UTMs survive all redirects. Spaces must be URL-encoded (%20 or +).
- Avoid double question marks. If the landing page already has a query string, rely on the platform to insert “&” safely or adjust your template structure.
- For DSA and PMax, verify
utm_termuses a query token ({searchterm} in Google, {QueryString} in Microsoft). {keyword} can be empty.
utm_source and utm_medium on every click.
PPC tagging recipes you can paste today
| Scenario | What to do | Minimal example |
|---|---|---|
| Google Ads + auto-tagging ON + GA4 linked | Keep gclid. Add neutral UTMs in Final URL Suffix for external tools. | utm_source=google&utm_medium=cpc&utm_campaign=gads_{campaignid}&utm_term={searchterm}&utm_content=cr_{creative} |
| Google Ads manual (auto-tagging OFF) | Account-level tracking template + {_cn} at campaign level. | {lpurl}?utm_source=google&utm_medium=cpc&utm_campaign={_cn}&utm_term={keyword}&utm_content=ag_{adgroupid} |
| Microsoft Ads auto-UTM | Turn on “Add UTM tags to my URLs.” Validate fields. | Auto-appended: source=bing, medium=cpc, campaign, term, content |
| Microsoft Ads manual | Account-level template with campaign/keyword or query/ad IDs. | {lpurl}?utm_source=bing&utm_medium=cpc&utm_campaign={Campaign}&utm_term={QueryString}&utm_content=ad_{AdId} |
| Other engines | Use engine tokens, keep medium=cpc, source=engine. | {lpurl}?utm_source=yandex&utm_medium=cpc&utm_campaign={campaign_id}&utm_term={phrase} |
Open a live Google ad in Preview.
1) Add this Final URL Suffix at account or campaign level: utm_source=google&utm_medium=cpc&utm_campaign=gads_{campaignid}&utm_term={searchterm}&utm_content=ag_{adgroupid}_cr_{creative}
2) Click the preview. In your browser DevTools > Network, open the final request and confirm:
- gclid is present (query string)
utm_source=googleandutm_medium=cpcare presentutm_campaigncontains the campaign ID
3) Paste the URL into a URL decoder. Confirm spaces or special characters are encoded and not dropped through redirects.
Test your knowledge
Loading quiz questions...