Make QR codes that actually scan

A QR code is just a visual container for a short piece of text — usually a URL, but it can hold plain text, contact details, or a WhatsApp link. Generating one is easy; making one that scans reliably from a poster, a business card, or a phone screen takes a little care. Most QR codes that "don't work" fail for a handful of predictable reasons: too much data, too little contrast, printed too small, or damaged by over-styling.

This guide covers what goes into a scannable code and the practical decisions — size, contrast, error correction, and what to encode — that determine whether it works in the real world.

Encode the shortest thing that does the job

The more data a QR code holds, the denser its pattern of squares becomes, and the harder it is to scan — especially when printed small or captured by an older phone camera. A short URL scans more reliably than a long one packed with tracking parameters. If your link is long, shortening it before generating the code produces a simpler, more forgiving pattern. The goal is the least data that still points where you need it.

Contrast and the quiet zone are not optional

Scanners find a QR code by its high-contrast pattern, so dark code on a light background is the safe choice. Inverting it (light on dark) works on some scanners and fails on others. Equally important is the quiet zone: the empty margin around the code. Without a clear border, the scanner cannot tell where the code ends, and placing text or graphics right up against it is a common reason a code refuses to scan. Leave clear space on all four sides.

Error correction buys you resilience

QR codes have built-in error correction, which lets them still scan when part of the pattern is dirty, damaged, or covered — for example by a small logo in the centre. Higher error-correction levels can recover from more damage but also make the pattern denser for the same data. For a code that will be printed and might get scuffed, or one with a logo overlaid, a higher level is worth the extra density. For a clean code shown on a screen, a lower level keeps the pattern simple.

Size it for the scan distance

The right size depends on how far away it will be scanned. A rule of thumb is that a code should be about a tenth of the distance from the scanner — a code read from across a room needs to be far larger than one on a business card held at arm's length. Print a test copy at the actual size and scan it with a normal phone before committing to a run. A code that scans perfectly on your monitor can be unreadable once printed at postage-stamp size.

Style carefully, or not at all

Rounded modules, gradients, and embedded logos can make a code look attractive, but every stylistic change eats into the margin of reliability. A logo is usually fine if it stays within what the error correction can recover and does not cover the three large corner squares, which scanners use to orient themselves. Heavy gradients or low-contrast colour schemes are riskier. If a styled code matters, test it on several phones and scanning apps, not just one, because tolerance varies.

Always test before you publish or print

The single most important step is also the most skipped: scan the finished code yourself, with more than one device, before it goes out. Check that it resolves to the exact destination you intended, that it works in ordinary indoor lighting, and — for print — that it still scans from the real material at the real size. A QR code on ten thousand flyers that points to a typo'd URL, or that will not scan at the printed size, is an expensive mistake that a thirty-second test would have caught.

Remember a printed code is permanent

Unlike a link on a web page, a QR code on a printed poster or product cannot be edited after it ships. If it points directly at a URL and that URL later changes, every printed code becomes dead. For anything long-lived, it is worth pointing the code at a stable address you control and can redirect, so the destination can change even though the printed pattern cannot. Decide this before printing, not after the address moves.

Tools used in this workflow

Primary tool: QR Code Generator →

Related: WhatsApp Link Generator

← All guides