QR code destination tests
SmartQRCode editorial · Updated October 2026
QR code destination tests only work when each arm has its own hosted hop. Different hosted hops per arm beat restyling one static URL. A contaminated test from one short link will flatter whichever colour staff prefer. Confirm a control scan per arm before the split run ships.
How QR code destination tests need different hosted targets
The camera does not report sticker colour. It reports a payload. If both colours encode the same static URL, you have one counter. Print-run A/B tests need different hosted destinations or different codes if the point is to count which design was scanned.
Hosted types let you keep millimetre size and error correction identical while the 302 target differs. That is the clean split. Changing only a logo on one static file is a design argument, not a test.
A Canva one-off is what you print when you are not testing. Do not dress it up as an experiment.
Scans are not people. Analytics cannot see a name or email.
Split a print run across two short URLs
- Write the same landing hypothesis for both arms (same offer, different CTA line, or different first screen).
- Create two tracked or dynamic codes. Put distinct UTM content values on each hosted destination.
- Export both files at the same millimetres, same correction, same quiet zone. Only the hop differs.
- Print equal quantities. Mix them in the field on a rule (even tables get A, odd get B), not by whoever grabs the pile.
- Keep a control card for A and a control card for B in the drawer.
- Scan both controls. Confirm the dashboard and the analytics property each moved on the matching arm.
- Ban staff from scanning both arms "to see." Those hops are contamination.
- End the test by pausing both or by retargeting both, on purpose. Do not archive and assume the counts freeze in the world; archive still scans.
If you cannot fund two codes, you cannot fund a test. Print one hosted file and skip the slide.
Why restyling one static URL cannot count a winner
Static modules store one payload. Two PNG colourways of that payload are still one URL. UTM cannot split them after print. Density also gets worse if you stuff two query strings into one static file by concatenating guesses.
Rebuild as hosted. The printed pattern can stay coarse. The destinations carry the labels.
Product-launch cartons that already shipped as one static URL cannot be split retroactively. The next SKU run is your first real test.
Read scans as scans not unique visitors
The same buyer who scans A then B is two scans, one person. Booth staff looping both arms will swamp a small run. Country and device fields are headers.
Report "scans on A versus scans on B" and the exposure rule you used. Do not report conversion to humans unless another system saw a purchase.
A 301 from a mixed vendor can pin one arm's phones to an old page and make that arm look dead. Test a fresh handset per arm.
Failure modes of a contaminated test
Shared short URL. Controls never scanned. Piles mixed by accident in the warehouse. Pause on one arm only. Preview screenshots plated on one arm (/qr-preview). Different physical sizes so one arm is unread.
Each failure still produces a chart. The chart is not the test.
Wi-Fi cannot be an arm. It has no scan counter.
How to randomise the pile so warehouse habits do not pick a winner
Restyling one static URL is the test that never started. If the warehouse already printed it, do not analyse the colours. Reprint two hosted arms or admit you ran a design review.
Contaminated test from one short link also happens when a manager reprints "a few extras" from the wrong PDF. Number the boxes A and B in the plant. Photograph the first sheet out of each box against the control card. If the photo does not match, stop the truck.
Control scan per arm every morning of the test. If arm B's control dies, you paused the wrong row or the destination 404ed. That is not a creative result. Fix the hop, then keep counting. Scans remain scans, not unique visitors, even when the chart is clean.
Staff who "just check both" will double-count. Give them a written ban and a third phone that is not in the test. If leadership needs a demo, demo the control cards in a back room, not on the floor piles. Confirm the dashboard after the demo and subtract those hops if they landed on the live arms.
Keep millimetres, correction, and quiet zone identical across arms so the test is the hop, not the print quality. If arm B is 3 mm smaller, you tested size. Export both from the same generator settings aside from the destination. Confirm both proofs scan from the same floor mark before you split the run.
Different hosted hops per arm is the rule even when creative swears the colour is the variable. The camera cannot see Pantone. It sees a URL. Restyling one static URL cannot count a winner, and stuffing two query strings into one static payload only densifies modules. Create two tracked or dynamic codes, same millimetres, same correction, distinct UTM content values. Mix the piles on a rule the warehouse can follow without a meeting. Ban staff scans on the floor. Control scan per arm each morning. If one arm 404s, you do not have a creative result; you have a broken destination. Scans are not people. Report scans versus scans plus the exposure rule. A Canva file is what you print when you are not running a test and you know it.
If legal will not allow two destinations, you are not allowed to claim an A/B test. Run a design review with one hosted hop and say so. Printing two colours anyway without two hops wastes ink and produces a chart you should not show. Confirm leadership signed the "one hop" constraint before the plant starts.
When you are not running a test and a Canva file is enough
One design, one URL, no split, no dashboard. Export static at print size. Put the brand in type beside it.
When you are testing, pay for two hosted hops, print them equal, scan the controls, and refuse to share a URL across colours. That is the whole method.
Questions this raises
The counter cannot tell which sticker was scanned. Print-run A/B tests need different hosted destinations or different codes if the point is to count which design won.
At least one hosted code per arm, plus a control card for each. Two stylings of one static URL is one arm, however pretty.
No. Scans are not people. Staff who scan both arms contaminate both counts.
When you will not split the run, will not count, and will not change the page. A Canva one-off is then the whole job.
No. One static payload is one query. Put different UTM strings on different hosted destinations.
Keep going
The tools and playbooks this post refers to, one click away.
Make the code this post is about
$1.99 for 7 days, then a paid plan. Pick a type, brand it, and edit the destination whenever you like, even after it is printed.