How-toApril 24, 2026·6 min read

QR Error Correction Levels — What L, M, Q, H Actually Mean

QR codes can survive being smudged, partly covered by a logo, or printed on cheap paper. The mechanism that makes that possible is error correction. Here's how the four levels actually work — and what each one means for your print quality in practice.

The four levels

QR codes use Reed-Solomon error correction. Extra parity bytes get encoded alongside the data, and they let the decoder reconstruct missing or damaged modules. There are four levels: L (low) — recovers up to 7% of the code's data M (medium) — recovers up to 15% Q (quartile) — recovers up to 25% H (high) — recovers up to 30% The more correction you ask for, the more parity bytes you need, which means the QR grid has to grow to fit the same data. So as error correction goes up, the code gets visually denser for the same input.

What 'recovers X%' actually means

It means up to X% of the total code's data can be damaged or obscured and the decoder can still reconstruct the original message. The damage can come from: • A logo in the center (deliberate occlusion) • A coffee stain or smudge • A torn corner or worn edge • Faint print where modules are below the read threshold • A camera that can't quite resolve modules at extreme distance But not all damage is equal. Random scattered damage is easier to recover from than damage concentrated in one area. Those recovery percentages assume relatively uniform distribution. A code with 15% damage all in one quadrant may still fail to recover at level M, even though the spec says "up to 15%."

When to pick each level

Level L (7%) — only when you need maximum data capacity in the smallest physical size, and you can guarantee high-quality print and perfect scan conditions. Rare in real-world use. Tradeshow demos and lab settings only. Level M (15%) — the default for most online QR generators. A decent balance between data capacity and resilience. Fine for digital-only QRs that won't ever be printed. Level Q (25%) — good for printed material that may face moderate wear: business cards, posters, packaging. Handles small logos (10-15% of area) comfortably. Level H (30%)strongly recommended for any printed QR with a centered logo, for outdoor signage, for packaging that may face wear and tear, and for any code printed at small sizes where module sharpness is uncertain. The default on Build QR. Rule of thumb: when in doubt, use H. The visual density penalty is usually worth the durability gain.

Error correction and logos: the relationship

A centered logo on a QR code is really just "controlled damage" — the modules under the logo are unreadable, so the decoder treats them as missing data and reconstructs them from the parity bytes. As long as the logo area stays inside the error correction budget, the code scans normally. At level H (30% recovery), a centered logo can cover up to ~25% of the code area with a 5% safety margin. Build QR's defaults stay inside this envelope, which is why branded QRs with logos still scan reliably. Where this breaks: logos placed outside the center (on the finder patterns or corners). The finder patterns are structural — error correction does not protect them. Cover one, and the scanner can't orient the code at all. Always center logos. Never decorate corners.

Does higher error correction make QRs scan slower?

Barely. The decoder runs the same Reed-Solomon recovery either way, and the work is proportional to the data size, which only scales slightly with the parity bytes. In practice, the difference between level L and level H scan latency on a modern phone is single-digit milliseconds — completely invisible to the user. What *does* visibly affect scan speed: code density (very large grids take longer to sample), camera resolution at distance, and lighting quality. Error correction level isn't in the top three factors.

FAQ

What's the default error correction level on Build QR?
We default to high (H, 30% recovery). It handles centered logos comfortably and survives most print imperfections. You can override per code if you need lower visual density.
Does higher error correction mean the QR holds less data?
Yes — more parity bytes leave less room for data within a given grid size. To compensate, the generator scales the grid up. So data capacity stays the same, but the code gets visually denser.
Can I tell from looking which error correction level a QR uses?
Indirectly. Higher error correction means denser codes for the same data. But you can also decode the format-info modules near the corners of the QR — any QR-reader app will reveal this.
Should I always use level H?
For printed material, yes — the resilience is worth the density. For digital-only QRs (displayed on a screen for a brief scan), level M is fine and visually cleaner.

Related reading & tools

Generate a print-ready QR

Free generator defaults to high error correction. Handles logos, brand colors, and outdoor signage out of the box.

Start free