← Back to blog
Β·5 min read

QR Code Error Correction Levels Explained (L, M, Q, H)

What L, M, Q, and H actually mean β€” when to use each, how they affect code size, and why error correction lets you embed a logo.

technicaleducationbest-practices

Every QR code generator asks you to pick an error correction level: L, M, Q, or H. Most people pick whatever is highlighted by default and move on. That's usually fine β€” but understanding what's actually going on helps you avoid a few common failures, especially when you want to embed a logo or print on something that gets dirty.

What error correction actually does

Error correction adds redundancy to the QR code. The Reed–Solomon algorithm encodes your data with extra "parity" modules (the black/white squares) so that if part of the code gets corrupted β€” scratched, smudged, partially covered β€” the scanner can still recover the original content.

The four levels correspond to how much of the code can be unreadable before the scan fails:

Level Damage tolerated Roughly
L (Low) ~7% One small smudge
M (Medium) ~15% Default for most cases
Q (Quartile) ~25% Outdoor signage, stickers
H (High) ~30% Logo embedded, harsh conditions

Higher levels = more redundancy = a denser-looking code with the same content.

The tradeoff: density vs durability

Higher error correction means more parity modules, which means a denser QR for the same input. A https://example.com/path URL at level L might fit in a 25Γ—25 module grid; at level H it might need 33Γ—33. That matters for two reasons:

  1. Print size β€” a denser code needs to be printed bigger to scan reliably from the same distance.
  2. Visual feel β€” denser codes look "noisier" and a touch less designed.

So the right level isn't always the highest one. It's the lowest level that survives where the QR will live.

When to pick each

Level L (~7%)

Use only when the QR will live on a clean digital screen β€” a Zoom slide, a website, a PDF that won't be printed. Smallest possible code, least visual weight.

Level M (~15%) β€” the default

The right answer for most printed material under normal conditions: business cards, receipts, indoor posters, packaging, online use. If you have no reason to pick something else, pick M.

Level Q (~25%)

Use when the QR is going outdoors or somewhere physical wear is expected: shop windows, sidewalk signs, parcel labels, sports event lanyards, restaurant table cards that get wiped repeatedly. Q absorbs scratches, fingerprints, condensation, partial fading.

Level H (~30%)

Use when:

  • You're embedding a logo in the center of the QR (the logo covers up real modules; you need extra parity to recover from that)
  • The QR will be printed on a curved surface (a mug, a bottle)
  • The QR will live in a hostile environment (a construction site sign, a marine application)

Don't reach for H without a reason β€” it makes the code visually heavier and potentially harder to scan from a distance because the modules are smaller.

Why H is required for logos

If you put a logo over the center of a QR code, you're physically covering some of the modules. The scanner sees garbled data where the logo is. It compensates by reconstructing the missing data from the parity modules β€” but only if there's enough parity to spare.

A rough rule:

  • Cover ~10% of the code β†’ L might work, M is safe
  • Cover ~15–20% β†’ use Q
  • Cover ~25% β†’ use H, and don't go bigger than this

If your logo would cover more than ~25% of the code, the scan failure rate climbs fast no matter what level you pick. Shrink the logo or move it to a corner instead.

A practical test

Generate the same content at L, M, Q, and H. Print all four at the size you'll actually use. Cover ~10% of each one with a sticker dot in different positions. Try to scan all four with your phone.

You'll see immediately:

  • L fails at the first sticker on a critical area
  • M survives most positions
  • Q and H survive almost anywhere short of covering the position-detection squares (the three big corner blocks β€” those are non-recoverable)

This 5-minute test will tell you exactly which level your specific use case needs.

What error correction can't fix

Three things will kill any QR scan, regardless of level:

  1. Damage to the position-detection patterns β€” the three large nested squares in the corners. These are how scanners orient the code. Cover one, the scan fails.
  2. Insufficient quiet zone β€” the white margin around the code. Without it, scanners can't find the edges. Don't crop into the margin.
  3. Bad contrast β€” light on dark, low-contrast colors, or shiny laminate that reflects glare. Error correction doesn't help if the camera can't even see the modules.

TL;DR

  • Default to M for digital and most printed material
  • Bump to Q for outdoor, harsh, or wear-prone surfaces
  • Use H only if you're embedding a logo or printing on a hostile material
  • Don't use L unless you really need the smallest code and the QR lives on a clean screen
  • Test print + obscure + scan before you commit to a level for a large print run

You can pick the error correction level when generating your code at Qropi β€” the four buttons under "Error Correction" do exactly what we described above.

All posts

Qropi.
About QropiBlogPrivacy PolicyTerms of UseContact
Β© 2025 Qropi. Free forever.