TrackFunnels

UTM Parameters

Chapter 21 — Using UTM Parameters in Affiliate & Partner Marketing

Shad Malik
By Shad Malik Updated on Feb 18, 2026

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 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.
Myth Debunk:
Adding UTMs does not steal affiliate credit.
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_content or utm_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.
A SaaS company saw a small review blog (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.

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.

A data integration vendor set a network-wide template. Every publisher click arrived labeled as 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= PartnerName
  • utm_medium= partner or referral
  • utm_campaign= program or time window
  • utm_content= placement such as newsletter_footer or resource_center_banner
A RevOps team trading guest posts with a CPQ vendor used:

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).
TrackFunnels Expert Tip:
Fix 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.
Try This Now Assignment

Goal: Prove whether your UTMs and affiliate parameter survive to the final landing page.
Time: ~5 minutes.

Chrome or Edge (recommended)

  1. Open a clean session
    Open an Incognito/Private window (Ctrl+Shift+N on Windows or Cmd+Shift+N on Mac).
  2. 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
  3. 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.
  • Load the URL and filter the list
    • 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.
  • Select the first document request (the affiliate domain)
    • 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.
  • Walk the redirect chain to the end
    • 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.
  • Confirm what survived
    • 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...