Every dead QR code I have ever met failed for one of four boring reasons, and all four are catchable in about thirty seconds before anything hits the printer. The expensive version of this lesson is a pallet of boxes that scan their way to nothing. The cheap version is a checklist. Let me give you the cheap version.
First, contrast. A scanner needs the dark modules to stand clearly apart from the light background, and the rule of thumb that has never let me down is roughly four-and-a-half to one. The trap is brand color. That gorgeous pale gold on cream looks premium on screen and turns into an unreadable smudge in a dim restaurant. Dark on light, always, and if you must use color, keep it dark.
Second, the quiet zone. The blank margin around the code is not wasted space, it is the frame the camera uses to find the code at all. Crowd it with text or bleed it off the edge of a label and scanners hunt, hesitate, and give up. Give it at least four modules of breathing room on every side.
Third, the logo. A logo in the middle is fine, that is what high error-correction is for, but there is a ceiling. Cover much more than a quarter to a third of the code and you have eaten the redundancy that lets a scan succeed when the print is smudged or the angle is bad. Smaller logo, safer code.
Fourth, the destination. The most embarrassing failure is a flawless code pointing at a link that 404s, because nobody checked. Open the destination, confirm it loads, and — if the code is dynamic — confirm you can still change it later without reprinting.
We built this into LumenQR’s Design Studio so the check runs live as you tune colors and logo, with a plain pass-or-fix verdict and a readability score. But you do not need our tool to do it. Print one, walk to the far corner of the room, scan it under the actual lighting your customers will use, and only then order the other five hundred.