QR code error correction, explained simply
Every QR code contains backup data alongside the real data. That redundancy is why a code still scans with a scratch across it — and why a logo in the middle does not break it.
Updated October 6, 2026 · 4 min read
The four levels
Error correction is expressed as a percentage of the code that can be lost and reconstructed. The default level is fine for clean digital use; printed codes often benefit from more.
The percentages describe how much of the pattern the scanner may fail to read — because it is covered, scratched, faded or badly lit — while still rebuilding the original data.
- L — about 7% recoverable, smallest code
- M — about 15%, the usual default
- Q — about 25%, good for print
- H — about 30%, best with logos or heavy styling
How the backup data works
A QR code is not a picture of your URL. It is a grid of data words with error-correction words woven in, computed from the data with a checksum-style algorithm. When the scanner reads the grid it can spot which words came out corrupted and solve for the originals.
Crucially, the words are interleaved: consecutive modules come from different words. That is why damage gets spread out. A scratch through a fifth of the code damages a little of many words rather than destroying a few — and each of those words has its own correction allowance to spend.
- Redundancy is calculated from the data, not stored as a copy
- Interleaving turns one big hole into many small, fixable ones
- Recovery is per word — a small amount everywhere is easier than everything in one place
The trade-off
More redundancy means more modules for the same content, so the code gets denser. That is why a heavily styled code needs to be printed larger: you are asking it to carry more backup data.
Density is the thing to watch at print size. The module count rises with the correction level, so a code at H has smaller individual modules than the same content at L printed at the same physical size. Scan distance depends on module size, not on the size of the square.
- Higher level, same content: more modules, smaller each
- Same printed size: the H version needs a closer scan
- Keep the 10:1 size-to-distance rule in mind when you raise the level
Choosing a level
Treat the level as a function of what the code has to survive. On a screen, nothing goes wrong and L is fine. On paper, something usually does.
- L: screen-only, or a code read from a few centimetres under good light
- M: general digital use and clean, large print
- Q: the sensible default for printed codes
- H: logos, heavy styling, curved surfaces, or anywhere the print may scuff
What error correction cannot fix
It recovers missing modules. It cannot recover a code whose modules are the wrong size for the viewing distance, or too low in contrast to be read at all — those are failures of the print, not of the data.
The same applies to a missing quiet zone, a code on a reflective surface, and a code smeared by motion blur. In each case the bits that arrive are confidently wrong, and redundancy has nothing to reconstruct from.
- Too small or too far: a resolution problem, not a redundancy problem
- Too little contrast: the scanner reads the wrong modules
- No quiet zone: the scanner cannot find the code in the first place
- Blur or glare: raising the level does not help
Frequently asked questions
Which level should I use for print?
Does error correction make a code harder to scan?
Can error correction fix a badly damaged code?
Does a higher level make the code bigger?
Which level is best with a logo?
Can I change the level after printing?
Keep reading
Ready to create one?
Dynamic codes are editable forever from €3/month.
Create your first dynamic QR code
Free to start. One code, editable forever, with scan tracking from the first scan.