Choosing an error level
QR codes come in four error correction levels: L, M, Q and H. Most generators pick one for you. When you are chasing blank space, this single choice matters more than anything else.
What the level buys you
A QR code survives being partly covered or dirty because it carries Reed-Solomon recovery bytes alongside the payload. A higher level means more recovery bytes, and tolerance for rougher conditions.
| Level | Recovers | Capacity at version 5 |
|---|---|---|
| L | ~7% | 154 chars |
| M | ~15% | 122 chars |
| Q | ~25% | 87 chars |
| H | ~30% | 64 chars |
For blank space it works in reverse
Recovery bytes are computed by the algorithm, so you cannot choose them, and the mask-cancelling trick cannot reach them. Raising the level means growing the part you are not allowed to empty.
| Level | Black | Noise tolerance |
|---|---|---|
| L | 15% | Low |
| M | 21% | Medium |
| Q | 32% | High |
| H | 40% | Very high |
Even level H lands at 40 percent, still below the 47 percent of an ordinary code. If you want stability without giving up the look entirely, the middle two rows are where to sit.
Picking one
Screens only: L
Images sent over chat, codes embedded in a web page, slides in a talk. The display is bright and sharp, L is plenty, and you get the most blank space.
Not sure: M
M is the sensible default. Around 20 percent black still reads as clearly empty to the eye, and it survives ordinary lighting.
Anything printed: Q or higher
Business cards, stickers, posters. Ink spread, paper texture, folds and lighting all vary, and once it is printed you cannot fix it.
Outdoors or rough handling: H
Signage, vehicle wraps, equipment tags. If this is your case, an ordinary QR code may simply be the better tool.
The popular look of a logo dropped into the middle effectively requires level H, because whatever the logo covers counts as damage. Maximising blank space and overlaying a logo draw from the same budget, so doing both is hard.
A higher level does not always mean a bigger code
Common misconception. If your payload is short, the next level often fits inside the same version, so the code stays the same size and only gets a little denser. Switch levels in the tool and watch whether the version number changes.