Back to all posts

Troubleshooting · September 2026 · 8 min read

Affiliate Tracking Not Working?

Affiliate tracking breaks in three places: the click doesn't get recorded, the click gets recorded but the conversion doesn't attribute, or the conversion attributes but the commission never appears. Here's how to diagnose each one and what actually fixes it.

An affiliate tells you their link “isn't working.” A merchant looks at the dashboard and sees zero conversions despite obvious referral traffic. A conversion appears but no commission gets generated. These are the three symptoms, and each maps to a different layer of the tracking stack — click capture, attribution, or commission generation.

This guide walks through each layer in the order you should debug them, with the specific checks to run and the fix for each cause.

Layer 1: Clicks not recording

First test: visit the affiliate's referral link in an incognito browser. Then look at the clicks/visits report in your affiliate platform. If the click doesn't appear within a minute, the click capture itself is broken.

Tracking script not loading

The most common cause. The affiliate platform's JavaScript snippet either isn't on the page or is failing silently. Check:

  • View source on the landing page. Look for the tracking snippet in the <head> or before </body>. If it's not there, it never installed.
  • Browser DevTools → Network tab. Reload the page and filter for the tracker's domain. If the script request fails (404, CORS, blocked), it can't run.
  • Console errors. A JavaScript error earlier in the page can prevent later scripts from executing. Check the console for red errors.
  • Shopify theme issue. On Shopify, the tracker is usually injected via a theme app extension or theme.liquid edit. If you recently switched themes, the snippet went with the old theme — reinstall in the new one.

Ad blockers and privacy extensions

uBlock Origin, AdGuard, Brave's Shields, and Firefox Enhanced Tracking Protection block anything that looks like analytics or a tracker. If your affiliate script lives on a domain like tracker.refersion.com or cdn.firstpromoter.com, blockers will kill it.

First-party tracking (script served from your own domain or a subdomain) survives this; third-party tracking does not. If you're seeing 10–30% fewer clicks than you'd expect, ad blockers are usually the cause. First-party tracking is the structural fix.

Affiliate is sharing a malformed link

Check the actual URL the affiliate is sharing. Common breakages:

  • The ?ref=CODE portion got cut off when pasted (Twitter, SMS, some email clients trim long URLs).
  • The link uses the wrong parameter name (?affiliate= when the tracker expects ?ref=).
  • A URL shortener stripped the query string (rare, but happens with some Bitly setups).
  • The link points to a domain that 301-redirects but drops the query string in the redirect (e.g. yoursite.com/?ref=Xwww.yoursite.com/ with the param stripped).

Test the exact link the affiliate is sharing — not a fresh one from your admin — in an incognito browser. Watch the address bar after the page loads.

Layer 2: Clicks recorded, conversion not attributing

Click shows up in the clicks report. Order or signup happens. No conversion gets created. This is the most common — and most expensive — failure mode.

Safari ITP killed the cookie

Safari's Intelligent Tracking Prevention caps third-party cookies at 24 hours, and increasingly blocks them entirely. If your tracker stores the affiliate attribution in a third-party cookie and your customer takes longer than 24 hours to convert (which is normal — the median click-to-purchase window on Shopify is 3+ days), the attribution is gone by checkout.

Diagnostic: in your affiliate platform, look at the ratio of clicks-to-conversions broken down by browser. If Safari is dramatically underperforming Chrome (less than half the attribution rate), ITP is eating your data. Chrome's own deprecation in 2026 is making this universal. See Chrome cookie deprecation for the long-term picture.

