# A/B testing QR code placement

> Print two codes with identical destinations and distinct tracking parameters, change exactly one variable — position, size or wording — and compare scans. Be honest about volume, though — distinguishing a 1% from a 1.5% response takes roughly 8,000 impressions per variant, so on small runs test only big, obvious changes.

Source: https://useqr.app/docs/marketing/ab-testing-qr-code-placement · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## The method

An A/B test of physical QR placement needs three things: two codes, one difference, and discipline about everything else.

```
https://example.com/offer?utm_source=qr&utm_content=till-card
https://example.com/offer?utm_source=qr&utm_content=window-poster
```

Same destination, distinct `utm_content` per variant ([conventions here](/docs/how-to/how-to-add-utm-parameters-to-a-qr-code)); generate variant sets in one pass with the [bulk generator](/bulk) and confirm each decodes correctly with the [validator](/validate). Then change **exactly one variable**:

- **Position** — till versus window, eye level versus counter, front of menu versus back;
- **Size** — 5 cm versus 10 cm in the same spot;
- **Wording** — two [calls to action](/docs/marketing/qr-code-call-to-action) on otherwise identical cards.

Change two things at once and a winner tells you nothing about why. Keep the creative, the offer and the time period identical, and compare scan counts per [UTM parameter](/glossary/utm-parameter) in your analytics.

## The sample-size reality nobody prints

Here is the arithmetic most guides omit. Suppose placement A converts 1.0% of passers-by and placement B converts 1.5% — a 50% relative improvement, a genuinely large effect. Detecting that difference at the conventional statistical bar (95% confidence, 80% power) requires roughly **8,000 impressions per variant**. Halve the effect size and the requirement roughly quadruples.

Most print runs are hundreds of pieces. A flyer test where variant A got 4 scans and variant B got 7 has told you approximately nothing — that gap arises from chance constantly. Three honest consequences:

1. **Test big levers only.** Position, size and CTA wording produce large differences; module styling and colour tweaks produce small ones you cannot detect at print volumes. Spend your test budget where effects are detectable.
2. **Treat small deltas as noise.** If the winner leads by less than double at low counts, declare a tie and move on.
3. **Impressions are unmeasurable anyway** — nobody counts who walked past a poster. Use denominators you control: scans per 1,000 pieces mailed, per week per location, per event. [What scan rate should you expect](/docs/marketing/what-scan-rate-should-you-expect) covers why any absolute benchmark is suspect.

## Sequential testing: the low-volume workaround

When you cannot run two placements simultaneously at volume, rotate one placement through time: code A on the counter for two weeks, code B in the window for two weeks, then **repeat the cycle** — A again, B again. Comparing scans per week across repeated cycles averages out the confounders a single swap cannot (weather, season, that one busy Saturday).

It is not a randomised experiment and it will not survive a statistician's glare — footfall genuinely varies week to week — but for a shop deciding where the code lives, two clean cycles showing the counter beating the window by 3× is decision-grade evidence. The point of testing at this scale is to catch large effects cheaply, not to publish.

For campaigns where scans feed a purchase funnel, close the loop properly — [measuring offline-to-online conversion](/docs/ecommerce/measuring-offline-to-online-conversion) covers connecting scan sources to outcomes rather than stopping at the scan count.

## FAQ

### How do I A/B test a QR code?
Make two codes with the same destination and different tracking parameters, change one variable — position, size or call-to-action — and keep everything else identical. Compare scan counts per parameter in your analytics over the same period.

### How many scans do I need for a valid QR test?
It depends on effect size: separating a 1% from a 1.5% response needs roughly 8,000 impressions per variant at standard statistical thresholds. At typical print volumes, only large effects are detectable — treat narrow gaps at low counts as ties.

### Can I test QR placements with a small print run?
Yes, sequentially: rotate one placement at a time through repeated cycles and compare scans per week. It tolerates confounders imperfectly, but across two or more cycles a large, consistent winner is real enough to act on.

### What variables matter most in QR placement testing?
Test the big levers: physical position and dwell time, code size relative to viewing distance, and the wording beside the code. Cosmetic variables like module style produce effects too small to measure at print scale.

## Try it

- https://useqr.app/url
- https://useqr.app/bulk
- https://useqr.app/validate
