Choosing QR Error Correction for Print and Links
How L, M, Q, and H trade capacity for scan reliability—and when PNG size and contrast matter more.
QR codes look simple: paste a URL, download a square, print it. In practice, error correction level, payload length, and physical layout decide whether a code scans on the first try.
This guide helps you pick L/M/Q/H for developer docs, Wi-Fi posters, and product labels—without treating "maximum correction" as a free upgrade.
What error correction actually buys
QR symbols include redundant codewords. If part of the grid is smudged, creased, or covered, the decoder may still recover the payload.
| Level | Rough recovery | When it helps |
|---|---|---|
| L | ~7% | Long payloads; large, clean displays |
| M | ~15% | Default for most HTTPS links |
| Q | ~25% | Small print, partial finger cover |
| H | ~30% | Center logos, worn stickers |
Higher correction makes the same string denser. Browser generators may fail when you combine a long Wi-Fi string with level H—shorten the text or drop a level.
Use the QR Code Generator to preview locally; use the in-tool help next to Error correction for a quick rule list.
Pick by scenario, not by alphabet
Large slide or doc link (M)
Conference slides, README badges, internal dashboards. Start with M unless the code is tiny on the slide.
Sticker or flyer corner (Q or H)
Physical obstruction and cheap printers punish small modules. Raise correction and export a larger PNG than the printed size.
Wi-Fi guest network poster (L or M)
Wi-Fi strings are longer than bare URLs. Prefer L/M so the symbol stays readable; verify on iOS and Android before laminating.
Brand-colored codes (M + contrast check)
Custom foreground/background colors work when contrast stays high. Re-scan after every color tweak—error correction cannot fix a near-white module on a glossy label.
PNG output habits that matter as much as L/M/Q/H
Raster PNGs are fine for most DevCove workflows if you:
- Export at 256px–512px for screen; oversample for small print
- Keep a quiet zone—do not crop against borders or text
- Avoid upscaling a tiny PNG in InDesign or Figma
- Scan at final size under realistic lighting
Need to sanitize a URL before encoding? Run it through the URL Encoder first so query strings and reserved characters survive as a single payload string.
A five-minute pre-publish test
- Scan on two phones
- Confirm the exact URL or Wi-Fi SSID
- View at final printed or projected size
- Re-test after any color, size, or text change
Related learning
For a structured walkthrough—payload formats, PNG print notes, and a full checklist—see the QR Code course.
Bottom line
M is the sensible default. Move to Q/H when the physical world will damage or shrink the symbol; move to L when the payload is long. Always validate with a real scan—not only a crisp preview on your laptop.