QR Codes Explained: Error Correction, Sizes & Best Practices
QR codes look simple, but a few details decide whether yours scans reliably or frustrates everyone who points a camera at it. Here's what's actually happening inside the square, and how to make one that works on a business card, a poster, or a packaging label.
Static vs. dynamic — and why codes "expire"
A static QR code encodes your data directly in the pattern. If it holds a URL, that URL is literally drawn into the squares; it will work forever and can never be turned off by anyone. A dynamic QR code instead encodes a short redirect link owned by a third-party service, which then forwards to your real destination. Dynamic codes let you edit the destination and track scans — but if that service shuts down, changes its pricing, or you stop paying, every code you printed stops working. This is why people complain that "QR codes expire": it's the redirect service expiring, not the code.
For anything you print and can't easily reissue, prefer a static code. The PixelTools QR generator produces static codes with no account, no shortener, and no tracking — so they never expire.
Error correction (L, M, Q, H)
QR codes include redundant data so they still scan when partially damaged or dirty. You choose how much:
- L — 7% recovery. Maximum data capacity; use for clean digital displays.
- M — 15% recovery. The sensible default for most uses.
- Q — 25% recovery. Good for print that may get scuffed.
- H — 30% recovery. Use when placing a logo over the center, or for small/outdoor labels.
Higher correction means a denser code for the same data, so don't default to H unnecessarily — it makes the pattern harder to scan when small. The trade-off is real: more resilience, less capacity.
Sizing for print
The rule of thumb is a 10:1 distance-to-size ratio: a code meant to be scanned from 1 meter away should be at least 10 cm across. For a business card scanned at ~30 cm, about 2 cm (roughly 0.8 inch) is the practical minimum. Always include a "quiet zone" — clear margin — of at least four module widths around the code, or scanners may fail to detect its boundaries.
PNG or SVG?
Export PNG for digital use — websites, slide decks, documents — where you know the display size. Export SVG for print: it's vector, so it scales to any size without becoming blurry, which matters for posters and packaging. Our generator offers both, plus custom foreground and background colors.
Best practices that prevent failed scans
- Keep strong contrast. Dark code on a light background scans best; avoid light-on-dark and low-contrast color pairs.
- Don't over-stylize. Heavy gradients, rounded "dots," and busy backgrounds reduce reliability.
- Test before you print. Scan with multiple phones and both the native camera and a dedicated app.
- Add a logo only with high error correction. Keep it under ~20% of the code area and use level Q or H.
Ready to make one? Open the QR code generator — it's free, runs entirely in your browser, and the codes never expire.