What “error correction” means
A QR code does not just store your URL or text as a grid of squares. Alongside the actual data, the encoder writes extra error-correction codewords using a scheme called Reed-Solomon — the same family of math that protects CDs, DVDs, and deep-space transmissions. The redundancy is baked directly into the symbol, so no network, app, or lookup is involved when you scan.
The practical effect: a reader can reconstruct the original message even when a chunk of the modules is missing or misread. If the damage stays within the budget for the chosen level, the decode is exact — you get the right URL, not a corrupted one. Past that budget, the scan simply fails rather than returning garbage. That all-or-nothing behavior is why picking enough headroom up front matters.
The four levels (L, M, Q, H)
ISO/IEC 18004 defines four error-correction levels. Each one names the share of the symbol’s codewords that can be lost while the code still decodes:
- L (Low) — about 7% recovery. The most data fits in the smallest grid, but the least margin for damage.
- M (Medium) — about 15% recovery. The common default; a sensible balance for clean screen or print use.
- Q (Quartile) — about 25% recovery. Good for codes that will be printed small or used in rough conditions.
- H (High) — about 30% recovery. The most robust, and the level you need once a logo sits in the middle.
Those percentages are the maximum fraction of codewords the reader can recover, not a promise about any specific scratch. Damage that lands on the three big finder patterns in the corners or the timing rows is more harmful than the same area elsewhere, because the scanner needs those to locate and align the grid at all.
The trade-off: redundancy costs space
Robustness is not free. Error-correction codewords take up room in the symbol just like your data does. Hold the content fixed and step from L to H, and the encoder needs more codewords overall — which can bump the code up to a higher version (a larger grid with more modules). More modules in the same printed footprint means each module is physically smaller, so the code is denser and demands a sharper camera, better focus, or a larger print to read.
So the levels pull in two directions. Higher error correction tolerates more damage but produces a denser code; lower error correction stays sparse and easy to scan up close but shatters with the first real-world insult. The right answer depends on how the code will be used, not on always maxing the level.
Why a logo forces level H
Dropping a logo in the center of a QR code is exactly the kind of “damage” error correction was built to absorb — the logo covers modules, and the reader reconstructs them from the redundant codewords. But it only works if there is enough headroom. A center logo eats into the recovery budget, so it effectively requires level H (~30%) to leave room for the rest of the symbol to be rebuilt.
Even at H, the math has a ceiling. As a practical safe maximum, keep the logo under about 25% of the code’s area. That stays inside the ~30% budget with margin to spare for the dirt, glare, or print imperfection the code will also face in the wild — the logo is not the only thing competing for that headroom. Push the logo larger and you cover more critical modules than the level can recover, and the scan fails. Crucially, you should never cover any of the three corner finder patterns; those are not protected the way the data region is.
On the QR code generator you choose the level and drop in a logo, and the live scannability check enforces this budget for you: it flags when a logo needs level H, warns when the logo grows past the safe area, fails it outright once the logo exceeds what the chosen level can recover, and — the hard gate — runs a real in-browser decode so a code that will not actually scan can never pass as if it would.
Choosing a level
A few rules of thumb that cover almost every case:
- On-screen, short content, no logo:
Mis plenty. The display is clean and crisp, so the default balance wins. - Printed small, outdoors, or on a curved/handled surface: step up to
Qto tolerate smudges, folds, and partial cover. - Any code with a center logo: use
H, and keep the logo under ~25% of the area. - Long content already pushing a dense code: resist jumping straight to H. The extra redundancy may force a larger version that makes the modules too small to read — sometimes M plus a bigger print beats H in a fixed footprint.
Error correction is one of several things that decide whether a code reads. Contrast, quiet zone, and print size matter just as much — for the full picture of what goes wrong and how to fix it, see why won’t my QR code scan?
References
This tool’s QR generation and scannability checks are grounded in the following standards and primary sources.
- ISO/IEC 18004 — QR Code bar code symbology specification — ISO/IEC — the governing QR standard
- Error Correction Feature — DENSO WAVE — the QR inventor on Reed-Solomon levels (L/M/Q/H)
Spotted an error? Let us know — reader corrections are the best review this site gets.