A QR code can lose nearly a third of itself and still scan. That is not a happy accident — it is the reason the format won.
The four levels
| Level | Recovers | Use for |
|---|---|---|
| L (Low) | ~7% | Clean screens, maximum data in minimum size |
| M (Medium) | ~15% | General purpose — the usual default |
| Q (Quartile) | ~25% | Print, packaging, anything handled |
| H (High) | ~30% | Logo overlays, outdoor signage, harsh conditions |
The recovery figure is the proportion of the code's modules that can be missing or wrong. It is not a proportion of the area you may cover with something else — a logo in the middle is the easy case because the damage is contiguous and central; the same area removed from a corner containing a position marker is fatal.
Why higher correction makes a denser code
Error correction is redundancy, and redundancy is extra data. The same URL at level H needs noticeably more modules than at level L, so at a fixed physical size each module is smaller.
That is a real trade. Smaller modules are harder for a camera to resolve, so a level H code printed small can scan worse than a level M code of the same dimensions, despite carrying more correction. The correction protects against damage; it does not protect against being too small to read.
Rule of thumb: raise the correction level and the physical size together, or you have swapped one failure mode for another.
How much data fits
Capacity depends on what you encode. QR has separate modes for digits, alphanumeric, bytes and Kanji, and the numeric mode is far more efficient.
| Content | At level L | At level H |
|---|---|---|
| Numeric digits | 7,089 | 3,057 |
| Alphanumeric (caps, digits, a few symbols) | 4,296 | 1,852 |
| Bytes (any URL, mixed case) | 2,953 | 1,273 |
| Kanji | 1,817 | 784 |
Those are the theoretical maxima at the largest version, and they are far more than anything practical. A code holding 2,000 characters is a wall of modules that no phone will read at normal distance. In practice keep URLs under about 100 characters — which is an argument for shortening a long tracking URL before encoding it rather than after.
Why codes fail to scan
Almost all failures are one of six things, and none of them is the error correction level.
- No quiet zone. The specification requires a clear margin of four modules on every side. Designers crop it constantly and it is the single most common cause of failure.
- Inverted colours. Most scanners expect dark modules on a light background. Light-on-dark works on some readers and not others.
- Insufficient contrast. A tasteful pale grey code on white does not scan. Treat it like text: it needs real contrast.
- Too small for the distance. The usual guide is that the code should be about a tenth of the scanning distance — a code read from two metres needs to be roughly 20cm across.
- A logo that is too large or off-centre. Stay under about 25% of the area even at level H, and keep it central.
- Damaged position markers. The three big squares in the corners are how a scanner finds and orients the code. Nothing may cover them, at any correction level.
Static versus dynamic
A QR code encodes a string and nothing else. There is no such thing as a code you can "edit" — the data is the pattern.
A dynamic QR code is a static code pointing at a short redirect URL you control. Change the redirect target and the code appears to change. That is genuinely useful for print runs, and it comes with a dependency: if that redirect service disappears or starts charging, every code you printed stops working.
For anything permanent — a plaque, packaging, a business card — encode a URL on a domain you own. A redirect on your own site gives you the same editability without the dependency. The QR Code Generator produces static codes on your device, so the destination is never logged by anyone in between.
Frequently asked questions
What error correction level should I use?
L or M for screen display, Q or H for print, packaging or signage. Level H is what allows a logo overlay. Remember that higher correction means a denser code, so raise the physical size along with the level.
How much of a QR code can be covered?
Up to about 30% of the modules at level H, but placement matters more than area. A central logo is the easy case; the three position markers in the corners cannot be covered at any level, because that is how a scanner finds and orients the code.
Why will my QR code not scan?
Most often a missing quiet zone — the specification needs four clear modules on every side and designers crop it routinely. After that: inverted colours, low contrast, being too small for the reading distance, or an oversized logo.
How big should a QR code be?
Roughly a tenth of the scanning distance. A code read from arm's length needs about 3cm; one read from two metres needs about 20cm. Higher error correction increases module density, so a level H code needs to be physically larger than a level L one carrying the same data.
Can I edit a QR code after printing it?
Not the code itself — the data is the pattern. What people call a dynamic QR code is a static code pointing at a redirect you control. That works well, but if the redirect service disappears, every printed code stops working. Use a domain you own.
How much data can a QR code hold?
Up to 2,953 bytes at the largest version and lowest correction, but that produces a code no phone will read at normal distance. Keep URLs under about 100 characters in practice, and shorten long tracking links before encoding rather than after.