QR Code Error Correction Levels Explained: Which One Should You Use?
L, M, Q, H — what those QR code error correction letters actually mean, and how to pick the right one for your design.
Every QR code you generate carries a built-in safety net: a chunk of the data is reserved for error correction, the redundancy that lets a scanner read your code even when part of it is dirty, scratched, or covered by a logo. The QR specification defines four levels of error correction, and choosing among them is one of the few decisions that actually changes how reliable your code is in the wild.
This article unpacks the four levels — L, M, Q, and H — explains how much damage each can survive, and gives you a clear recipe for picking the right one. If you just want a quick answer: QR This!uses level H whenever you embed a center logo, which is what most modern QR generators do.
What error correction actually is
A QR code stores your data — typically a URL — using a mathematical scheme called Reed–Solomon coding. Reed–Solomon was invented in 1960 and is also what protects data on CDs, DVDs, and deep-space probe transmissions. The idea is simple: along with your actual payload, the encoder writes extra "parity" symbols that let a decoder reconstruct the original data even if some of the symbols are missing or wrong.
In a QR code, more parity means a denser-looking image (more black and white modules per unit of data), and a higher tolerance for damage. There's a direct trade-off: you get more resilience at the cost of either a larger code or a shorter URL.
The four levels at a glance
- Level L (low): can recover from about 7% damage.
- Level M (medium): about 15%. This is the spec's default and the right choice for most everyday QR codes.
- Level Q (quartile): about 25%.
- Level H (high): about 30%.
"Damage" means missing or unreadable modules — including scratches, water damage, dirt, glare, or pixels intentionally covered by a logo. So if you're placing a logo in the center, you're not really encountering "damage"; you're choosing to obscure part of the code, and you need a level that can absorb the loss.
How to pick a level
Use this as a working rule:
- L:only when you're cramming a long URL into a tiny space and can guarantee a clean print and scan environment (think: glossy magazine ads, controlled lighting). Most people should not use L.
- M: the default. Use it for typical website QR codes that will be printed at normal sizes on clean stock without a logo.
- Q:use it when the code will live somewhere a little harsh — outdoors, on packaging that gets handled, on stickers — but you don't need a logo.
- H: use it any time you embed a center logo, or whenever the code will face hostile conditions (industrial environments, paint, water, scratches, low contrast prints).
Why higher correction makes the code "denser"
QR codes come in 40 numbered versions. Version 1 is a 21×21 grid; version 40 is 177×177. The scanner picks a version based on how much data you're encoding plus how much error correction you've asked for.
If you encode a 50-character URL at level L, the QR code might fit into version 3 (29×29). At level H, the same URL might require version 5 (37×37) — meaning the code has more, smaller modules. That's why high-correction codes look "busier" than low-correction codes for the same payload. Practically, this means:
- Print larger.Smaller modules need a higher print DPI to remain crisp. If you're printing on a thermal receipt printer, level H plus a long URL is a recipe for a blurry, unreadable code.
- Shorten your URL. Use a short link service or a dedicated subdomain for QR campaigns. Going from
https://example.com/landing/2026-spring-saletohttps://ex.co/springcan drop you several QR versions.
How error correction interacts with logos
QR codes can survive a lot of obscurity, but the redundancy is spread evenly across the code — not concentrated in any one spot. That means a logo placed dead-center is mathematically equivalent to damage in that same area. The trick is to keep the obscured area smallerthan the level's tolerance:
- At level H (~30%), keep the logo at roughly 25–35% of the code's width to leave headroom.
- Use a square or square-ish logo. Long, thin logos waste obscured area horizontally without giving you any branding benefit.
- Always run the code through at least two phones before printing at scale. The QR specification is generous, but real-world scanners (different cameras, different lighting, different OS decoders) vary in how aggressive their error correction is.
What QR This! uses
QR This!generates codes at the spec's default level (M) for plain QR codes and switches to level H whenever you upload a center logo. We also automatically constrain the logo to about 35% of the code's width so you can't accidentally exceed what level H can recover. If you have a very long URL, consider shortening it before generating — the more data you cram in, the smaller each module becomes and the harder the code is to scan from a distance.
Quick FAQ
Does a higher level slow down the scanner? No. Decoders read all four levels with effectively identical speed.
Can I change the level after generating? No — the level is encoded into the QR matrix itself. You have to regenerate the code.
Do scanners tell me which level was used?Most consumer apps don't. If you want to inspect a QR code in detail, command-line tools like zbar or qrcode-decoder will report the version and error correction level.
Bottom line: use level H when you brand the code with a logo, level M for everything else, and never make the code so dense that it can't be printed cleanly. The math will do the rest.