attributionUpdated 2025

Partner Link Validation: Ensuring Referrer Accuracy

Validate that partner and affiliate links have correct utm_source matching actual referring domains

7 min readattribution

Your affiliate partner sends traffic with utm_source=partner_a. But the HTTP referrer shows partner-network.com. Attribution is fragmented.

Here's how to validate and fix partner link tracking for accurate commission attribution.

🚨 Not sure what's breaking your tracking?

Run a free 60-second audit to check all 40+ ways UTM tracking can fail.

Scan Your Campaigns Free

✓ No credit card ✓ See results instantly

Code
Partner Agreement: "Partner A" drives traffic
Partner-provided tracking link:
yoursite.com/shop?utm_source=partner_a&utm_medium=affiliate

Actual traffic in GA4:
Source: partner-network.com
Medium: referral
Campaign: (not set)

Why? Partner uses redirect network, UTMs lost in redirect

Reason 1: Redirect Networks

Many affiliate platforms route through redirect networks:

Code
User clicks partner link →
Redirects through tracking.affiliatenetwork.com →
Lands on yoursite.com

Result:
- Referrer: tracking.affiliatenetwork.com
- UTMs: Often stripped during redirect
- Attribution: Lost or misattributed

Partners use shorteners for clean links:

Code
Partner shares: bit.ly/abc123
Behind shortener: yoursite.com?utm_source=partner_a

If shortener doesn't preserve parameters:
- UTMs lost
- Shows as bit.ly referral

Reason 3: Incorrect UTM Source

Partner uses wrong source value:

Code
Agreed source: utm_source=partner_a
Partner actually uses: utm_source=affiliates

Result: Can't match traffic to specific partner

😰 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

Validation Process

Request actual links from each partner:

Code
Partner A: yoursite.com?utm_source=partner_a&utm_medium=affiliate&utm_campaign=summer_promo
Partner B: yoursite.com?utm_source=partner_b&utm_medium=affiliate
Partner C: yoursite.com?partner=c (missing UTMs entirely!)
Javascript
// Validation script
function testPartnerLink(url, expectedSource) {
    window.open(url, '_blank');
 
    // After landing, check:
    const params = new URL(location.href).searchParams;
    const actualSource = params.get('utm_source');
 
    console.log(`Expected: ${expectedSource}`);
    console.log(`Actual: ${actualSource}`);
    console.log(`Referrer: ${document.referrer}`);
 
    return {
        match: actualSource === expectedSource,
        source: actualSource,
        referrer: document.referrer
    };
}

Step 3: Check GA4 Alignment

Code
For each partner:
1. Click partner link
2. GA4 → Realtime → Traffic acquisition
3. Verify source matches agreement

Expected: source = partner_a
If shows: source = (direct) or something else → BROKEN

For every partner/affiliate:

Code
✅ UTM Parameters Present
   - utm_source: Partner identifier
   - utm_medium: affiliate (or referral, partner)
   - utm_campaign: Campaign/product identifier

✅ Parameter Preservation
   - Test link through partner's system
   - Verify parameters survive redirects
   - Check both desktop and mobile

✅ Source Consistency
   - Matches partner agreement
   - Unique per partner
   - No conflicts with other sources

✅ Referrer Alignment
   - Referrer documented
   - Expected referrer known
   - Mismatches documented

✅ Documentation
   - Partner name
   - Tracking link format
   - Expected source/medium values
   - Commission structure

Fix Common Issues

Issue 1: Redirect Stripping Parameters

Problem: Affiliate network strips UTMs during redirect

Fix: Use parameter-preserving redirects or append UTMs AFTER redirect:

Code
Option A: Request network preserve query parameters

Option B: Add UTMs to final destination
Partner redirect → yoursite.com
Configure final URL: yoursite.com?utm_source=partner_a

Issue 2: Multiple Partners, Same Source

Problem: All partners use utm_source=affiliate

Fix: Require unique source per partner:

