Tracking

Your affiliates are selling. The tracker says Direct.

It is the most common complaint in affiliate software support forums, and the most expensive one: commissions silently misattributed while real promoters conclude you are not paying them. Here are the seven ways tracking actually breaks, in order of frequency.

By the AffiliateTracking team · · 7 min

Failure points7
Cookie never set#1
Checkout on another domain#2
Payment redirect strips params#3
Ad blockers#4
Cross-device journey#5

1. The cookie never gets set

Affiliate tracking starts with a click landing on your site with a referral parameter. If the visitor arrives, the tracking script fails to load, or the parameter gets stripped by a redirect before the script runs, there is nothing to attribute. The sale records as Direct. This failure is invisible from the dashboard: no click, no error, no trace.

2. The checkout happens on another domain

Stripe Checkout, Paddle, and hosted payment pages move the customer to a different domain for the final step. If attribution lives only in a browser cookie on your marketing domain and the conversion event fires on the payment domain, the two never meet. The fix is server-side: the payment event must carry the referral identity in metadata, not hope the cookie survives the hop.

3. A redirect strips the parameter

Affiliate links pass ?ref=, ?via=, or ?fpr=. Marketing teams love redirect chains: vanity URLs, tracking wrappers, language gates. Each hop is a chance to drop the query string. One misconfigured redirect between the affiliate's link and your landing page eats every conversion it carries.

4. Ad blockers and privacy browsers

A meaningful share of technical audiences block third-party scripts outright. One operator on Hacker News reported roughly one in ten clicks tracked on third-party networks; ad-block researchers have documented the pattern for years. First-party tracking, served from your own domain, survives most of it. Third-party trackers do not.

5. The cross-device journey

A customer clicks an affiliate link on their phone during commute, buys on their laptop that night. Cookie-based attribution sees two unrelated visitors. Subscription SaaS with long consideration windows feels this most. Server-side identity, anchored to the customer record at payment time, is the only durable answer.

6. The order hook races the tracking

On plugin-based setups, the commission hook fires when the order is created. If tracking data has not landed yet, a real referral can record as organic. Race conditions like this produce the classic support ticket: it worked yesterday, nothing changed, now commissions are missing.

7. The numbers disagree with reality

The quietest failure: no missing sale, but reported clicks or commissions drift from what affiliates see in their own analytics. When reports are recomputed on the fly, small bugs become permanent history. An append-only ledger, where entries are written once and never rewritten, makes drift impossible: what was recorded is what is reported, forever.

The diagnostic table

When attribution looks wrong, work the list in order:

Sale shows Direct: cookie never set, or redirect stripped the parameter. Test the actual affiliate link end to end.

Some affiliates track, others never: their links use a parameter your setup does not read, or their audience blocks scripts.

Worked then stopped: something changed on the journey, a new redirect, a checkout migration, a script load order change.

Numbers drift slowly: reports being recomputed. Demand a ledger.

What trustworthy tracking checks

A tracker you can audit does three things. It attributes from the payment event itself, so the conversion is anchored to money, not to a cookie that may never have existed. It reconciles: every order either matches a referral or has a recorded reason not to. And it keeps history append-only, so the story cannot be rewritten after the fact. That is the standard we built to: first-party links on your domain, conversions from your processor's own events, and a double-entry ledger where every click and commission is a permanent row.