UTM Parameters
Chapter 21 — Using UTM Parameters in Affiliate & Partner Marketing
UTMs and affiliate parameters can live in the same URL without breaking payouts. Tag links so you keep affiliate credit in the network while your analytics shows which partner, channel, and promotion drove the visit. Focus on a clean mapping: fix utm_source at the right level (network or partner), keep utm_medium consistent (affiliate/partner), and use one optional field for publisher IDs or placements.
Affiliate tracking and UTMs can share a link without breaking payouts
- Affiliate links usually carry their own parameters, such as aff_id=789 or pid=123.
- Add UTMs to the same link. Join each parameter with
&.
Example:https://acme-saas.com/demo?aff_id=789&utm_source=G2&utm_medium=affiliate&utm_campaign=fy25_q2_launch - Parameter order does not matter. What matters is that the final landing URL keeps both the affiliate parameter and the UTM parameters.
- Make values URL-safe. Use underscores or hyphens. Encode spaces.
The affiliate platform sets credit from its own parameter and cookie. As long as that parameter reaches the final landing URL, UTMs are just extra labels for your analytics.
A simple schema maps partner, channel, and promotion
utm_source: the partner or the network. Choose the level you want to roll up in reports. Fix it and be consistent.utm_medium: affiliate for commission-based programs. Use partner or referral for non-commission referrals.utm_campaign: the promotion, offer, or time period (for easy filtering).utm_contentorutm_term: optional. Use one for publisher ID, subID, placement, or a short creative hint. Do not spread identity across multiple fields.
Patterns that scale for real programs
Use one of these patterns. Keep the identity in one place and the channel stable.
| Scenario | utm_source |
utm_medium |
Optional field (content/term) |
|---|---|---|---|
| Many affiliates via a network | Network name (e.g., impact, cj) | affiliate | Publisher ID or subID |
| One marquee affiliate | Partner name (e.g., Capterra) | affiliate | Placement (e.g., sidebar) |
| Co-marketing referral | Partner name (e.g., Snowflake) | partner or referral | Speaker, sub-brand, or link location |
| Reseller portal traffic | Reseller group or name | partner | Reseller account ID |
Examples:
- Network with many publishers:
https://acme-saas.com/pricing?cid=abc123&utm_source=impact&utm_medium=affiliate&utm_campaign=fy25_q2&utm_content={publisher_id} - Single high-value affiliate:
https://acme-saas.com/ebook?aff=CAP-44&utm_source=Capterra&utm_medium=affiliate&utm_campaign=ai_guide&utm_content=sidebar - Co-marketing referral:
https://acme-saas.com/webinar?ref=snow123&utm_source=Snowflake&utm_medium=partner&utm_campaign=dataops_webinar&utm_content=landing_cta - Reseller portal:
https://acme-saas.com/signup?r=VAR-551&utm_source=GlobalVARs&utm_medium=partner&utm_campaign=fy25_enterprise&utm_content=var_551
What correct tagging unlocks in analytics
- Traffic lands under clear source/medium pairs such as Capterra / affiliate or impact / affiliate instead of a generic referral.
- You can compare partner quality by downstream actions: demo requests, trial starts, docs engagement, pricing views.
utm_source=NicheSecBlog, utm_medium=affiliate) drive fewer clicks than a big directory, yet 2x higher trial-to-paid rate. They shifted budget toward similar niche partners.
Implementation checks before you hand out links
Use the Two-Ledger Test: both systems must agree - the affiliate network gets credit, and your analytics captures UTMs.
- Keep affiliate parameters intact. Join new UTMs with
&anywhere in the query string. - Validate redirects. If the link shortener or network uses redirects, the final URL must still contain both the affiliate parameter and the UTMs.
- Test in a clean browser state. Open the link in an incognito window and confirm the address bar shows all parameters on the landing page.
- Check deep links. Test product pages, docs, and gated assets the same way.
- Encode safely. Use spring_sale, not Spring Sale. Encode special characters.
- Run a live click via the affiliate network:
- Confirm the affiliate platform records the click.
- Confirm your analytics sees source/medium/campaign from the UTMs.
- Example outcome: after the network’s redirect, the final URL shows
?aff=987&utm_source=impact&utm_medium=affiliate&utm_campaign=fy25_q1. The network logs the click; analytics logs impact / affiliate.
Use network templates and macros to enforce consistency
Most networks let you set a tracking template so UTMs are auto-appended to every publisher link.
Template pattern:
?utm_source=impact&utm_medium=affiliate&utm_campaign=fy25_q2&utm_content={publisher_id}
The macro (for example, {publisher_id}) resolves at click time. This gives you clean rollups and publisher-level detail without manual edits.
utm_source=impact, utm_medium=affiliate, utm_campaign=etl_launch, and utm_content with the correct publisher ID.
Handle referrals outside of paid affiliate programs
For co-marketing or partner referrals without payouts:
utm_source=PartnerNameutm_medium=partner or referralutm_campaign=program or time windowutm_content=placement such asnewsletter_footerorresource_center_banner
utm_source=CPQCo&utm_medium=partner&utm_campaign=revops_series&utm_content=guest_post_body
Edge cases that break UTMs—and how to fix them
- Stripped parameters: Some redirects or security layers drop query strings. Ask the network or partner to pass through the full URL or use their deep-linking macro that preserves parameters.
- Hash fragments (#): Place UTMs before the #. Anything after # is not sent to the server on the first load.
- Duplicate identity fields: Do not repeat the partner name in multiple UTM fields. Pick one primary identity field and keep others for IDs or placements.
Quick decision guide for marketers under time pressure
- Few direct affiliates you recognize by name →
utm_source=PartnerName,utm_medium=affiliate. - Hundreds of publishers via a network →
utm_source=NetworkName,utm_medium=affiliate,utm_content={publisher_id}. - Co-marketing or non-commission referrals →
utm_source=PartnerName,utm_medium=partner(or referral).
utm_source to the affiliate network for scale, and mirror the publisher ID into utm_content using the network’s macro. This keeps channel grouping stable, limits source sprawl, and still gives you partner-level performance. Pass utm_content into your CRM touchpoint model so sales can see which publisher drove the lead.Goal: Prove whether your UTMs and affiliate parameter survive to the final landing page.
Time: ~5 minutes.
Chrome or Edge (recommended)
- Open a clean session
Open an Incognito/Private window (Ctrl+Shift+N on Windows or Cmd+Shift+N on Mac). - Prepare your test URL
Use a full affiliate click URL that includes both the affiliate parameter and UTMs.
Example pattern (adjust to your network):https://affiliate.example.com/click?pid=123&url=https%3A%2F%2Fbrand.com%2Foffer%3Futm_source%3Daffiliate%26utm_medium%3Dpartner%26utm_campaign%3Dspring - Open DevTools and set up Network
- Open DevTools (Ctrl+Shift+I on Windows or Cmd+Opt+I on Mac).
- Go to the Network tab.
- Check “Preserve log”.
- Check “Disable cache”.
- Click the “Clear” (trash can) icon.
- Paste your affiliate URL in the address bar and press Enter.
- In the Network panel’s filter box, type: doc
This shows document-level requests (page loads), which are where redirects happen.
- Click the top-most document request (it should be the affiliate tracking domain).
- In the right pane, open the Headers tab.
- Note:
- Request URL: This is the exact URL requested.
- Status Code: Likely 301/302 if it redirects.
- Response Headers > Location: The next URL the browser will load.
- In the left list, click the next document request created by that Location header (it usually appears right below).
- Repeat: For each 301/302, open Headers and read Response Headers > Location.
- Stop when you reach the final document with Status Code 200.
- Click the final 200 OK document request.
- In Headers, check Request URL. Confirm your UTMs (
utm_source,utm_medium,utm_campaign, and any others) are present. - If your setup requires the affiliate parameter to reach the merchant page as well, check for it in one of two places:
- In the final 200 OK Request URL (ideal when the merchant needs it).
- If it is not expected on the final page, click the previous request (the last 301/302 before the 200) and check Response Headers > Location to confirm the affiliate parameter was included when handing off to the merchant together with UTMs.
Firefox
- Open a Private Window.
- Open DevTools (F12), Network tab. Enable “Persist Logs,” disable cache, clear.
- Load the URL. Click the first document request. Check Headers > Status and Headers > Location.
- Click each next 301/302 document until you reach the 200 OK. Confirm UTMs in the final Request URL.
Safari
- Safari > Settings > Advanced > enable “Show Develop menu in menu bar”.
- Open a Private Window. Open Web Inspector (Cmd+Opt+I) > Network. Enable “Preserve log,” disable cache, clear.
- Load the URL and follow the same steps: open each document request, read Response Headers > Location on 3xx hops, and confirm UTMs on the final 200 OK Request URL.
Test your knowledge
Loading quiz questions...