Guides · Business
QR code error correction explained, for real-world printing
Published: May 30, 2026·Reading time: 7 minutes
Use M for ordinary clean print and digital use, H when you are placing a logo over the code or printing in conditions where it will be scuffed, partially covered, or applied to a curved surface, and keep the encoded text short enough that the code stays physically scannable at the size you are printing. The rest of this guide explains why, and what changes when you pick L, M, Q, or H.
Every QR code carries two kinds of data: the bytes you encoded, and extra Reed-Solomon error-correction codewords that let a scanner reconstruct the message when part of the code is damaged. The QR specification — ISO/IEC 18004 — defines four error-correction levels (L, M, Q, H) that differ in how much of the code can be obscured before scanning fails, and in how dense the resulting code is. More error correction is more damage tolerance, but also a denser code — so the choice is about where the code will live, not "more must be better."
The four levels: what each one recovers
Denso Wave, the company that invented QR codes, documents the four error-correction levels with these recovery rates: L approximately 7%, M approximately 15%, Q approximately 25%, and H approximately 30% (QRCode.com — Error Correction Feature). Those percentages refer to the share of the code's data codewords that can be unreadable while the message is still recoverable — not literal pixel percentages, but the right intuition for "how much of the code can be damaged."
- L (~7%) — smallest, simplest code for a given payload, but the least tolerant of damage. Good on clean digital surfaces or high-quality print that will not be touched.
- M (~15%) — the default most generators ship with, including the AnchorKite QR Code Generator. Handles ordinary print scuffs and light smudging.
- Q (~25%) — extra headroom for codes that will be handled or partially obscured. A middle ground when M is not enough but H is too dense.
- H (~30%) — built to keep working when a meaningful chunk of the code is covered, scratched, or distorted. The standard pick for logo overlays and rough-handling packaging.
Why higher is not automatically better
Adding error-correction data does not come for free. The extra codewords have to fit inside the same square, so the spec absorbs them by picking a larger version of the code — a bigger grid with more, smaller modules. Forty versions are defined, from a 21×21 module grid at version 1 to a 177×177 grid at version 40 (QRCode.com — Version and Symbol Size).
At a fixed physical print size, that matters. The same payload at H might need a substantially larger version than at L, which means smaller modules in the same square. At some point those modules become finer than the camera or printer can cleanly resolve, and the extra damage budget is wasted on margin you cannot scan in the first place. Pick the lowest error-correction level that comfortably covers your real-world risk; do not max out the slider by default.
Print size, quiet zone, and contrast
Error correction is one of four physical-printing variables. The other three matter just as much:
- Physical size and scanning distance. A working rule: a code scans cleanly from a distance of roughly ten times its width. A 2 cm code from arm's length, a 10 cm code from a meter. Print smaller than that and you are betting on a steady hand and a sharp camera.
- Quiet zone. ISO/IEC 18004 specifies a minimum blank margin of four modules wide on every side, so scanners can detect where the code begins and ends. The AnchorKite generator includes that margin automatically; cropping flush to the dark modules breaks the spec.
- Contrast. Scanners detect dark-on-light contrast. Black on white is most reliable. Custom colors work as long as the foreground is meaningfully darker than the background. If you can read the code clearly by eye at arm's length, a camera probably can too.
- Surface. Curved labels, glossy laminate, uneven cardboard, and reflections from glass all reduce scan reliability. Treat any of those as a reason to raise the error-correction level by one step.
Recommendations by use case
Concrete, by-the-scenario picks. Treat these as starting points, not absolutes; test-scan one before printing in quantity.
Classroom worksheet or handout
Single printout, clean paper, indoor lighting, students scanning from a desk. M is enough. Print at 2–3 cm square in a corner of the page, keep the quiet zone, and you are done. Going higher only makes the code denser without adding real protection.
Business card
Small physical size (often 1.5–2 cm), and the card will get bent and pocketed. M is the floor; consider Q. Q adds a margin for fold creases without making the modules so fine that high-volume offset printing struggles. Skip H here unless you are adding a logo — at that print size the density penalty hits hard.
Poster, window sign, or in-store display
Large size, scanned from a meter or more, often through glass with reflections. M is fine for a clean indoor sign; Q for a window or outdoor poster. The larger print size means Q's denser modules are still easy to resolve, and the extra recovery absorbs glare, sun fade, and smudges from people leaning on the glass. Make the code at least 10 cm wide.
Sticker or product label
Curved surfaces, scuff risk, and packaging that gets handled. Q by default; H if the surface is significantly curved — a cylindrical bottle, a tube, a rolled label. The recovery rates are defined for flat codes, and curvature effectively eats into the budget by distorting the modules as the camera sees them.
QR code with a logo overlay
Use H, always. A logo in the center covers data modules the scanner cannot read. The standard ~15–20% center coverage fits inside H's ~30% recovery budget while leaving headroom for normal print imperfection. Keep the logo small (no more than about 20% of the code's area), centered, and on a solid background — a logo that bleeds into the surrounding modules will defeat the scanner even at H.
PNG or SVG?
Independent of the error-correction choice: download SVG when the code will be printed at multiple sizes or sent to a print shop that wants vector artwork. Download PNG when you are pasting it into a document, presentation, or label template that expects a raster file. The encoded data is identical.
Test-scan before you commit
Printing 5,000 stickers with an unscannable code is an expensive mistake. Before you commit to a print run:
- Print one full-size copy on the exact stock you plan to use.
- Scan it with two different phones — one older, one current, ideally on different operating systems.
- Scan it at the actual distance and lighting where it will live. A poster code that scans from 10 cm but not from a meter is not ready for the wall.
- If the code will wrap around a curved surface, scan the curved sample, not the flat proof.
Where the AnchorKite generator fits
The QR Code Generator defaults to M, lets you switch to L, Q, or H with one click, supports custom colors, and produces PNG or SVG with the required four-module quiet zone built in. It runs entirely in your browser; the text you encode never leaves the page. For other small operational utilities, the business tools hub is the right starting point, and the full tools directory is one click further.
Try the QR Code Generator with your real destination URL. Start with M, switch to H if you are adding a logo or printing in difficult conditions, then print one copy and test-scan it from the distance you actually expect — before committing to a print run.
More small operational utilities live on the business tools hub.
Sources and further reading
- QRCode.com — Error Correction Feature. Denso Wave's official explanation of the four levels (L ~7%, M ~15%, Q ~25%, H ~30%) and why higher recovery means a denser code.
- QRCode.com — Version and Symbol Size. The forty defined QR versions, from 21×21 modules at version 1 to 177×177 at version 40.
- ISO/IEC 18004:2015 — QR Code bar code symbology specification. The formal international standard, including the four error-correction levels and the four-module quiet-zone requirement.
- AnchorKite QR Code Generator. The free, browser-only generator referenced in this guide.
FAQ
Which QR error-correction level should I use?
Start with M for clean print and digital use. Move to H if you are placing a logo over the center of the code or printing in conditions where the code will be scuffed, partially covered, or applied to a curved surface. Use L only when the code is large and the print is high-quality. Q is the middle ground when M is not enough but H is too dense to scan at your print size.
What do L, M, Q, and H actually mean?
They are the four error-correction levels defined by the QR specification. Roughly, L can recover from about 7% damage, M about 15%, Q about 25%, and H about 30%. The percentages are codeword-level, not pixel-level — a scanner can reconstruct the message even when that fraction of the code's data is obscured.
Does a higher error-correction level always make a code more scannable?
No. Higher levels add more redundancy, so more modules need to fit into the same square. At a fixed print size, an H-level code has smaller, denser modules than an L-level code carrying the same content. If you print very small, that density can make the code harder for cameras to resolve, and the extra damage tolerance is wasted.
How big should I print a QR code?
Scanning distance is roughly ten times the code's width. A 2 cm code scans from about 20 cm; a 10 cm code scans from about a meter. Print at the size your reader will actually be standing at, then leave the four-module quiet zone around the code.
Do I need error-correction level H to put a logo in the middle?
Usually yes. A centered logo covers data modules the scanner cannot read. H is the standard choice for logo overlays because the ~30% recovery absorbs a typical ~15–20% center coverage and still leaves headroom for ordinary scuffs.
Should I download the code as PNG or SVG?
SVG for anything that will be printed at multiple sizes or resized later — it is vector, so it stays crisp at any scale. PNG when you are pasting the image into a document, slide deck, or label template that wants a raster file. Both encode the same code.
More guides at anchorkite.com/guides.