Why will my QR code not scan
You point a camera at it and nothing happens. Before you regenerate it, resize it or blame the phone, there is a two-minute test that tells you which half of the problem you have, and then a short list for each half. This page is that list, in the order that costs least to work through.
First: the test that splits the problem in two
Take a photo or screenshot of the code and drop it into our free decoder. It runs with every recovery option turned on · rotation, inversion, downscaling, denoising · which is precisely what a phone camera does not do, and nothing is uploaded. There are three outcomes, and each one sends you to a different section:
- The decoder reads it, the phone does not. The pattern is intact and the content is correct. What is missing is margin: the code is too small for its module count, too low in contrast, cropped too tight, or inverted. Skip to the artwork and the print below.
- The decoder cannot read it either. The pattern itself is broken. Something covers or replaces part of it, a corner finder square is missing, the image is a re-crop of a re-crop, or it is not a QR code at all (a Data Matrix and a QR look alike to most people; the decoder reads both and will say which). Skip to a damaged pattern.
- Both read it, but the phone shows nothing useful. The code works. Look at what the decoder says is inside: a URL with a typo, a WiFi payload with an escaping error, a phone number in the wrong format. That is a content problem rather than a scanning one, and the stopped-working guide walks it.
One honest limit of the test, because it cuts both ways: a code that only reads with all of those recovery options on is a code a fixed scanner at a till may refuse. The decoder tells you whether the content is recoverable, not whether the print will pass.
The phone, before the code
A surprising share of "my code does not scan" is a phone that is not looking for one. Rule these out first because they cost nothing:
- The camera app is not detecting codes · recent iPhones and most recent Android phones read a QR code straight from the camera viewfinder, but on some Android phones that is a setting, and on older ones it needs a separate reader or the lens tool in the Google app. If a second phone reads the code, the code is fine.
- Distance and focus · the camera has to focus on the code, and it cannot focus on something a few centimetres away. Pull back until the whole code fills roughly a third of the frame, hold still, and give it a second.
- Angle, glare and a dirty lens · a laminated table tent under a downlight throws a white highlight across the pattern; so does a phone screen at an angle. Tilt one of them. And wipe the lens, which is the fix nobody wants to be told.
On a screen
A code shown on another phone, a laptop, a slide or a website fails for reasons that never happen on paper:
- The quiet zone was cropped. The clear border around the squares is part of the code, not decoration: the specification reserves 4 modules of it on every side, and a screenshot trimmed to the edge of the pattern removes the thing the camera uses to find where the pattern starts. Give it back and try again.
- It is too small on the screen. A thumbnail in a chat, a code in the corner of a slide, a preview image scaled down by a page: the camera needs each module to cover more than a pixel or two of its own sensor. Zoom the image until the code is the size of a playing card, or open it full-screen.
- Dark mode inverted it. Some apps and email clients invert images with the theme, so the code becomes light squares on a dark ground. The specification assumes dark on light, and most phone cameras will not try the inverse. Our decoder does, and reports "inverted" when that is what it found, which confirms the diagnosis in one read.
- It is a photo of a screen. A code photographed off a monitor picks up the screen's pixel grid as a second pattern over the first, and the camera struggles to separate them. Share the image, not a photo of it.
In the artwork
If the code was designed rather than just generated, the design is the usual suspect. Four choices measurably stop a code reading, and all four are fixable before anything is printed:
- Too little contrast. A camera reads luminance, not hue, so a mid-grey on white, a pastel on cream, or two colours of similar brightness look identical to it. Dark ink on a light ground is the whole rule. And one colour pair passes every screen check and fails at a shop till anyway: red on white, because retail scanners read at a wavelength that sees red as white. That one is walked, with grades, in printing QR codes that scan.
- Something covers a finder square. The three large squares in the corners are how a reader locates and orients the code. A logo, a frame, a caption or a rounded mask that clips one of them defeats the reader before error correction gets a say.
- The logo is bigger than the error-correction budget. Error correction rebuilds a damaged share of the symbol, from 7 percent at the lowest level to 30 percent at the highest, and a logo spends that share. Spend all of it and there is nothing left for a scratch or a fold. The styled-codes guide has the budget and the two designs we built and refused to ship.
- Too much content for the size. More characters means more modules across the same width, and every module gets smaller. A short link is 25 modules across; a full contact card is 61. Shorten the URL, drop the tracking parameters, or encode a short link that leads to the long one.
In the print
On paper the rules are physics, and the two numbers below are the ones the studio grades against rather than folklore:
- Module size. Each module has to print at least 0.4 mm wide for a phone to resolve it in ordinary conditions. Multiply that by the module count and you have the smallest width the symbol can be printed at. A code that scanned on the screen and fails on a business card is usually this: it was shrunk below its own floor.
- Reading distance. A code reads from roughly 10 times its printed width. A code the size of a postage stamp works in the hand and fails on a wall, and nothing about the code changed.
- Quiet zone, again. The same 4 modules of clear space, now easy to lose to a coloured background, a border drawn around the code, or a bleed cut.
- The surface. Curved packaging bends the grid, gloss laminate throws a highlight, and textured stock breaks module edges. None of these show in a proof on a flat screen. For product packaging the sizes are tighter still, and the packaging page is built around what has to be decided before that print run.
A damaged pattern
When the decoder cannot read it either, the content is not in the image any more, and no reader will recover it. What can still be done:
- Find another copy. The original export, another print from the same run, a photo taken before the damage. Any intact copy carries the content, and once you have the content you can regenerate a working code from it in any generator, including ours.
- Check the source, not the print. If the exported file itself does not decode, the generator produced a broken symbol · a mask applied after the fact, a logo composited over a finder, a resize that resampled the modules. Export again without the effect and test before printing.
- Accept that a reprint is the fix. A print whose pattern is gone is gone. What you decide now is whether the replacement should be a code whose destination you can change without a third print, which is the question static vs dynamic answers.
Where taproute comes into this
Two of the causes above cannot happen to a code made in our studio, and one still can. A design that would fail to decode is refused before it can be exported: every built-in style is measured against a stock reader at descending sizes, and your own colour and logo choices are graded against the same floor, so a logo over a finder or a mid-grey foreground never reaches your printer. And a dynamic code is the smaller symbol by construction, because it encodes a short link rather than the content · 25 modules across whatever the destination grows into.
What we cannot do is see your print. The studio's scan check is a screen test, not a hardware verifier reading reflectance off paper, and a code that passes it can still fail on a curved bottle or under laminate glare. Proof one physical copy before the run.
One more thing to know, because it looks like a scanning problem and is not: a dynamic code on a wallet that has run out of credits keeps scanning perfectly and lands on a paused notice instead of the destination, after a grace period of 14 days or 5 percent of the last top-up in scans, whichever ends first. The pattern is fine; the account is not. Topping up brings it back on the same printed code, and each scan is 1 credit.
Questions
Why will my QR code not scan?
Almost always one of five things: the phone is not looking for a code, the code is too small or too far away for its module size, the quiet zone around it has been cropped, the contrast is wrong (light on dark, or a colour a camera reads as grey), or something covers a finder square. Paste a photo into a decoder that runs every recovery option before you change anything · if it reads there and not on the phone, the pattern is fine and the margin is the problem.
Why does my QR code scan on one phone but not another?
Because the two cameras are not equally forgiving. A code that only scans with the better camera is a code with no margin: it is on the edge of its minimum module size, its contrast or its error-correction budget. Fix the margin rather than the phone, because the next scanner is a stranger with whatever phone they own.
Does a QR code scan from a screen?
Yes, if it is shown large enough and not cropped. The commonest screen failures are a screenshot that trimmed the white border (the pattern needs 4 modules of clear space on every side), a thumbnail scaled below the camera's resolution, and a dark-mode app inverting the code to light on dark, which many phone cameras refuse.
Why does an inverted QR code (white on black) not scan?
The specification assumes dark modules on a light background, and a reader that supports the inverse has to try it as a second pass. Phone cameras mostly do not. Our decoder does, and labels the result as inverted, which is how you confirm that inversion is the only thing wrong.
Why will my QR code with a logo not scan?
A logo covers modules, and error correction can only rebuild so many: from 7 percent of the symbol at the lowest level to 30 percent at the highest. A logo that is too large for the level, or one that sits on a finder square in a corner, takes the code past what it can recover. The size budget is in the styled-codes guide.
Is a dynamic QR code easier to scan than a static one?
At the same printed width, yes, and it is geometry rather than a claim. A dynamic code encodes a short link (25 modules across) while a full contact card encodes the card itself (61 modules), so each module of the dynamic code prints more than twice as wide, and a wider module survives distance, low light and bad printing.