QR Code Error Correction Levels Explained: L, M, Q, H
Every QR code carries its own repair data, which is why a code can still scan even after part of it is torn, smudged, glared-out, or covered by a logo. How much damage it can survive is a choice you make up front — QR Mint calls it "Error correction" in the options panel, with four levels: L, M, Q, and H. Picking the right one is a real tradeoff, not a "more is always better" setting, so here's what each level actually buys you.
The four levels, in plain terms
- L (Low) — recovers from about 7% damage. Produces the smallest, least dense code for a given amount of content. Good for anything shown on a clean screen, where there's no risk of physical damage, glare, or a logo overlay.
- M (Medium) — recovers from about 15% damage. QR Mint's default. A sensible middle ground for most everyday uses — printed flyers, packaging, presentation slides — without inflating the code more than necessary.
- Q (Quartile) — recovers from about 25% damage. Worth using for anything that'll be printed small, laminated, handled a lot, or exposed to weather and wear, like a sticker on equipment or a menu that gets wiped down daily.
- H (High) — recovers from about 30% damage. The level to reach for if you're placing a logo or icon over part of the code, since that overlay is effectively "damage" the decoder needs to correct around, or if the print quality is genuinely uncertain.
Why not just always use the highest level?
Because error correction isn't free — it's extra data appended alongside your actual content, and QR codes have a fixed set of sizes (versions) to hold everything. Going from L to H roughly quadruples the amount of built-in redundancy, which pushes the encoder toward a larger version with more modules for the exact same content. A denser code means smaller individual modules at a given print size, and smaller modules are themselves harder for a camera to resolve cleanly, especially from a distance or on a cheap printer. In other words, cranking error correction all the way up to defend against damage can, past a point, make the code more fragile in a different way — by making each module tinier and more easily blurred together. The right level depends on the real risk your code faces, not the theoretical maximum.
A quick way to decide
Ask two questions: where will this code live, and will anything ever sit on top of it? A code that only ever appears on a screen — a slide, a website, a digital menu — has essentially zero physical risk, so L or M keeps it as simple (and fast to scan) as possible. A code headed for print, especially something small like a business card or a product label, benefits from M or Q simply because ink, paper texture, and handling introduce real-world imperfections a screen never sees. And any code with a logo, icon, or decorative element placed over the middle of it needs H — without enough error correction, that overlay is exactly the kind of "damage" the code can't recover from.
Seeing the size difference yourself
The clearest way to understand the tradeoff is to watch it happen: type the same content into QR Mint's generator and switch the error-correction level from L to H. The "modules" figure in the QR code's metadata line jumps as the level rises, and at a fixed pixel size, you'll see the individual squares visibly shrink. For short content like a URL the difference is often invisible in practice; for something longer, like a full vCard contact card, it becomes obvious fast — which is one more reason to keep contact-card and text QR codes reasonably concise.