A QR code scans from your laptop screen. You put it into a brochure, reduce it to fit the layout, export a PDF, and send it to a printer.
That first successful scan only verified the first artifact.
The printed code has different conditions: different physical dimensions, contrast, surface finish, surrounding artwork, camera distance, and possibly different pixel edges after export.
For developers who generate QR codes, “the encoder returned an image” is not the same acceptance condition as “the final customer can open the correct destination.”
Here is a practical preflight workflow for ordinary QR Code symbols. It is not guidance for Micro QR, which has different layout requirements.
1. Understand the three sizes involved
A QR code has at least three separate size concepts:
- Symbol size: the number of modules in the encoded square.
- Export size: the number of pixels or vector dimensions in the downloaded file.
- Placement size: the physical size of the code on the final material.
A module is one cell in the symbol's grid.
DENSO WAVE documents versions from 1 to 40, starting at 21 × 21 modules and increasing by four modules per side with each version. See its version and capacity explanation.
For standard QR Code, that gives:
function modulesForVersion(version) {
if (!Number.isInteger(version) || version < 1 || version > 40) {
throw new RangeError("QR version must be an integer from 1 to 40");
}
return 21 + 4 * (version - 1);
}
Saving a larger PNG changes export resolution. It does not make a physically tiny code larger when the designer places it at the same width on a business card.
2. Reserve the quiet zone before decorating the layout
The quiet zone is clear space around the symbol. It helps separate the code from nearby text, borders, and artwork.
For ordinary QR Code, DENSO WAVE specifies a four-module margin on all four sides. See its code-area guidance.
That means a 29-module symbol needs a 37-module-wide area when the minimum margin is included:
29 symbol modules + 4 left + 4 right = 37 modules
The same calculation applies vertically.
Do not crop the white border away because it looks like wasted space. A decorative frame inside that clear area is also using the margin.
If a generator lets you choose a margin smaller than four modules, use four or more for this standard QR print workflow. A code occasionally scanning with less space is not evidence that the smaller margin is a reliable production setting.
3. Calculate module size at final placement
Here is a planning helper:
function qrPrintPlan({ version, outerWidthMm, dpi = 300, margin = 4 }) {
if (!Number.isInteger(version) || version < 1 || version > 40) {
throw new RangeError("Invalid standard QR version");
}
if (!Number.isFinite(outerWidthMm) || outerWidthMm <= 0 ||
!Number.isFinite(dpi) || dpi <= 0 ||
!Number.isInteger(margin) || margin < 4) {
throw new RangeError("Invalid dimensions, DPI, or quiet zone");
}
const symbolModules = 21 + 4 * (version - 1);
const totalModules = symbolModules + 2 * margin;
const moduleMm = outerWidthMm / totalModules;
return {
symbolModules,
totalModules,
moduleMm,
nominalPrinterDotsPerModule: moduleMm * dpi / 25.4,
nominalOuterPixels: outerWidthMm * dpi / 25.4,
};
}
console.log(qrPrintPlan({ version: 3, outerWidthMm: 25 }));
For this illustrative version-3 code placed in a 25 mm outer square, including the four-module margin:
- Total width is 37 modules.
- Each module is approximately 0.676 mm wide.
- At 300 DPI, that corresponds to approximately 7.98 nominal printer dots per module.
These numbers describe geometry, not a certified scan threshold. Real output also depends on the printer, substrate, ink spread, scaling, and camera conditions.
There is no universal “make every QR code 2 cm wide” rule that solves every payload and viewing distance. At the same physical width, a denser symbol has smaller modules.
If you deliberately use an integer raster scale, a 37-module-wide artifact at eight pixels per module is 296 pixels wide. Preserve that grid when exporting. Do not assume a later arbitrary resize will preserve it.
4. Payload length is a design input
A long URL full of parameters can require a denser symbol than a short URL. The exact version depends on encoding mode, content, and error-correction level; character count alone is not a reliable version calculator.
For print campaigns, ask whether all that data needs to be encoded directly.
| Approach | What the symbol stores | Main dependency |
|---|---|---|
| Direct static URL | The final address | That address remaining usable |
| Static QR containing a short link | A short redirect address | The redirect service and mapping |
| Editable dynamic QR | Usually a stable redirect address | The service resolving it to the current destination |
A dynamic QR image does not rewrite its printed modules when the destination changes. The server-side mapping changes.
A shorter redirect address can reduce the payload, but introduces a dependency on that service. The benefits and the operational responsibility belong in the same decision.
If a printed item must remain useful for years, plan who owns the destination, who can update it, and what happens when the service or subscription changes. A technically valid symbol can still point to an unavailable page.
5. Error correction is not permission to cover anything
QR error correction helps recover data from damage. DENSO WAVE explains the trade-off: greater correction capability adds redundancy and can increase the required symbol size. Its percentages concern restoration of codewords, not an arbitrary percentage of the picture's area. See the error-correction explanation.
That distinction matters for logos.
“Maximum correction” does not mean you may cover any large central region, erase finder patterns, or ignore the quiet zone. The location and kind of damage matter.
My recommended baseline is a plain, high-contrast code with no overlay. Confirm that baseline first. Add branding only when it survives the same final-material tests.
If branding causes failures, remove it before reducing the margin or making the modules smaller. The symbol's primary job is to communicate its payload.
6. Export for the actual production path
Choose a format with the next step in mind:
- SVG: useful when the layout tool and printer preserve the vector artwork correctly.
- PNG: useful for a controlled raster workflow with sufficient resolution at final placement.
- JPEG: a poor default for a sharp module grid because lossy artifacts can alter edges.
Vector export does not guarantee print success. A later tool may rasterize it, crop the margin, apply transparency, or scale it incorrectly.
For raster artwork, avoid repeated resampling and do not turn the code into a low-quality compressed photo asset. Keep dark modules distinct from a light, clear background.
A transparent background deserves particular attention: placing it over a photograph can destroy the clear quiet zone even when the original export looked fine on white.
Verify the delivered PDF or final design export, not only the generator's preview.
7. Test the landing experience as well as the symbol
There are several independent success conditions:
- The camera recognizes the symbol.
- The decoded payload is correct.
- The address resolves and any redirects complete.
- The landing page works on the customer's phone.
- The page presents the action promised beside the code.
If a restaurant card says “View menu,” opening a desktop-only download page is not a successful customer experience even though decoding worked.
Use an ordinary camera app and, where relevant, a second scanner implementation. Test the final printed proof on more than one device. Check a fresh navigation rather than relying only on an already-open page.
Do not publish private test credentials inside a QR payload. For WiFi or contact-card codes, inspect the actual decoded content and make sure you intended to distribute it.
8. Build a small preflight matrix
Before committing to a print run, I would test:
| Dimension | Cases to include |
|---|---|
| Material | Actual paper, label, packaging, or sign surface |
| Placement | Final size and final surrounding artwork |
| Lighting | Normal use, dimmer light, and realistic glare |
| Angle | Straight-on and a plausible tilted view |
| Device | More than one phone, including an older one |
| Distance | The distance a customer can comfortably use |
| Destination | Correct content, working redirects, mobile usability |
Write down the result. “It scanned once” is weaker evidence than “these devices opened the correct page from the approved print proof under these conditions.”
When a failure appears, change one variable at a time: increase placement size, restore the margin, simplify the payload, remove an overlay, or improve contrast. That makes the cause easier to identify.
Generate the code, then approve the proof
You can create static QR codes and download PNG or SVG using BatchSet's QR Code Generator. Dynamic QR codes and scan tracking are available with a free account.
For standard QR printing, explicitly select a quiet zone of at least four modules, choose appropriate dimensions, and test the final proof. A generator prepares the artifact; the real-world scan test approves it.
Top comments (0)