QR Code Print Rules: Size, Error Correction and Contrast That Actually Scan
A printed QR code scans when four things hold: the modules (the little squares) are physically big enough, there is a plain light border around the code, the dark-on-light contrast is strong, and the error-correction level matches how rough the placement will be. Get any one wrong and phones refuse it, which is why a screen-perfect code can fail on a poster.
You can build a print-ready code with the browser QR generator - choose the error-correction level and size, download it, then scale it up cleanly with the image upscaler if you need a large poster. The exact numbers for each rule are below, and they follow the QR specification, not guesswork.
Minimum physical size: think in modules, not millimetres
A QR code is a grid of modules. The rule of thumb for reliable phone scanning is a module size of at least 0.25 mm for close-range print and 0.4 mm or more for codes people scan from a distance, plus a quiet zone of at least four clear modules on every side.
The physical size that results depends on how much data you encode - a short URL produces a small grid (21x21 modules at version 1) while a long vCard or Wi-Fi string pushes the grid much larger, so the same printed width gives you smaller modules and a harder scan.
| Use case | Suggested printed size | Scan distance | Error correction |
|---|---|---|---|
| Business card / flyer | 20 - 25 mm | 10 - 20 cm | M or Q |
| Product label | 25 - 30 mm | 15 - 30 cm | Q |
| Poster / A4 sign | 60 - 100 mm | 0.5 - 1.5 m | M |
| Window / storefront | 150 - 250 mm | 1 - 3 m | L or M |
| Billboard | 400 mm+ | several metres | L |
The pattern is honest: the further away the viewer stands, the bigger the code must be, and the less data you should pack into it. A long URL that forces a dense grid is the most common reason a large poster still scans badly.
Error-correction levels: L, M, Q and H
QR codes deliberately waste some capacity to store redundancy so a damaged code still reads. The generator exposes the four standard levels: Low (7%), Medium (15%), Quartile (25%) and High (30%) recovery of codewords.
Pick by how rough the code's life will be. M is the sensible default. Use Q or H when the code may be scratched, folded, printed small, or partly covered - and crucially when you plan to put a logo in the middle, because the logo destroys modules that only higher error correction can survive.
The trade-off is density: higher error correction means a larger grid for the same data, so a long payload at level H can get big fast. Do not default to H out of caution; raise it deliberately when redundancy buys you something real.
Contrast, colour and the quiet zone
Scanners read the difference between dark modules and light background. Keep it high: near-black on white is safest. Reversing it (white on black) works on many cameras but not all, and coloured codes fail when the two colours are too close in brightness - a red-on-green code is unreadable to most phones even though you can see it.
If you tint a code, tint the modules and keep the background light, and check that a greyscale version still shows clear separation. The four-module quiet zone is not decoration: it is the border the decoder uses to find where the code starts, and cropping it against an edge or pattern is a top cause of no-scan.
Print quality and finish: DPI and matte vs gloss
Print at 300 DPI or better so module edges stay crisp; a blurry or dithered print softens the squares and defeats detection. For a code you will enlarge a lot, generate a large PNG and upscale it with the image upscaler rather than stretching a small file in a document editor, which produces jagged edges.
Choose a matte finish where the code will be lit from the front or photographed under lights: gloss creates specular glare that washes out modules on camera. Gloss is fine for controlled indoor posters viewed at an angle. If the printed piece will get handled, laminating under matte film protects contrast without adding shine.
The test routine before you print a run
Never trust a single on-screen check. Scan the actual printed proof, at the real distance, with more than one phone - iOS Camera and at least one Android scanner - because camera quality and decode libraries differ. Test in the lighting where it will live (a storefront code at dusk is a different code at noon).
Verify the payload too: a short link is easier to carry than a long raw URL, so route a dense vCard through a clean short link built with the URL shortener before you print, then re-encode. For product codes rather than URLs, the barcode generator covers the linear formats that QR is not meant to replace.
When you must hand the file to a print shop, convert the PNG to a crisp JPEG with PNG to JPG only if they ask for it; otherwise keep the lossless PNG so edges do not degrade.
Frequently Asked Questions
What is the smallest a QR code can be and still scan?
For close-range phone scanning, about 20 mm printed with a four-module quiet zone, keeping each module at roughly 0.25 mm or larger. Below that, or with a dense payload that shrinks the modules, reliability drops fast - so keep the encoded data short if the code must be small.
Which error-correction level should I choose for print?
Medium is the reliable default. Step up to Quartile or High for codes that will be handled, printed very small, placed outdoors, or covered with a centre logo, because higher levels rebuild more damaged modules at the cost of a denser grid.
Can a QR code be any colour?
It needs strong contrast between modules and background, so dark-on-light is the rule. Colours are fine if they differ enough in brightness; same-lightness pairs like red and green usually fail. Pure white-on-black inverts work on some cameras but not all, so test the exact combination.
Why does my printed QR code not scan when the screen version did?
Almost always the quiet zone was cropped, the print is low-resolution so modules blurred, gloss glare is washing out the code, or contrast dropped. Re-check the border, print at 300 DPI, switch to matte, and scan the physical proof at the real distance.
How much space do I leave around a QR code?
At least four modules of plain, light quiet zone on every side. It does not have to be huge, but it must be clear of text, borders and artwork, because the scanner uses that margin to locate the start of the grid.
Do I need a special generator to print QR codes?
No. The browser generator lets you set the level and size and downloads an image you can print; nothing is uploaded. For large formats, generate a big file and upscale it so edges stay sharp instead of stretching a small image.
More Guides
How to Compress an Image to 100 KB (or Any Exact Size) Without Losing Quality
A tested method for hitting 100 KB, 50 KB, 20 KB or 500 KB exactly: dimension math, quality steps, and the formats that shrink best. Works on phone and desktop, no upload required.
Passport and Visa Photo Sizes by Country (US, UK, Schengen, India, Canada, Australia, China)
Exact photo sizes for US, UK, Schengen, India, Canada, Australia and China applications โ millimetres, pixels, KB limits, background and head-height rules, plus how to prepare a compliant file.
How to Reduce PDF Size for Online Applications (2 MB, 5 MB, 100 KB and Other Limits)
Get scanned documents, CVs and certificates under any portal limit with real downsampling settings โ plus why your PDF is huge, why merging adds pages, and how to keep text selectable.
JSON Formatter for API Debugging: Nine Common Errors and Their Fixes
Line and column errors explained: trailing commas, single quotes, unquoted keys, escaping, arrays versus objects, and the XML-to-JSON gotchas that break integrations. Paste and validate instantly.
How to Merge PDFs on a Phone for Free (Android and iPhone), No Upload
Scan pages, join them into one PDF and email it - all in the browser on your phone. Real page-count and size limits, the scan-then-merge workflow, and how to stay under a 2 MB portal cap without a desktop or an app.
Random Passwords vs Passphrases: Entropy Maths and Real Crack Times
How many bits a password really has, why length beats symbols, honest offline-crack-time maths, and where a password manager and 2FA matter. Generate a strong random password in your browser with nothing sent anywhere.
Word Count for Assignments: Limits, What Counts, and How to Trim Safely
Exactly what a word counter counts, whether the bibliography and headings are included, why 250 words is 250 words, and how to trim to the limit without breaking citations. Count free, in your browser, with no upload.
EMI vs Mortgage Loans: Tenure, Total Interest and the 28/36 Affordability Rule
The real EMI formula, why a longer tenure lowers the payment but raises total interest, the 28/36 affordability rule, part-payment and balance-transfer maths - all worked through. Calculate free, in your browser.
Base64 Data URIs for Images: the +33% Overhead and When Inlining Wins
Why base64 costs about 33% more bytes, how data URIs save or add requests, the HTTP/2 reality, cacheability trade-offs, and inline SVG vs bitmap. Encode and decode a data URI free, in your browser.
Metric and Imperial Conversions: the Factors, the Traps and the Rounding Rules
The exact factors for length, weight and temperature, the tonne vs ton vs metric-cwt trap, rounding rules for construction and cooking, and how to convert without introducing error. Convert free, in your browser.
Website Slow? Fixing LCP, Render-Blocking JS and Core Web Vitals
What LCP, INP and CLS actually measure, lab vs field data, the biggest real fixes - image sizing, render-blocking JS/CSS, caching - and how to check server latency. Be honest that a quick checker is not PageSpeed Insights.
How to Create and Submit an XML Sitemap (and What Actually Gets Pages Indexed)
A practical, honest walkthrough: build an XML sitemap, host it, reference it in robots.txt, and submit it in Google Search Console and Bing - plus why a sitemap is a hint, not a guarantee of indexing.
robots.txt Directives Explained: User-agent, Allow, Disallow, Crawl-delay and Sitemap
A clear, tested reference for every robots.txt line - how matching works, the $ and * rules, crawl-delay reality, and the mistakes that silently block the wrong things.
Meta Description Length: The Character Band and the Pixel Cut Behind the Snippet
There is no official character limit. Here is how Google actually truncates by pixel width, the ranges that usually survive on desktop and mobile, and how to write a description that gets shown instead of rewritten.
AI Crawlers, GPTBot and llms.txt: What They Mean for Your Site
Who the AI bots are (GPTBot, ClaudeBot, PerplexityBot, Google-Extended and more), how to allow or block each in robots.txt, and an honest take on what llms.txt does and does not do.
Domain Authority: What DA Actually Measures (and Why It Is Not a Google Score)
Domain Authority is a Moz prediction, not a Google metric. What DA and PA really mean, why they differ between tools, how to use them honestly, and how our checker fetches them.
How to Find Broken Links Before They Cost You Traffic and Trust
Why 404s and dead outbound links leak value, the HTTP codes behind them, a practical one-page check workflow, and how to fix each failure - using a browser-based link checker.
Google Index vs Crawl: Two Different Things Most People Conflate
Crawling, indexing and ranking are three separate stages. What crawled-but-not-indexed really means, which signals let a page be indexed, and how to verify status honestly in Search Console.
Keyword Density: Why There Is No "Safe" Percentage to Hit
What keyword density actually measures, why chasing a target percentage is a myth, when the number is a useful red flag, and how to use a density checker without stuffing.
UTM Parameters: A Clean Naming Convention and Reusable Template
What utm_source, medium, campaign, term and content actually capture, the rules for a consistent lowercase naming scheme, a copy-paste template, and the traps that wreck attribution.
HTTP Status Codes Every Site Owner Should Recognise
A plain-language map of 200, 301, 302, 404, 410, 403 and 5xx codes, what each does to your SEO, and how to read a URL's real status without guessing.
A GDPR-Ready Privacy Policy Checklist (and Why a Generator Is Only the Draft)
What a GDPR privacy policy must disclose, the many obligations that live outside the document, how CCPA differs, and how to use a policy generator without mistaking a draft for compliance.
Plagiarism vs Paraphrasing: An Honest Guide to Originality Checks
Why a browser plagiarism checker cannot compare your text to the internet, what matched-source detection actually needs, how to paraphrase legitimately, and how to use originality tools without fooling yourself.
Reading and Writing Regular Expressions Without Fear
A plain-language tour of regex syntax, the JavaScript flags (g, i, m, s, u), capture groups, the greedy-vs-lazy and engine gotchas, and how to test a pattern safely before you ship it.
CSV to JSON: How to Convert Cleanly (Delimiters, Headers and Quoting)
The traps that silently corrupt CSV data - quoted fields, embedded commas and newlines, header-vs-array shape, auto-typed numbers and BOM - and how to convert to JSON safely.
XML to JSON: What Gets Lost and How to Convert Faithfully
XML and JSON are not equivalent trees. How attributes, repeated elements, mixed content, CDATA and namespaces map across - and where silent data loss and array-vs-object ambiguity bite.
Minify, Compress or Cache? Three Speed Levers People Confuse as One
HTML minification shrinks bytes, compression shrinks transfer, and a CDN or cache cuts latency and rework. What each layer actually changes and the order to apply them.
Formatting SQL for Readable Code Review (Without Pretending It Validates It)
A SQL beautifier only reflows text - it cannot prove a query is correct. How to format for review, pick a house style, and combine it with real validation and EXPLAIN.
MD5 vs SHA-256 (and Why Neither Should Hash Your Passwords)
What cryptographic hashes are, why MD5 is broken and SHA-256 is not, why both are wrong for passwords, and why base64 is not hashing at all.
URL Encoding and Reserved Characters: What to Escape and When
Percent-encoding, the RFC 3986 reserved vs unreserved split, the difference between encoding one parameter value and a whole URL, and the double-encoding traps that break requests.
Favicon Sizes: The Complete, Honest List (and What Actually Matters)
A favicon is not one file. Which sizes serve which surfaces - tab, apple-touch, PWA 192/512, legacy ICO - what SVG can and cannot replace, and what a generator can really output.
Unix Time and the 2038 Problem: What a Timestamp Really Is
Epoch time is seconds since 1970 UTC ignoring leap seconds. Why 32-bit signed counters roll over in 2038, the seconds-versus-milliseconds bug, and always storing UTC.
UUID vs Auto-Increment IDs: Which Primary Key to Use
Random UUID v4 versus sequential integer IDs: index locality, key size, global uniqueness, enumeration risk, and the time-ordered middle ground (UUIDv7/Snowflake/ULID).
How to Upscale an Image Without Pixelation (Honest Limits)
What 2x/4x/8x interpolation really does, why enlarging cannot invent captured detail, smooth versus nearest-neighbour, and when upscaling helps versus when to leave the image alone.
WebP vs JPEG: When to Use Each (and When Neither)
WebP is 25-35% smaller and adds transparency and animation, but JPEG still wins on reach. When each fits, lossy versus lossless, and how compatibility and the quality slider change the choice.
PDF to Word: What 'Editable' Really Means (Digital vs Scanned)
Digital PDFs carry a real text layer and convert cleanly; scanned PDFs need OCR with imperfect results. What a converter can and cannot give you, and how to get a good edit.
How to Scan Documents to PDF on Your Phone (Free, Private)
Turn camera photos of pages into a proper PDF: shoot pages that scan well, drag to reorder, set page size, margins and quality, merge batches, and keep everything on-device.
BMI: What It Measures and Where It Is Wrong
BMI is weight over height squared - a cheap screening proxy, not body fat or a diagnosis. Where it misleads: athletes, children, the elderly, pregnancy, and different ethnicities.
How to Calculate Age for Documents (Exact Years, Months and Days)
Age 'as of' a reference date, completed years, leap-day (Feb 29) birthdays, and unambiguous date formats for admissions, exams, visas and benefits paperwork.
Counting Business Days: Weekdays, Deadlines and the Long-Weekend Trap
Working-day math for contracts and delivery SLAs: exclude weekends, remember holidays are not built in, and handle the inclusive-versus-exclusive start-date off-by-one errors.
What a Valid Invoice Needs (and What Depends on Your Country)
The elements almost every invoice carries versus the jurisdiction-specific extras - tax/GST/VAT number, tax breakdown, e-invoicing, sequential numbering. A template is not tax advice.
Text-to-Speech for Accessibility: What It Helps and Its Limits
Browser TTS speaks text with the voices already on the device. Who it helps (low vision, dyslexia, proofreading), where it falls short, and why it complements rather than replaces accessible design.
Downloading and Using YouTube Thumbnails: What's Fair
You can grab a video's preview image, but usage rights are separate from the download button. Ownership, fair use, embedding versus re-hosting, and the safe rules - plus how the downloader actually works.
How to Convert HEIC to JPG on Windows (Free, and Without Uploading Your Photos)
Open iPhone HEIC photos on a PC: use a browser HEIC converter that decodes locally, or install the HEVC/HEIF extensions. What HEIC is, why Windows struggles, and when to convert.