The Complete Guide to QR Codes: Error Correction, Logos, and Best Practices
Everything that actually affects whether a QR code scans reliably — error correction levels, contrast, quiet zones, adding a logo, and the mistakes that break codes in the real world.
A QR code is one of those technologies that looks trivial and turns out to have real depth. Generate one carelessly and it might scan fine on your phone in good light, then fail completely on a printed flyer under a fluorescent bulb. The difference between a code that always works and one that frustrates people comes down to a handful of decisions you make when you create it.
What a QR code actually stores
A QR (Quick Response) code is a two-dimensional barcode that encodes data as a grid of black and white modules. It can hold a URL, plain text, contact details, Wi-Fi credentials, an email address with a pre-filled subject, a phone number, and more. The most common use by far is a URL: the code is just a compact, camera-friendly way to type a web address for someone. The amount of data you encode affects the density of the grid — a short URL produces a sparse, easy-to-scan code, while cramming in a long string makes the modules small and harder for cameras to resolve.
Error correction: the most important setting
QR codes have built-in redundancy using Reed–Solomon error correction. This is what lets a code still scan when part of it is dirty, damaged, or covered. You choose how much redundancy to include, and the choice is a genuine trade-off:
- →Level L (Low) — recovers ~7% of the code. Maximum data capacity, least resilience. Fine for clean digital display.
- →Level M (Medium) — recovers ~15%. The default for good reason; reliable in most real-world conditions.
- →Level Q (Quartile) — recovers ~25%. A good step up for print that may get handled or scuffed.
- →Level H (High) — recovers ~30%. Essential if you plan to place a logo over the code, or expect physical wear, smudging, or partial obstruction.
Higher error correction makes the grid denser (more modules to hold the redundant data), so it is not a free upgrade — push it to H with a long URL and the code can become too dense to scan from a distance. The practical answer: use M for screens and clean print, and only jump to H when you are adding a logo or printing something that will take abuse.
Adding a logo without breaking the code
A logo in the center of a QR code looks professional and on-brand, and it works because of error correction — the code treats the logo as "damage" it can recover from. The rules are simple but firm: set error correction to H, keep the logo to roughly 20–30% of the code’s area, and keep it centered. Cover too much, or place it over the three large corner squares (the finder patterns that cameras use to locate and orient the code), and scanning breaks. After adding a logo, always test the code with several phones before you publish or print it.
Contrast, color, and the quiet zone
Scanners need clear contrast between the dark modules and the light background. Dark-on-light is the safe default. You can use brand colors, but keep the foreground genuinely dark and the background genuinely light — a medium blue on a medium gray will fail. Critically, never invert the code (light modules on a dark background) unless you have tested extensively, because many scanners assume dark-on-light.
The "quiet zone" is the empty margin around the code. It is not decoration — scanners rely on it to separate the code from surrounding content. Always leave a clear margin of at least four modules’ width on all sides. Codes that bleed into busy backgrounds or sit flush against text are a common cause of scan failures.
Choosing a file format
Download as SVG for anything that will be printed or scaled — it is a vector, so it stays razor-sharp at any size, from a business card to a billboard. Use PNG for digital use where you want a crisp raster with a transparent or solid background. JPEG is the weakest choice for QR codes because its compression introduces artifacts around the sharp edges of the modules; avoid it unless file size is the only thing that matters.
Common mistakes that break codes
- →Encoding a very long URL — shorten it first so the grid stays sparse and scannable.
- →Printing too small — a code needs roughly 2×2 cm minimum for close scanning, larger for distance.
- →Insufficient contrast or an inverted color scheme.
- →No quiet zone, or the code placed over a busy photo background.
- →A logo that is too large or covers a finder pattern.
- →Never testing the printed result — always scan the final artifact, not just the screen.
Our QR Code Generator lets you control all of this: input type, colors, size, and error correction level, with PNG, SVG, and JPEG export. If your destination link is long, run it through the URL Shortener first — a shorter URL produces a cleaner, more reliable code. Generate, download, and then do the one step most people skip: scan the final version with a couple of different phones before you ship it.