Split testing affiliate pages: measure revenue per variant, not clicks

Admission ticket with variants A and B: fewer clicks but more revenue for B; stub reading Testing

Most split tests on affiliate sites end with “variant B got 20% more clicks, ship it”. Then the revenue doesn’t move, or goes down. A click only tells you that someone left your page. Whether they signed up and paid happens on the program’s side, and that is the only part that pays you.

Our verdict

Worth it, slowly

EffortA day to set up
First resultsWeeks for signups
We still use itOn high-traffic pages

The short version

  • In an affiliate split test, the winning variant is the one that earns more per visitor who saw it: signups and revenue per exposed visitor, not clicks and not revenue per click.
  • Each variant needs its own tag that reaches the program’s statistics: track on Chaturbate, campaignId on Stripcash direct links, p1/p2 on Stripchat widgets, aff_sub on CrakRevenue.
  • For cam offers, judge a test on signups first: they arrive weeks earlier than revenue and are less distorted by a few big spenders.
  • Revenue per click can mislead: a variant that gets fewer clicks can earn more per click and still earn less in total. Divide by the visitors exposed to each variant.

What should an affiliate split test measure?

It should measure signups and earnings per visitor exposed to each variant. Clicks and earnings per click help you understand why a variant wins, but they don’t decide. You need three counts, from two different sources:

WhatWhere it comes fromWhat it tells you
Visitors exposed per variantYour analytics (page views of each variant)The base every result is divided by
Clicks per variantYour analytics (an event on each outgoing link)Which variant sends people out
Signups, spenders, earnings per variantThe program’s stats, grouped by your tagWhich variant brings users who pay
Signups per 1,000 visitorsSignups ÷ exposed visitors, per variantThe early decision metric
Revenue per 1,000 visitorsEarnings ÷ exposed visitors, per variantThe final answer, once revenue has had time to arrive
Earnings per clickEarnings ÷ clicks, per variantA diagnosis: are the clicks you get good ones?

Why not decide on earnings per click? Because it ignores how many people clicked. With the same traffic, variant A gets 100 clicks worth $1 each ($100), variant B gets 40 clicks worth $2 each ($80). B wins per click and loses the test. The reverse trap exists too: an aggressive button pulls curious clicks that never sign up, so A can win on clicks and lose on revenue. Only a result divided by the visitors who saw the variant settles it.

How do you get the variant into the program’s report?

Give each variant its own value in a tracking field that the program actually records, and verify it before the test starts. Each program has its own field:

ProgramField to useWatch out
ChaturbatetrackStored with every signup, visible in the stats export
Stripcash, direct linkscampaignIds1/s2/s3 are dropped (see why)
Stripchat widgetsp1, p2Recorded as custom parameter #1 and #2
CrakRevenueaff_sub parametersGroup by the same sub-ID in its reports

Encode the page and the variant together (review_btn_b), send one test click per variant, and check the next day that each value shows up. We ran a test for weeks before discovering our tags never reached the report. Verify before you wait.

How do you split the traffic?

Assign each visitor to one variant, keep them there, and log the variant in both your analytics and the outgoing link. The simplest reliable setup:

  1. On the first visit, pick a variant at random and store it in a first-party cookie, so the same visitor always sees the same version.
  2. Render the variant on the server when you can. Client-side swaps cause a visible flicker and break when JavaScript is blocked.
  3. Send an analytics event on each affiliate click with the variant as a parameter.
  4. Build the affiliate link with the variant’s tag, through your own redirect so ad blockers don’t hide it.
// assign once, keep for 90 days
let v = document.cookie.match(/(?:^|; )ab_review=([ab])/)?.[1];
if (!v) {
  v = Math.random() < 0.5 ? 'a' : 'b';
  document.cookie = `ab_review=${v}; path=/; max-age=${90 * 86400}; SameSite=Lax`;
}
// the outgoing link carries the variant, e.g. /out/stripcash/?v=review_btn_${v}
// (your redirect must copy v into campaignId, or build the tagged link directly)

Which question are you testing?

Generic placements (pop-ups, a “live cams” button in the menu): the visitor arrives without a precise intent and you choose where they land. Here, test landings: the platform’s home, a category, a specific room. The metric is conversion rate per landing.

High-intent pages (a model’s page, a review): the destination is fixed, the visitor wants that room or that site. Here, test the page itself (button text, placement, a screenshot) and judge on signups and revenue per exposed visitor. Earnings per click tells you whether a change attracts better or worse clicks.

How long should a cam affiliate test run?

Long enough to collect a meaningful number of signups per variant, in full weeks, and longer still if you want to judge on revenue. Cam revenue arrives late, so a test judged on revenue after two weeks is judging noise. And a single big spender landing in one variant can flip the result on their own. What we do:

  • Decide on signups first. They come weeks earlier than spending and are much less dominated by a few big buyers.
  • Run tests over full weeks, never a few days: traffic on a Tuesday is not traffic on a Saturday.
  • Only test on pages with enough traffic. With a few dozen signups per variant, small differences are chance. Test big changes rather than button colors.
  • Don’t change anything else on the page during the test: a new title or a Google update in the middle makes the comparison meaningless.
  • Keep the tags alive after the test. The users a variant brought keep paying on its tag for years, and the long-term revenue is the final answer.

Frequently asked questions

Should I judge an affiliate A/B test on clicks?

No. Clicks show which variant sends people out, not which one earns. Judge on signups and revenue per visitor exposed to each variant, using the program’s statistics for signups and revenue and your analytics for the number of visitors.

How do I track A/B variants on Stripcash?

Put the variant in campaignId on direct links, or in p1/p2 on widgets. The s1 to s3 sub-IDs did not reach the Stripcash report in our tests, so a variant stored there can never be measured.

How do I track A/B variants on Chaturbate?

Use a different value of the track parameter for each variant. Chaturbate stores it with every signup, and the stats export lets you group signups and earnings by track.

How long should I run a split test on a cam affiliate page?

At least several full weeks, until each variant has enough signups to compare, and longer if you want to judge on revenue. Cam users often sign up and spend weeks or months after the click.

Why is revenue per click not enough to pick a winner?

Because a variant can earn more per click while getting far fewer clicks. With equal traffic, 100 clicks at $1 beat 40 clicks at $2. Divide revenue by the visitors who saw each variant, not by the clicks.

Most tests end without a clear winner. That is fine: it means the change didn’t matter, and you can stop worrying about it. The few clear wins are worth the wait.