Guide

QR Code Error Correction Levels Explained

What L, M, Q, and H actually mean and which one you should be using

Every QR code you've ever scanned was built with one of four error correction levels baked into its design, even though almost nobody notices or thinks about it because it just works invisibly in the background. These levels, labeled L, M, Q, and H, determine how much damage, dirt, or obstruction (like a center logo) a code can withstand and still scan correctly. Understanding what each level actually does helps you make a smarter choice when generating your own codes, especially if you're adding a logo, printing for outdoor use, or trying to keep a densely packed code as simple as possible. This guide breaks down exactly what each level means in practical terms and when to choose one over another.

What error correction actually means in a QR code

Error correction in a QR code works by deliberately encoding extra, redundant data alongside the primary content, using a mathematical technique called Reed-Solomon coding, the same general approach used in technologies like CDs, DVDs, and satellite transmissions to recover data despite scratches or signal interference. This redundant data isn't a backup copy sitting somewhere separate, it's mathematically woven throughout the code such that even if a chunk of the pattern is missing or misread, the original message can still be reconstructed from what remains.

This matters because real-world QR codes rarely stay in pristine condition, they get printed on curved bottles, scuffed on shipping labels, partially covered by a decorative logo, or faded by sunlight on an outdoor sign. Without error correction, any of these common real-world scenarios would render a code permanently unreadable the moment even a small portion became damaged or obscured, which would make QR codes far less practical for everyday physical-world use.

The tradeoff for this resilience is data density, the more error correction data included, the fewer modules remain available for the actual content, meaning a code with maximum error correction needs to be physically larger (more modules) to encode the same amount of information compared to a code with minimal error correction. This is why choosing the right level for your specific situation, rather than blindly picking the highest option, actually matters for producing clean, appropriately sized codes.

Level L: Low, roughly 7% recovery

Level L is the lightest error correction option, capable of recovering the data even if roughly 7% of the code is damaged or unreadable. Because it dedicates the smallest portion of the grid to redundant error-correction data, it allows the maximum possible amount of actual content to be packed into a given physical code size, making it the most space-efficient option.

This level makes sense for QR codes that will remain in clean, controlled conditions and won't have anything overlaid on top of them, such as a code displayed purely on a digital screen, a slide in a presentation, or a code printed indoors on clean paper that won't be exposed to handling, weather, or wear. In these scenarios, the risk of the code becoming partially damaged is low enough that the extra resilience of higher levels isn't worth the added size.

Level L is generally not recommended if you plan to add any kind of logo or decorative element to the center of the code, since even a modestly sized logo can easily exceed the roughly 7% damage tolerance this level provides, resulting in a code that fails to scan reliably despite looking fine visually.

Level M: Medium, roughly 15% recovery

Level M steps up the redundancy to withstand roughly 15% damage or obstruction, striking a reasonable middle ground between data efficiency and resilience. This is commonly used as the default error correction level by many QR code generators specifically because it handles typical everyday wear and tear, minor smudges, slight print imperfections, small scuffs, without requiring an unnecessarily large code.

For general-purpose use cases like a business card, a flyer, or a website link printed on clean but ordinary paper, Level M provides a sensible balance, enough resilience for realistic handling and printing variance without inflating the code's physical size the way higher levels would. Most everyday QR codes that don't have a logo and aren't destined for particularly harsh environments fit comfortably at this level.

Level M can typically accommodate a very small, modest logo or icon in the center, but it's worth test-scanning the result rather than assuming it will work, since the exact tolerance depends on how much of the code's area the logo actually covers and how the specific generator handles the tradeoff.

Level Q: Quartile, roughly 25% recovery

Level Q pushes error correction up to roughly 25% damage tolerance, a meaningful step up from Level M that's specifically useful when you know a code will face more than average wear, obstruction, or environmental exposure. This level is a common choice for codes that will include a moderately sized logo, since it provides comfortable headroom beyond just what the logo itself covers.

Outdoor signage, product packaging that will be handled repeatedly, or codes printed on materials prone to scuffing (like matte cardboard or unfinished wood) benefit from this level's added resilience, since these surfaces are simply more likely to accumulate scratches, dirt, or fading over their working life compared to a clean printed page kept indoors.

The tradeoff is a noticeably denser, more visually complex code compared to Level L or M for the same amount of encoded data, which can matter if you're working with a very small physical printing space, such as a tiny product label, where every extra module reduces how small you can print the code while keeping it scannable.

Level H: High, roughly 30% recovery

Level H is the maximum standard error correction level, capable of recovering the data even with roughly 30% of the code damaged, dirty, or covered. This is the level most commonly recommended when adding a reasonably sized logo to the center of a QR code, since it provides the widest safety margin between the actual space the logo occupies and the code's total damage tolerance.

Harsh environments are the other clear use case for Level H, codes that will be exposed to significant weathering (direct sun, rain, repeated handling in industrial settings, or printed on materials that degrade over time like adhesive labels exposed to UV light) benefit from the maximum resilience this level provides, since the cost of a failed scan in these contexts (a customer unable to access product information, for instance) is usually worth the tradeoff of a slightly larger, denser code.

The downside is that Level H produces the physically largest code for a given amount of data among all four levels, since the largest proportion of modules is dedicated to redundancy rather than content. For codes encoding a long URL or a large block of text, this can result in a noticeably dense, intricate pattern that may be harder to print cleanly at very small sizes.

How to choose the right level for your situation

If you're not adding a logo and the code will live somewhere clean and controlled, like a digital screen or an indoor flyer handled minimally, Level L or M is perfectly sufficient and keeps the code as simple and compact as possible. There's no meaningful benefit to over-engineering error correction for a use case that doesn't actually face damage or obstruction risk.

If you're adding any kind of center logo, whether a simple text mark or a small graphic, lean toward Level Q or H depending on how large that logo is relative to the code, and always test-scan the final result with multiple phones before committing to a print run, since the theoretical damage tolerance percentage doesn't guarantee real-world success without verification.

If the code is destined for outdoor use, industrial environments, or any surface likely to accumulate wear over its working life, choose Level H by default, the modest increase in code size and complexity is a small price for meaningfully better odds the code remains scannable months or years after printing.

Frequently asked questions

Which error correction level should I use if I'm not sure?

Level M is a sensible default for most everyday QR codes without a logo, since it balances reasonable resilience against everyday wear with a compact code size, and it's commonly used as the default setting in many QR code generators for exactly this reason.

Does adding a logo always require the highest error correction level?

Not always, a very small, simple logo might scan fine at Level M or Q depending on how much of the code's area it actually covers, but Level H provides the safest margin if you want confidence without needing to carefully calculate exact logo-to-code area ratios yourself.

Does higher error correction make the QR code harder to scan?

No, higher error correction doesn't make scanning harder under normal conditions, it makes the code more resilient to damage or obstruction. The tradeoff is a physically larger, denser code for the same amount of data, not reduced scan reliability under clean conditions.

Can I change the error correction level after generating a QR code?

Generally no, error correction is built into the code's structure at the time of generation, so changing it means generating a new code from the original data rather than editing an existing one. Most generators let you select the level before creating the code, so it's worth deciding based on your intended use case upfront.

Create your free QR code

Related guides