QR code error correction levels explained

What L, M, Q, and H actually recover, what you pay for each one in density, and which level suits a sticker, a poster, or a code with a logo on it.

Short answerQR codes have four error correction levels: L recovers about 7% of the code, M about 15%, Q about 25%, and H about 30%. A higher level makes the code survive more dirt, damage, or covering, but it also adds modules, so the same link produces a denser code.

The four levels

Every QR code is made at one of four error correction levels, chosen when the code is generated and recorded inside the symbol so the scanner knows which one to expect. The percentages describe how much of the code’s data can be lost and still rebuilt exactly.

Error correction levels and what they tolerate
LevelRecoverableBest for
L (Low)about 7%Screens and clean, controlled print where space is tight.
M (Medium)about 15%General print: flyers, business cards, documents.
Q (Quartile)about 25%Print that gets handled, rained on, or scuffed; small logos.
H (High)about 30%Harsh environments, outdoor labels, larger logo overlays.

The figures are approximate because they are measured in codewords — the 8-bit blocks the data is split into — not in visible area. A smear that clips a few modules each from many codewords can do more harm than a clean hole of the same size. The mechanics behind this are covered in how QR codes work; what matters here is the practical behaviour.

What “recover” means in practice

Error correction is not a fuzzy best guess. If the damage stays within the level’s budget, the scanner reconstructs the original data exactly, byte for byte. If the damage exceeds it, the scan fails — it does not return a slightly wrong link. A code either reads correctly or does not read.

  • Physical damage. Torn corners on a poster, a scratched label on a crate, a crease through a folded leaflet.
  • Dirt and glare. Grease on a table tent, water spots on a window sticker, a reflection from laminated card that washes out part of the pattern.
  • Deliberate covering. A logo placed over the centre is, to the scanner, damage. It only works because error correction rebuilds the modules underneath — see QR codes with a logo.
  • Print defects. Ink spread on absorbent paper or a low-resolution print that merges neighbouring modules.

Error correction cannot fix structural damage. If one of the three large corner squares is covered, or the blank margin around the code is cropped away, the scanner may never find the code in the first place, whatever the level.

The trade-off: protection costs density

The redundancy that makes recovery possible has to be stored somewhere, and it is stored in the same grid as your link. At level H roughly a third of the codewords are spent on correction rather than data. For the same URL, a higher level therefore pushes the code to a larger version: more modules across, each one smaller at a given printed size.

Smaller modules are harder to read. They need sharper print, better light, a steadier hand, and a closer camera. So past a certain point, raising the level makes a code less reliable, not more: you have protected it against damage while making it fragile against distance and blur. How much data each version holds at each level is set out in how much data a QR code can hold.

The fix for an overly dense code is rarely a lower level alone. A shorter link reduces the version more than any change of level, and printing larger keeps the modules a readable size — see QR code size for printing.

Which level to use

  • L — only when the code will be shown on a screen or printed cleanly and kept clean, and you need the coarsest possible grid for a long payload. Codes in slides and presentations can get away with it.
  • M — a sensible default for most print. Business cards, brochures, letters, and indoor signage.
  • Q — anything that will be touched, folded, or exposed: restaurant menus and table tents, product packaging, shop windows, and codes with a small logo.
  • H — outdoor signage, industrial and shipping labels, and designs that deliberately cover a large part of the code. Keep the link short so the version stays low.

Whatever level you pick, test the printed result on more than one phone, at the distance people will actually stand. If it is slow to read, the guide to QR codes not scanning lists the usual causes in order of likelihood.

How this generator chooses

There is no level selector on this site. Codes are made at level Q, which tolerates about a quarter of the code being lost — enough for handled print and everyday wear. If a link is long enough that a level-Q code would go above version 12 (65 × 65 modules), the generator drops to level M instead, so the modules stay larger and the code stays readable at ordinary print sizes. Adding a logo is the exception: the code then moves to level H, because the logo deliberately covers part of it.

The version and module count are shown under every code before you download it, so you can see the result of that choice. Without a logo, the full correction budget is left for real-world damage; with one, the logo is kept to about 12% of the symbol so a margin remains. See custom QR codes for the logo and colour options.

Make a code and check its version and module count:Generate a QR code

Related questions

For most printed codes, M or Q. M keeps the code compact for clean indoor print; Q adds protection for codes that will be handled or exposed. H is worth it only for harsh conditions or large logo overlays, and only with a short link.

No. H survives more damage, but for the same data it produces a denser code with smaller modules, which is harder to read from a distance or in poor light. A clean, undamaged code at a lower level can scan faster than a dense one at H.

The level is stored in the format information next to the corner squares, and some scanner and decoder apps display it. You cannot tell reliably by eye, because the version also depends on how much data is encoded.

Not without regenerating it. The level determines how the whole symbol is built, so a different level means a different pattern, and any printed copies would need to be replaced.