An affiliate tracking link is not merely a destination URL with a few UTMs appended. A reliable link creates or carries a unique click identifier, records the campaign context, passes the correct value to the affiliate system and gives the later conversion a deterministic route back.
A practical click URL can look like this:
https://go.example.com/campaign?campaign_id=183746&ad_id=99821&sub1=facebook_feed
After the tracker records the visit, its outbound Track Link may become:
https://network.example/offer?aff_sub=dc_01K35N8T2R&campaign=183746&placement=facebook_feed
The important part is not the spelling of each parameter. It is the contract: the tracker-generated click ID must reach a field the affiliate network stores, then return unchanged in a postback.
Regular link vs tracking link
| Link type | What it does | What it cannot prove |
|---|---|---|
| Direct destination URL | Opens the landing page or offer | Which exact click produced a delayed conversion |
| UTM-tagged URL | Adds channel and campaign labels | A one-to-one click-to-conversion join |
| Affiliate network link | Identifies the affiliate or placement inside the network | Your tracker’s complete route unless its click ID is passed in |
| Tracker link | Creates a click record, applies routing and expands outgoing macros | The partner conversion unless a callback or API event returns |
The strongest setup uses the tracker link as the first controlled boundary, then deliberately connects it to the affiliate link and the return postback.
The five layers inside one tracking route
1. Campaign dimensions
Campaign, ad set, ad, placement and buyer labels describe groups of clicks. Store stable platform IDs in dedicated fields and use sub1–sub10 for flexible context such as placement, creative angle or buyer code.
For Meta, the incoming parameter template may include:
campaign_id={{campaign.id}}&adset_id={{adset.id}}&ad_id={{ad.id}}&sub1={{placement}}
For TikTok, the platform macro syntax is different:
campaign_id=__CAMPAIGN_ID__&adset_id=__AID__&ad_id=__CID__&sub1=__PLACEMENT__
Use the dedicated Facebook URL parameter guide and TikTok macro guide before copying a template between platforms.
2. Platform click identifier
fbclid, ttclid and gclid belong to the ad platform. Preserve them when supplied, but do not use them as a replacement for the tracker’s own primary click key. They support platform attribution and server-side feedback; they do not define your internal data model.
3. Internal click ID
The tracker creates one opaque ID for one visit. That ID is the join key for the later S2S conversion. Treat it as an immutable string: do not shorten, decode, rebuild or replace it with a campaign ID.
4. Affiliate-network storage field
Networks expose fields such as aff_sub, sub1, s2 or clickid. This is where you store the tracker click ID while the visitor completes the offer flow:
https://network.example/offer?aff_sub={click_id}
Here {click_id} is expanded by the tracker. aff_sub is owned by the affiliate network.
5. Conversion and transaction identifier
The network returns the stored click value and its own conversion data:
https://tracker.example/postback?click_id={aff_sub}&status={status}&payout={payout}&transaction_id={conversion_id}
click_id finds the visit. transaction_id distinguishes multiple real events or protects against literal retries. They are different identifiers and should not share one value by default.
A complete example from click to payout
Assume a Meta ad sends a visitor through DarkCore to an affiliate offer.
- Meta expands its macros and adds the real campaign context.
- DarkCore records the click, platform IDs and sub IDs, then creates
dc_01K35N8T2R. - The outgoing Track Link sends that value into
aff_sub. - The network stores it beside the visitor session.
- A deposit occurs two days later.
- The network expands its postback macros and sends the same value back.
- DarkCore finds the original click, maps the raw status, records the payout and rejects an identical transaction retry.
This is why a page view or redirect success is not the acceptance test. The useful evidence is one conversion row attached to the original source, campaign, stream and offer.
Query-string rules that prevent silent breakage
- A complete URL uses one
?before the first parameter and&before every later parameter. - A dedicated “URL parameters” field may expect only the parameter string without a leading
?. - Encode literal values, but do not pre-encode platform macros unless the platform documentation requires it.
- Never define the same key twice with different values.
- Preserve query parameters through every redirect, PWA entry point and offer transition.
- Do not put email, phone, name or another direct personal identifier into a URL.
If braces or underscore macros remain in the delivered URL, the system responsible for that stage did not expand them.
Pass/fail launch checklist
| Check | Pass condition |
|---|---|
| Delivered ad click | Platform macros are replaced with real values |
| Tracker click | Exactly one new click record contains the intended campaign and sub fields |
| Internal ID | A unique tracker click ID exists and is not reused as a campaign label |
| Outbound offer URL | The click ID is present in the network’s documented storage field |
| Network record | The stored value matches the tracker click ID byte for byte |
| Postback | The same value returns under an incoming key the tracker accepts |
| Status | Registration, deposit, sale or custom raw value maps to the intended event |
| Payout | Numeric value and currency represent the agreed business metric |
| Transaction | A stable conversion ID prevents a retry from adding revenue twice |
| Report | Conversion appears on the original click, campaign, stream and offer |
Use the Postback URL Builder to inspect the return URL, then run the full postback troubleshooting checklist. An HTTP 200 is transport evidence, not attribution evidence.
Common mistakes
Using UTMs as the click key
Thousands of visitors can share one utm_campaign. UTMs describe a group; they do not identify one visit.
Passing a campaign ID into aff_sub
This makes every click in the campaign return the same value. A delayed conversion cannot be joined to one visitor.
Mixing macro owners
Meta, TikTok, the tracker and the affiliate network each run a different template engine. The postback parameter and macro guide explains which side owns the key and which side owns the placeholder.
Testing only a preview URL
Preview tools can omit click identifiers or behave differently from delivered traffic. Record one real controlled click, then verify every handoff.
The operational model
A good affiliate tracking link is a small data pipeline:
ad context → tracker click → affiliate storage → conversion postback → attributed revenue
Keep group dimensions, platform click IDs, the internal click ID and transaction IDs in separate fields. Once those roles are explicit, different trackers and networks become adapters around the same invariant: the original click value must survive the round trip unchanged.