Home Dynamic QR Split Testing
Split Testing
Test two landing pages without printing two codes.
NORTH LINE put one card in every parcel of the autumn run, twenty thousand of them, all carrying the same code. Nobody knows yet whether the card should open the care guide or the voucher, and the cards are already in boxes.
The rule engine
What the scanner gets
The care guide. Nothing about this scanner chose it. The hash did.
Sticky is the default: the bucket is a hash of the connecting address and the user agent together with the code and the rule, so the same person scanning twice sees the same page rather than flipping between them. A phone moving from wifi to mobile data can rebucket, which is the honest limit of doing this without a cookie.
Get this wrong and the same customer sees a different page every time they scan and stops trusting the card. Twenty thousand of them are already in boxes.
no subscription · pay per scan · nothing to cancel
The print run is fixed. The hypothesis does not have to be.
Testing anything on printed material normally means committing to the test at the printer, which is the one moment you know least about what works.
- Two codes on two batches means the batches differ by more than the thing you wanted to test.
- Weights fixed at print time keep sending half the traffic to a variant you already know is losing.
- A reader who scans twice sees a different page and stops trusting the code.
- Ending the test means reprinting, so tests quietly run forever.
What NORTH LINE decided after the cards were boxed
Name the variants and their weights
Weights are relative rather than percentages, so 50 and 50 behaves the same as 1 and 1, and adding a third variant does not require rewriting the first two.
{ "variants": [{"name":"A","weight":50}, {"name":"B","weight":50}] }Sticky is the default
The variant is chosen by hashing the scanner together with the code and the rule. The same person scanning the same code lands on the same variant every time.
Or reroll on every scan
Random mode picks fresh each time, which suits rotating a set of equivalent destinations rather than measuring which one wins.
What twenty thousand identical cards can still decide
- Weighted, not just even
splitSend a tenth of scans to a risky variant and the rest to the known-good one. Weights are relative and editable any time.
- The same customer keeps their page
A returning reader keeps their variant, so the experience stays coherent and the measurement stays honest.
- Two splits that do not correlate
The hash is salted per rule, so two split rules in one flow assign independently rather than sending the same people down the same side of both.
- Move the weights mid-flight
Shift traffic toward the winner, or stop the test entirely, without touching anything already printed.
- Counted like any other scan
Scans are recorded per destination with the same first-party, cookie-free record as everything else.
- One rule, 5 credits per change
A split is a custom rule at 5 credits per change. The scans it routes are 1 credit each, the same as any other scan.
Questions
Will the same person see the same variant twice?
In the default sticky mode, yes. The variant comes from a hash of the scanner plus the code plus the rule. The honest limit is that a phone moving from wifi to mobile data can land in the other bucket, because we do this without a cookie.
Can I change the split after the codes are printed?
Yes. The weights live in the rule rather than in the artwork, so you can shift them, add a variant or remove the rule at any point without a reprint.
Do the weights have to add up to one hundred?
No. They are relative, so 3 and 1 gives a three-to-one split, and adding a third variant does not force you to renumber the others.
What identifies a scanner?
The connecting address and user agent, hashed together with the code and rule identifiers. The hash input is used for the pick and is not persisted as a profile, and no cookie is set.
Does this report statistical significance?
No. You get scan counts per destination and the analytics dimensions around them. Deciding when a difference is real is your call, and a tool that declared a winner for you from scan counts alone would be overstating what it knows.