Blog

Tips, tutorials, and insights about online tools

QR Code Error Correction: L, M, Q, H Levels Guide
2026-08-20Keynou Team

QR Code Error Correction: L, M, Q, H Levels Guide

QR code error correction is the reason a QR code still scans when it's smudged, torn, or has a logo slapped in the middle of it. It works by adding redundant data to the code using Reed-Solomon error correction — the same math that keeps CDs readable after scratches. Every QR code carries one of four correction levels, and the level you pick changes how much damage the code can survive, how much data it can hold, and how dense it looks. Get it wrong and your branded code either won't scan or wastes space it didn't need to.

This guide breaks down the four levels, how they trade off, and which one to use for each situation.

The Four QR Code Error Correction Levels

QR codes support four error correction levels, each recovering a different percentage of damaged data:

<svg viewBox="0 0 800 380" xmlns="http://www.w3.org/2000/svg" style="width:100%;max-width:800px;margin:24px auto;display:block">
  <rect x="0" y="0" width="800" height="380" fill="#f8fafc" rx="12"/>
  <text x="400" y="35" fill="#1e293b" font-size="17" font-family="sans-serif" text-anchor="middle" font-weight="bold">Error Correction Levels: Data Recovery Capacity</text>
  <line x1="80" y1="320" x2="740" y2="320" stroke="#cbd5e1" stroke-width="2"/>
  <line x1="80" y1="70" x2="80" y2="320" stroke="#cbd5e1" stroke-width="2"/>
  <text x="400" y="355" fill="#64748b" font-size="12" font-family="sans-serif" text-anchor="middle">Correction Level</text>
  <text x="35" y="195" fill="#64748b" font-size="12" font-family="sans-serif" text-anchor="middle" transform="rotate(-90 35 195)">Recovery Capacity</text>
  <rect x="140" y="298" width="100" height="22" fill="#94a3b8" rx="4"/>
  <text x="190" y="293" fill="#1e293b" font-size="13" font-family="sans-serif" text-anchor="middle" font-weight="bold">L</text>
  <text x="190" y="335" fill="#64748b" font-size="11" font-family="sans-serif" text-anchor="middle">7%</text>
  <rect x="320" y="265" width="100" height="55" fill="#f59e0b" rx="4"/>
  <text x="370" y="260" fill="#1e293b" font-size="13" font-family="sans-serif" text-anchor="middle" font-weight="bold">M</text>
  <text x="370" y="335" fill="#64748b" font-size="11" font-family="sans-serif" text-anchor="middle">15%</text>
  <rect x="500" y="225" width="100" height="95" fill="#3b82f6" rx="4"/>
  <text x="550" y="220" fill="#1e293b" font-size="13" font-family="sans-serif" text-anchor="middle" font-weight="bold">Q</text>
  <text x="550" y="335" fill="#64748b" font-size="11" font-family="sans-serif" text-anchor="middle">25%</text>
  <rect x="640" y="185" width="100" height="135" fill="#10b981" rx="4"/>
  <text x="690" y="180" fill="#1e293b" font-size="13" font-family="sans-serif" text-anchor="middle" font-weight="bold">H</text>
  <text x="690" y="335" fill="#64748b" font-size="11" font-family="sans-serif" text-anchor="middle">30%</text>
</svg>

Level L — Low (7% recovery)

Recovers up to 7% of damaged data. This level packs the most data into the smallest code because it adds the least redundancy. Use it for clean, controlled environments where the code won't be touched — a digital screen, a protected display case, or a short-lived print piece.

Level M — Medium (15% recovery)

The default for most generators, including many phone camera apps. Recovers 15% of data, which handles light smudging and minor wear. Good for general-purpose print like flyers, posters, and menus that won't see heavy abuse.

Level Q — Quartile (25% recovery)

Recovers 25% of data. A solid choice for outdoor signage, packaging that gets handled, and codes placed where dirt or partial obstruction is likely. It's the middle ground between durability and data capacity.

Level H — High (30% recovery)

Recovers 30% of data — the maximum. This is the level you need when adding a logo or brand mark to the center of the code, because the logo covers modules that the redundancy can rebuild. Use H for any branded QR code with a logo, stickers, and codes printed on rough surfaces.

How Reed-Solomon Encoding Works

QR codes use Reed-Solomon error correction, the same algorithm used in CDs, DVDs, and QR data transmission. It adds mathematical redundancy — extra modules computed from the original data — so the scanner can reconstruct missing or corrupted modules without needing them to be physically present.

The higher the level, the more redundant modules are added, and the more data the code can lose while still decoding correctly. The tradeoff is straightforward: more correction means less room for actual data, which means a denser code for the same payload.

The Capacity Tradeoff

Error correction isn't free. Every level above L reduces the amount of usable data the code can hold at a given version (size). A version 10 QR code holds roughly 271 bytes at level L but only 174 bytes at level H.

Level Recovery Relative Capacity Best Use
L 7% Highest Clean, digital, short-lived
M 15% High General print
Q 25% Medium Outdoor, handled packaging
H 30% Lowest Logos, stickers, rough surfaces

If your payload is large (a long URL or a full vCard) and you need level H, the code may jump to a bigger version with more modules — which means it needs to be printed larger to stay scannable. See our QR code size guide for minimum dimensions.

Choosing the Right Error Correction Level

Use this decision flow:

  • Adding a logo or overlay? Use H. Always.
  • Outdoor or rough handling? Use Q.
  • Standard print (flyers, menus, cards)? Use M.
  • Digital screen, clean environment, max data? Use L.

Error Correction and Logos

When you place a logo in the center of a QR code, you're physically covering modules. Without enough redundancy, the scanner can't reconstruct them and the code fails. Level H reserves 30% of the code for recovery, which is enough to cover a logo sized up to about 30% of the code area.

Keep the logo under 30% of the total QR area, leave the required quiet zone intact, and always test-scan after adding the logo. Our QR code generator lets you set the correction level and add a logo in the same panel.

Common Mistakes

  • Using level L with a logo — the code won't scan
  • Defaulting to H for everything — wastes capacity and makes codes denser than needed
  • Ignoring the quiet zone — even H can't fix a code with no margin
  • Not testing after printing — print can shift contrast and introduce errors
  • Logo too large — covers more than 30% and exceeds H's recovery capacity

For the technical specification behind these levels, the ISO/IEC 18004 standard defines Reed-Solomon block sizes for every QR version and correction level.

Verified DR - Verified Domain Rating for keynou.com
FlowDrive