Fix: switch to a tracker that uses first-party cookies (set by your own domain, not the tracker's). On Shopify, that means a tracker that runs through an app extension or server-side, not just a third-party script.

Checkout flow drops the attribution

The customer clicks the link, lands on your site with the ?ref= param, browses around … then converts. But the conversion happens in a context that lost the attribution:

  • Subdomain mismatch. Cookie set on www.yoursite.com, checkout happens on checkout.yoursite.com. Cookie scoping rules drop it.
  • Shopify checkout extensibility. Older “checkout.liquid” trackers don't work in Shopify's new checkout extensibility model. The tracker has to be installed as a checkout UI extension or via the order webhook.
  • SaaS signup on a different domain. Marketing site is yourapp.com, signup is on app.yourapp.com. The attribution cookie set on the marketing domain isn't readable on the app domain. Fix: pass the ref through as a URL parameter on the signup link, then capture it server-side at user creation.
  • Stripe Checkout / hosted payment page. When the customer leaves your site for Stripe's hosted checkout, you must pass the affiliate code as Stripe metadata when you create the Checkout Session — otherwise the tracker has no way to attribute the order back.

Order webhook not firing or not configured

For Shopify, the affiliate platform usually attributes conversions via the orders/create webhook. For SaaS, it's the Stripe checkout.session.completed or invoice.payment_succeeded webhook.

Check the webhook delivery log on the source platform:

  • Shopify: Admin → Settings → Notifications → Webhooks. Verify the affiliate tracker's webhook URL is listed and shows recent successful deliveries.
  • Stripe: Dashboard → Developers → Webhooks. Check the endpoint's recent events — non-200 responses mean the tracker received the event but errored.
  • Webhook secret mismatch. If you've rotated your webhook secret without updating it in the affiliate platform, every delivery returns 401 and gets discarded.

Coupon code attribution misses

If you attribute via coupon codes rather than links, the failure modes are different:

  • Coupon code in the affiliate platform doesn't exist as an actual discount in Shopify (the affiliate platform assumes you've created it, you haven't).
  • Customer used a different code than the affiliate's (a sitewide promo overrode the affiliate code at checkout).
  • Two affiliates were assigned the same code (the platform might attribute to either, deterministically wrong half the time).

See tracking by discount code for the full guide on getting code-based attribution right.

Layer 3: Conversion attributed, commission not appearing

Conversion shows up in the report. Commission column is blank, zero, or stuck pending.

Commission rate not set

The affiliate is in the program but has no commission rate, or the program's default rate is zero. Check the affiliate's profile and the program-level default. Some platforms require an explicit rate on every affiliate — a blank field doesn't fall back to the default.

Stuck in pending forever

Most platforms hold commissions in “pending” status for a hold window (typically 30 days, matching the refund window) before releasing to “approved.” If a conversion is more than 60 days old and still pending, something is broken. Usually:

  • The auto-approval cron isn't running (rare but happens after platform migrations).
  • Manual approval mode is enabled and no one is approving.
  • The conversion is flagged for fraud review and no one cleared it.

Refund/cancel reversed it silently

The order was refunded, partially refunded, or cancelled. The commission was reversed. Look for a “refunded” or “cancelled” status filter on the conversions report.

SaaS recurring commission expired

For subscription products with a recurring-commission window (e.g. “30% for 12 months”), commissions stop generating after month 12 even though the customer keeps paying. Check the recurring window setting on the program.

The end-to-end smoke test

When you're not sure where the failure is, run this five-minute test:

  • 1. Pick a real affiliate and grab their referral link.
  • 2. Open an incognito window. Visit the link.
  • 3. Within 60 seconds, check the clicks report for that affiliate. Click should be there. If not → Layer 1 problem.
  • 4. In the same incognito window, browse the site, add to cart, complete checkout (use a test/discounted product).
  • 5. Within 5 minutes (depending on webhook latency), check the conversions report. Conversion should appear, attributed to that affiliate. If not → Layer 2 problem.
  • 6. Check the commission column on that conversion. If blank/zero → Layer 3 problem.

FAQs

My affiliate says the link doesn't work but it's tracking fine on my end.

Ask them what browser/device. Safari on iOS is the usual culprit — ITP makes the cookie disappear, and the affiliate sees no attribution credit on their dashboard even though the click registered server-side. Fix is structural (first-party tracking), not per-affiliate.

Why are some conversions attributed and others not, even from the same affiliate?

The conversions that drop are almost always: (a) customers on Safari/Firefox with cookie blocking, (b) customers who took longer than the cookie window to convert, or (c) customers who completed checkout in a different browser session than the click. Coupon-code attribution catches some of these; first-party cookies catch most.

Should I switch platforms if tracking is unreliable?

Not necessarily — most tracking issues are configuration problems, not platform problems. But if your platform doesn't support first-party tracking and you're seeing >20% Safari attribution loss, the platform is the limit. The fix is moving to a tracker that runs server-side (Shopify) or accepts attribution via Stripe metadata (SaaS), not just via browser cookies.

How do I know how much I'm losing to tracking failures?

Compare affiliate dashboard clicks to your own server-side analytics for referral traffic (Google Analytics, Plausible, etc. with the utm_source=affiliate filter). If your analytics shows 1,000 referral sessions and your affiliate platform shows 600 clicks, that's a 40% loss on click capture alone. Conversion attribution loss compounds on top.

Tired of tracking that breaks?

AffRef uses first-party tracking by default — cookies set on your own domain, server-side conversion attribution, no third-party script ad blockers can kill. Same setup for Shopify and SaaS. 7-day free trial.

Start free trial →

Ready to grow your affiliate program?

Start your 7-day free trial. Cancel anytime.

View Plans
Usually replies within an hour
Hey 👋 I'm Aaron, founder of AffRef. Drop your email and your question and I'll get back to you fast.
By chatting you agree to our privacy policy.
End this chat? History on this device clears.