# QR codes on product packaging

> Packaging QR codes need 2–3 cm and error correction Q, because packaging is curved, creased, laminated and handled. The harder problem is permanence: the code outlives the campaign, so it must point at a URL you will still control in five years.

Source: https://useqr.app/qr-codes-on/product-packaging · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

| Typical scan distance | **20–30 cm** |
|---|---|
| Minimum code width | **2–3 cm** |
| Error correction | **Q** |

## Permanence is the real design constraint

A poster lives six weeks. A tin of paint lives ten years in a shed. Every URL decision should
assume the longer horizon:

- Point at a **stable path on your own domain**, never a campaign URL you will delete.
- Never use a third-party shortener. When it dies, every unit already in the world dies with it.
- Keep a permanent redirect for that path in your infrastructure documentation, so nobody
  removes it during a site rebuild in 2031.

## Curvature and creases

On a cylinder, keep the code within about a third of the circumference. Never place it
across a crease, a glue flap or a perforation. Keep 5 mm clear of any fold.

## Substrate and varnish

- Uncoated board spreads ink — keep the payload short so modules stay large.
- **Matt** varnish over the code; gloss and spot UV reflect.
- On metallised board, print a white flood under the code. Metallic substrates have no
  reliable luminance contrast.
- Corrugated flute direction affects fine detail; run modules across the flutes, not along.

## Where regulation is going

[GS1 Digital Link](/glossary/gs1-digital-link) lets one code serve both the till and the
consumer, carrying GTIN, batch and expiry in the URL path. The retail **Sunrise 2027**
migration and the **EU Digital Product Passport** are both pushing packaging toward exactly
this. If you are redesigning packaging now, encode a Digital Link rather than a bare URL.

## Try it

- https://useqr.app/url
- https://useqr.app/size-calculator
- https://useqr.app/validate
