QR Codes for Product Packaging
Packaging combines every difficulty at once: small labels, curved surfaces, coarse printing processes and a code that has to survive a supply chain. It is also the place where a failed code is discovered last.
Curved surfaces
A code on a bottle, a jar or a tin is not a square grid in the camera image — it is a grid compressed towards the edges. QR codes handle this better than most people expect, because the alignment patterns exist precisely to let a decoder fit a warp rather than assume a flat rectangle.
The practical limits:
- Keep the code under about a third of the circumference. Beyond that the outer modules foreshorten faster than the alignment patterns can correct.
- Bigger is structurally better on a curve. Larger symbols carry more alignment patterns, so there are more interior landmarks to correct with. This is the one situation where increasing the version genuinely helps rather than hurting.
- Orient the code so the curve runs across it, not diagonally. A code rotated 45° on a cylinder distorts in both axes at once.
- Avoid the shoulder of a bottle entirely — compound curvature defeats the correction.
The printing process is the constraint
Packaging is rarely printed at the resolution of an office laser printer, and the processes involved spread ink in ways that matter at module scale.
| Process | Typical use | What it does to a code |
|---|---|---|
| Flexography | Corrugated, flexible film, labels | Significant dot gain; modules grow, gaps shrink |
| Rotogravure | High-volume film and cartons | Cleaner, but the cylinder is expensive to correct |
| Offset litho | Folding cartons | Good fidelity; the safest for small codes |
| Digital | Short runs, variable data | Good, and allows per-unit codes |
| Thermal transfer | Applied labels | Coarse — often 203 dpi; whole dots per module |
| Direct-to-corrugate | Shipping cases | Very coarse; go large or do not bother |
The common thread is dot gain: dark modules print slightly larger than designed and light gaps slightly smaller. That is a uniform, everywhere-at-once distortion, and our damage measurements found that distributed damage is four to seven times more destructive than the same amount concentrated in one place. It is why a packaging code can look flawless and scan badly.
Two responses. Ask the printer whether they can compensate — most can, and almost nobody asks. And design the code larger than the arithmetic requires, because size is the only variable that reduces the proportional effect of gain.
On corrugated board, print across the flutes rather than along them. Along the flutes, the ridges distort the module grid in one direction, which is exactly the sort of periodic error a decoder cannot separate from the code's own structure.
Where the code can and cannot go
- Not across a seam, fold or glue line. The panel shifts relative to its neighbour and the grid breaks.
- Not under a shrink sleeve wrinkle or near where the sleeve gathers.
- Not where a price gun, batch label or promotional sticker will land. Talk to whoever applies them; this is the single most common cause of a dead code in retail.
- Not in the area gripped by automated handling, which scuffs.
- Away from the barcode, so a scanner does not have to disambiguate two symbols at once.
- With its quiet zone intact — four empty modules on every side, and no printed rule, border or panel edge crossing into them.
Size and error correction
This is the one category where level H genuinely earns its cost. Packaging gets scuffed, wet, dragged across surfaces and stacked. The blot-shaped damage that error correction handles best is exactly the damage packaging receives.
Because level H adds modules, the payload has to stay short or the symbol becomes too dense to survive the printing process. Keep the URL under about 30 characters and this works; encode a long tracking URL at level H on a flexo-printed carton and it will not.
What to put behind it
Packaging codes are printed in the hundreds of thousands and are impossible to recall, so the destination has to be durable.
- A short path on your own domain, redirecting to the current content. Product pages get reorganised; the code cannot.
- Never a third-party dynamic service. A subscription lapse takes out an entire print run.
- Consider what regulation may require. Digital labelling — ingredients, recycling instructions, sustainability data — is increasingly delivered this way, and that content has to remain available for the life of the product.
- Give it a reason to be scanned. "Scan for recycling instructions" or "Scan to see where this was made" gets used; a bare square does not.
Testing on the real substrate
A code approved on a proof printed on office paper tells you nothing about how it will behave on kraft board printed flexo. Insist on:
- a press proof on the actual substrate, from the actual process
- scanning from the pack in its final form — filled, sleeved, curved, not flat artwork
- testing on several phones, including an old one, and in retail lighting, which is bright, overhead and full of reflections
- a scan after the pack has been handled — put one in a bag with others for a day first
The pre-print checklist covers the rest.
Written by Manuel Llovet, who builds and maintains QR Code Free Forever. Published 2026-08-31, last checked 2026-09-08. Figures and measurements on this page were produced for this site; the method is described in each caption.