Skip to content

QR code best practices — error correction, print size, and the centered-logo trap

Tool author & maintainerPublished Apr 26, 202612 min read

A QR code is a 2D barcode with a fixed math: more capacity → bigger grid → smaller modules → harder to scan in poor light. Most ‘QR doesn't scan’ problems trace to one of three mistakes — wrong error-correction level, too-small print size, or a logo eating more than 30% of the central area.

Error correction levels — what they actually mean

QR codes use Reed-Solomon error correction with four levels: L (7% data recovery), M (15%), Q (25%), H (30%). The percentages are how much of the code can be obscured or damaged before scanners fail. M is the screen default — fast scans, smallest grid for the data. Q is the right pick when you embed a centered logo; H only when the QR will be printed on industrial surfaces (concrete, fabric, weathered) where physical damage is expected. Higher ECL means a bigger grid for the same data, which is the trade-off.

Minimum print size — the 10:1 rule

QR scanning works when each module (the smallest black square) covers at least ~4 camera pixels at the scan distance. The practical rule: print width ≥ scan distance / 10. A QR scanned at arm's length (~30 cm) needs ≥3 cm wide; a poster scanned from 1.5 m away needs ≥15 cm. Below the threshold, modern phone cameras still scan in good light but fail outdoors or when the user is moving past — a regular phenomenon at concert posters and store windows.

Centered logos — the math that decides if it works

When you place a logo in the center of a QR code, the modules under it become unscannable, and the error-correction has to recover them. ECL=M (15%) tolerates a logo covering up to ~10% of the QR area before it starts failing; ECL=Q (25%) tolerates ~20%; ECL=H (30%) tolerates up to ~25–30%. Going beyond reduces real-world reliability sharply, even if the laboratory tolerance is higher. Keep the logo small and use ECL=Q.

Static vs dynamic QR — when to pick which

Static QR encodes the destination URL directly into the code. Permanent, no vendor, no tracking, but the URL is fixed forever. Dynamic QR encodes a short URL pointing to a redirect service (Bitly, Linktree, vendor-specific) — the destination can be changed without reprinting, and the service usually offers analytics. Cost: vendor lock-in, a redirect hop (50–200 ms), and the service can rate-limit or shut down. Pick static for printed business cards and books; dynamic for marketing campaigns where the destination evolves.

vCard QR — special considerations

A vCard contact embeds name, phone, email, and optionally photo into the QR. Without the photo, expect QR version 5–10 (37×37 to 57×57 modules). With a photo embedded inline, version 20+ — the QR becomes very dense and needs at least 3 cm print to scan reliably. For business cards, consider a static URL pointing to a hosted vCard download; the QR stays small and the contact card can be updated without reprinting.

Steps

  1. Pick the content

    URL, vCard, Wi-Fi credentials, or plain text. URL is by far the most scanned and most reliable.

  2. Pick error correction

    M for plain digital, Q if you embed a logo, H for industrial print.

  3. Set the size

    Print width ≥ scan distance / 10. For digital use, output 1024 px PNG and let the consumer scale.

  4. Test before deployment

    Print or display at the actual size, scan from the actual distance with both iPhone and a low-end Android. If either fails, increase ECL or size.

QR module count vs ECL — same URL (52 chars) at four error-correction levels
ECLRecoveryQR versionModule countPixels at module=4 px
L7%329×29116×116
M15%433×33132×132
Q25%537×37148×148
H30%641×41164×164
Calculated from the QR Code 2005 (ISO/IEC 18004) spec for a 52-character URL using the in-browser encoder (2026-04-26).

Frequently asked questions

  • Can I invert the colors (white on black)?

    Some old scanners fail on inverted QR. Modern phones from 2018+ scan inverted reliably. For maximum compatibility, stay with dark-on-light.

  • Does the data capacity ever max out?

    Yes — QR version 40 (177×177 modules) holds about 4 KB of binary data. Above that, split the payload or move to a URL pointing to the larger resource.

  • Are dynamic QR codes worth the recurring fee?

    Only if you actually update the destination or need analytics. For 'print once and forget', static is free, faster, and outlives any vendor.

  • Can a QR contain malware?

    The QR itself is just an encoding of a string — it can't carry executable code. The risk is the URL it points to: phishing pages, drive-by downloads. Treat scanned URLs the same way you'd treat a clicked link.

  • Do I need a colored frame around the QR?

    Optional but useful — a contrasting border ('quiet zone') of at least 4 modules wide is required by the QR spec. Aesthetic frames beyond that have no effect on scannability.

  • Is this tool's output free to commercial use?

    Yes. The QR encoding is generated locally in your browser; the resulting PNG is yours to use without restriction.

Try it now

Turn URLs or text into QR codes

QR Code Generator

We measure anonymous usage with cookieless analytics. See our privacy policy.