The short answer
Most QR codes that will not scan fail for one of four reasons: the print is too small for the distance, the contrast is too low, the empty border around the code has been cropped, or the code scans fine but the link behind it is dead. Check those four first. The other five causes below are rarer, but each one has caught someone.
1. It is too small for the distance
Hold the phone closer. If it scans at 10 cm but not at 50, the code is too small for where it is placed. The rule of thumb is code width around one tenth of the scanning distance. Reprint larger, or move it closer to people.
2. The contrast is too low
Readers look for dark squares on a light background. Light grey on white, yellow on cream, or an inverted code with light squares on a dark background all fail on some phones. Pastel brand colours are the usual culprit. Keep the squares dark and the background light, and put the brand colour in the frame or the logo instead.
3. The quiet zone is gone
The code needs an empty margin on every side, about four squares wide. Designers crop it to make the code sit tight against text or a photo, and cameras then cannot find the edges. Give it back its border.
4. The code scans, but the link is dead
If the phone shows a link and then an error page, the code is fine and the destination is not. The page moved, the domain lapsed, or the file was deleted. With a dynamic code, change the destination in the dashboard and every print is fixed. With a static code, set up a redirect from the old address if you control the website, or reprint.
5. The logo is too big or in the wrong place
A logo can cover about a quarter of the code at the highest error correction level and no more. It must never touch the three large corner squares. Shrink it, move it to the centre, and set error correction to H.
6. Glare, curve or fold
Glossy laminate under a spotlight reflects a white patch that wipes out part of the code. A code wrapped around a bottle or printed across a fold is bent out of shape. Use matte stock, put the code on a flat face, and keep it away from creases.
7. Too much content
A long address with tracking parameters makes a dense code with tiny squares. Dense codes need to be printed larger and photographed sharper. Shorten the link, drop the parameters, or use a dynamic code so the print only carries a short link.
8. The print is blurry
A small PNG enlarged for a poster goes soft, and soft edges confuse the reader. Send the printer an SVG or PDF, which stay sharp at any size. If you must use a PNG, export it at the largest size on offer.
9. The phone, not the code
Very old phones need a separate scanner app. A dirty lens, a cracked screen protector, or low light will fail a code that is otherwise fine. Try a second phone before you reprint anything. If it scans on one and not the other, the code is marginal rather than broken: improve contrast or size and it will scan on both.
Catch it before printing
HueQR's generator scans the preview in your browser while you design and shows a green, amber or red meter. It catches contrast, logo and density problems before you spend money on print. Then scan the downloaded file with a real phone, from the real distance.
Questions
The code is marginal: borderline contrast, a large logo, or a dense pattern. One reader is more forgiving than the other. Fix the underlying issue and both will scan.
Next step
Test a code in the generator
The live scan meter tells you before you print.
Test a code in the generator