Code
❌ ALL PARTNERS:
utm_source=affiliate (can't differentiate)

✅ UNIQUE SOURCES:
Partner A: utm_source=partner_a
Partner B: utm_source=partner_b
Partner C: utm_source=partner_c

Issue 3: Missing UTMs Entirely

Problem: Partner shares plain URLs without tracking

Fix: Generate tracked links for partners:

Code
Provide partners with pre-tagged links:
- Partner A gets: yoursite.com?utm_source=partner_a&...
- Partner B gets: yoursite.com?utm_source=partner_b&...

Use link generator or create portal for partners

Create a self-service portal:

Html
<!-- Partner Link Generator -->
<form id="partner-link-gen">
    <label>Partner ID:
        <input type="text" id="partner-id" placeholder="partner_a">
    </label>
 
    <label>Destination Page:
        <input type="text" id="dest-page" value="https://yoursite.com">
    </label>
 
    <label>Campaign (optional):
        <input type="text" id="campaign" placeholder="summer_promo">
    </label>
 
    <button type="button" onclick="generateLink()">Generate Link</button>
</form>
 
<div id="result"></div>
 
<script>
function generateLink() {
    const partnerId = document.getElementById('partner-id').value;
    const destPage = document.getElementById('dest-page').value;
    const campaign = document.getElementById('campaign').value;
 
    const url = new URL(destPage);
    url.searchParams.set('utm_source', partnerId);
    url.searchParams.set('utm_medium', 'affiliate');
    if (campaign) url.searchParams.set('utm_campaign', campaign);
 
    document.getElementById('result').innerHTML =
        `<p>Your tracking link:</p><code>${url.toString()}</code>`;
}
</script>

Monitoring Partner Performance

GA4 Partner Report

Code
GA4 → Explore → Blank Exploration

Dimensions:
- Session source (filter: contains "partner")
- Session medium
- Session campaign

Metrics:
- Sessions
- Transactions
- Revenue
- Conversion rate

Segments:
- Session source matches regex: partner_.*

Export weekly for commission calculation

Automated Validation

Javascript
// Weekly partner link audit
async function auditPartnerLinks(partners) {
    const issues = [];
 
    for (const partner of partners) {
        // Test link
        const response = await fetch(partner.link, {redirect: 'follow'});
        const finalUrl = response.url;
 
        // Check UTMs present
        const url = new URL(finalUrl);
        const source = url.searchParams.get('utm_source');
 
        if (source !== partner.expectedSource) {
            issues.push({
                partner: partner.name,
                expected: partner.expectedSource,
                actual: source,
                link: partner.link
            });
        }
    }
 
    return issues;
}
 
// Usage
const partners = [
    {name: 'Partner A', link: 'https://...', expectedSource: 'partner_a'},
    {name: 'Partner B', link: 'https://...', expectedSource: 'partner_b'}
];
 
const issues = await auditPartnerLinks(partners);
if (issues.length > 0) {
    console.warn('Partner link issues:', issues);
    // Alert team
}

Commission Attribution

Accurate Commission Calculation

Code
GA4 data:
source=partner_a, revenue=$5,000

Partner agreement: 10% commission

Commission owed: $500

WITHOUT proper tracking:
Revenue attributed to wrong source
Commission disputes
Partner relationship issues

Multi-Touch Attribution

If partner drives initial visit but conversion happens later:

Code
Setup GA4 conversion windows:
Admin → Data Settings → Attribution Settings
Set conversion window: 30 days (or per agreement)

This credits partner even if user returns directly later

✅ 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

FAQ

How do I handle partners who refuse to use UTMs?

Create unique subdomain or path for each partner (site.com/partner-a) and use server-side tracking to tag sessions appropriately.

What if partner and UTM source don't match?

Document expected mismatches. If partner uses redirect network, referrer won't match utm_source. That's acceptable if UTMs are correct.

Should I use utm_source or custom parameters for partners?

Use utm_source for GA4 attribution. You can also add custom parameters (partner_id=123) for your own tracking needs.

Monthly for active partners. Immediately before new campaigns. After any partner platform changes.

Can I track partner performance in real-time?

Yes. GA4 Realtime → Filter by source. Shows live traffic from each partner.

What if two partners share the same utm_source?

You can't differentiate them in GA4. Require unique sources per partner in agreements.

Test that shortener preserves UTM parameters. If not, request partners use parameter-preserving shorteners or provide pre-shortened links.

Should utm_medium be "affiliate" or "referral"?

Use "affiliate" to differentiate from organic referrals. Consistent across all partners.

Monitor for unusual patterns (sudden spikes, suspicious referrers), use server-side validation, implement click fraud detection, require partner approval process.

Set up automated monitoring to detect source/medium changes. Alert when new partner sources appear unexpectedly.


Related guides:

✅ 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

UTM

Get Your Free Audit in 60 Seconds

Connect GA4, run the scan, and see exactly where tracking is leaking budget. No credit card required.

Trusted by growth teams and agencies to keep attribution clean.