A QR code either works or it does not, and when it does not there is rarely an error message to go on. The good news is that the failures are not mysterious. Almost all of them come from one of eight causes, and you can usually identify which in under a minute.
Work through them in this order, because the order reflects how often each one is actually to blame.
First: is it the code or the reader?
Before changing anything, find out which half is broken. Take the code image — the file, not a photo of the print — and decode it directly with the QR code reader.
If it decodes and the contents are right, the code data is fine and your problem is physical: size, contrast, print quality or placement. Sections below.
If it does not decode from the original file, the code itself is malformed or over-stuffed, and nothing about how you print it will help. Regenerate it.
This one check saves a lot of time, because the two categories have entirely different fixes and people routinely spend an afternoon adjusting the printing of a code that was broken before it left the screen.
Too small for the distance
The most common physical failure, and the easiest to fix.
A camera needs enough pixels per module — per little square — to tell them apart. The practical rule that holds up well: the code should be about one tenth of the distance it will be scanned from.
- Scanned from 25cm, on a business card or handout: 2–2.5cm square.
- Scanned from 1m, on a table tent or a shelf label: about 10cm.
- Scanned from 5m, on a wall poster: about 50cm.
- Projected in a room where the back row is 10m away: about 1m, which means it needs its own slide.
People under-size codes constantly because the code looks perfectly legible on a laptop screen at 30cm while designing it. That has nothing to do with how it reads on a wall.
Below about 1.2cm printed, you are relying on a good camera in good light regardless of distance.
The quiet zone has been eaten
The second most common cause, and the most invisible.
A QR code needs a blank margin around it — the quiet zone — of roughly four modules on every side. This is part of the specification, not a design suggestion. It is how a reader works out where the code ends and the world begins.
It gets destroyed in ordinary ways. A designer crops tight to the black edge to save space. The code is dropped into a coloured panel with no padding. Text is placed right up against it. It is positioned in the corner of a business card and the printer's trim takes a millimetre off one side.
The fix is to give it room: a clear margin all round, in the same colour as the code's background, at least four modules wide. On a 2cm code that is about 2mm. And on anything that will be cut, keep the code plus its quiet zone at least 5mm inside the trim line, because commercial cutting has a tolerance of a millimetre or two and a clipped code is unreadable rather than merely untidy.
Contrast and inverted codes
Dark modules on a light background is what every reader expects. Black on white is the safe choice and there is no prize for anything else.
Things that break it: a pale code on a mid-tone background; a code printed over a photograph; a dark code on a dark card. And inverted codes — light modules on a dark background — which look striking and are supported inconsistently. Some readers handle them, some do not, and you will not know which your audience has.
Coloured codes are fine if the contrast is genuinely strong: a very dark colour on white generally works. Two mid-tones never do, however different they look to a human eye, because the camera reduces them to brightness.
Too much data crammed in
The more you encode, the more modules the code has. At a fixed printed size, more modules means each one is physically smaller and harder to resolve.
This is why a code containing a long tracking URL — with campaign parameters, session identifiers and a trailing string of characters — looks visibly denser than one containing a short link, and fails at a size the short one manages easily.
The same applies to contact cards. A vCard with name, title, company, two phone numbers, an email, a website and a full postal address may need a code half again as large as one carrying the essentials.
Fixes, in order of preference: shorten the URL at the source rather than with a third-party shortener; drop the tracking parameters if you are not going to read the analytics; cut optional vCard fields; or make the code physically larger.
A logo over the middle
Codes carry error correction, which is why a logo in the centre can work at all. At the highest level roughly 30% of the code can be obscured and it will still decode.
That is a budget, though, not a licence. Print imperfections, paper texture, lighting and camera noise all draw on the same budget. A logo that consumes 25% of it leaves almost nothing for the real world, and the code becomes one that works when tested on screen and fails on the printed flyer.
If you want a logo, keep it under about 10% of the code area, generate at the highest error correction level, and — the part people skip — test the printed version rather than the file.
Print, paper and finish
Several small things that only appear once the code is physical.
Resolution. Print the code from a vector file, or from a raster image at 300 DPI or more at final size. Enlarging a small PNG produces soft, blurry module edges.
Ink spread. On absorbent stock — uncoated card, newsprint, fabric — ink bleeds slightly and dark modules grow into their neighbours. Small codes suffer most. Go larger than you calculated on absorbent material.
Finish. Gloss lamination and spot UV over a code reflect ceiling lights straight back into the camera. Matte is the safe choice.
Curvature. A code wrapped around a bottle or a cup distorts. Keep it on the flattest available area and smaller than the curve.
Placement. Below waist height, above head height, or behind glass at an angle all make scanning awkward regardless of how good the code is.
The code scans but the link is dead
Worth separating, because it is not a scanning failure at all and the fix is somewhere else entirely.
The usual causes: the URL was mistyped when the code was generated and nobody tested it; the code contains a link that required sign-in, so it worked for its creator and for nobody else; the page has since moved or been deleted; or the code was made with a "dynamic" QR service on a free trial or a lapsed subscription, and the redirect that sat in the middle has been switched off.
That last one is worth understanding before you print anything at scale. A dynamic code does not contain your link — it contains a link to a provider, who forwards to your link. That buys editability and scan statistics, and it means every code you have ever printed stops working if you stop paying or the company disappears. A static code, which contains the destination directly, cannot be edited later and cannot be switched off by anyone. For a link that will not change, static is the safer trade. The QR code generator here produces static codes, free, with nothing in the middle.
How to test properly
Most codes that fail in the field passed a test that proved nothing.
- Test the printed piece, not the screen. A screen is backlit, perfectly flat and higher contrast than any paper. Get a proof, or print one at final size on the nearest stock you have.
- Test at the real distance, in the lighting the code will actually live in. A poster tested at arm's length has not been tested.
- Use more than one phone, including an older one. Camera quality varies enormously and the newest phone in the office is not representative.
- Test signed out. If the destination needs an account, a code that works for you may fail for everyone else. Use a private browsing window on the phone.
- Check where it actually goes, not just that it scanned. Decoding the code with the QR code reader shows the exact URL as text, which catches a typo that a redirect would otherwise hide.
Do those five and the great majority of field failures never happen.
Frequently asked questions
Why is my QR code not scanning?
Check whether the code data is valid before changing anything physical: decode the image file itself with the QR code reader. If the contents are correct, the problem is physical — usually the code is too small for the scanning distance, or its quiet zone has been cropped. If it does not decode from the file, regenerate it.
How big does a QR code need to be?
Roughly one tenth of the distance it will be scanned from. About 2cm on a handout read at arm’s length, 10cm on a table tent read from a metre, 50cm on a poster read from five metres. Below about 1.2cm printed, you are depending on a good camera and good light.
What is a quiet zone and why does it break my code?
It is the blank margin around a QR code, about four modules wide on every side, and it is part of the specification rather than decoration — readers use it to find where the code ends. Cropping tight to the black edge, dropping the code into a coloured panel with no padding, or letting the printer’s trim clip one side will all stop a perfectly valid code from scanning.
Can a QR code have a logo in the middle?
Yes, within limits. Error correction lets roughly 30% of the code be obscured at the highest level, but print quality, lighting and camera noise all consume that same budget. Keep a logo under about 10% of the code area, generate at the highest error correction level, and test the printed version rather than the file.
Why does my QR code work on screen but not in print?
Screens are backlit, flat and higher contrast than paper. In print, ink spreads on absorbent stock, gloss finishes throw glare back at the camera, and a low-resolution image gives soft module edges. Print at 300 DPI or from a vector file, choose a matte finish, and go slightly larger on uncoated material.
My QR code scans but the link does not work. Why?
That is not a scanning problem. Common causes are a typo in the URL when the code was generated, a destination that requires sign-in, a page that has since moved, or a dynamic code whose provider subscription has lapsed — dynamic codes contain a link to a redirect service rather than to your page, so they stop working when that service does.
Do inverted or coloured QR codes scan?
Coloured codes scan if the contrast is genuinely strong — a very dark colour on white is fine. Two mid-tones will not work however different they look, because the camera reduces them to brightness. Inverted codes, light on dark, are supported inconsistently across readers and are best avoided when you cannot control what your audience uses.
Do QR codes expire?
Static codes do not — the data is inside the code, so there is nothing to expire. Dynamic codes depend on a provider’s redirect and stop working if the subscription lapses or the company closes. The QR code generator here makes static codes.
In short
Diagnose before you redesign: decode the file first, and you immediately know whether you are fixing data or fixing physics. After that it is nearly always size or quiet zone, and both take a minute to correct.
Generate a code that scans
Static, free, highest error correction, no subscription to lapse.
Open the QR code generator