Most QR codeA 2D matrix barcode that encodes data in a square grid of black and white modulesA single black or white square in the QR grid. The number of modules per side scales with the QR versionThe size of a QR code, numbered 1 (21×21 modules) through 40 (177×177). Higher versions store more data but require more printed space. Read more →, from 21×21 modules for version 1 up to 177×177 for version 40. Read more →. Read more → articles assume the scanner is an able-bodied adult with a new phone, steady hands, and good light. In production that assumption breaks for a meaningful share of every audience. The World Health Organization estimates 2.2 billion people globally have a near or distance vision impairment, the World Bank puts the share of people living with some form of disability at roughly 16 percent worldwide, and a much larger group ages into mild vision, motor, or comfort-with-tech limits over a lifetime. A QR experience that excludes them is leaving real users at the entry door.
This post is the playbook I use when accessibility is in scope. It covers the seven decisions that change scan rates for users with low vision, color blindness, motor difficulties, or low tech-comfort, plus the screen-reader pattern for QR codes embedded on web pages. Most of these are small changes. None of them cost much. The combined effect on real-world scan rates is large.
Size for hands and eyes that don’t cooperate
The standard sizing rule is one-tenth of the expected scan distance. A 10 cm code reads cleanly from one metre. That math assumes a user who can hold the phone steady at the optimal range and frame the code on the first try.
For accessible deployments, raise that floor by 30 to 50 percent. The reason is mechanical, not optical. Low-vision users hold the phone much closer to the surface, often two to ten centimetres away. At that distance, a code printed for one-metre viewing fills the frame and gets cropped at the edges. The scanner needs to see all four corners and the surrounding quiet zoneThe unprinted margin of at least four modules' width that must surround every QR code. Read more → in one capture. A bigger code gives a bigger margin of error before the corners go off-screen.
Hand tremor adds the same pressure from the motor side. A user with mild Parkinson’s, essential tremor, or arthritis cannot hold a phone perfectly still at 30 cm. The code has to tolerate motion blur and slight angle drift. Larger modules are more forgiving of both.
A practical floor I use:
- Table-distance scan: minimum 4.5 cm (versus 3 cm for general).
- Counter sign: minimum 14 cm (versus 10 cm).
- Wall poster: minimum 28 cm (versus 20 cm).
The full sizing math is in the size and print guidelines; use this post’s numbers when accessibility is on the requirement list.
Hold contrast above the WCAG floor
WCAG 2.2 sets minimum contrast ratios for text and graphical objects. Normal text needs 4.5 to 1; large text and meaningful non-text objects need 3 to 1. A QR code’s modules are graphical objects that must be readable for the design to function, so the safe operating point is 4.5 to 1 between the dark and light modules.
Black on white is 21 to 1, the comfortable maximum. Most brand-color treatments fall well below that. A navy on cream like the Fast QR palette runs around 12 to 1, still safe. A mid-grey on light cream runs closer to 4 to 1 and is borderline. Anything below 4 to 1 is unsafe regardless of how good it looks on a perfect monitor in your office.
Two specific traps to avoid:
- Color-blindness equivalence. A red-on-green code looks high-contrast to a typical viewer and almost invisible to a deuteranope or protanope. Roughly one in twelve men have a form of red-green color blindness. The fix is to design the code on the lightness axis, not the hue axis. If the modules and background have the same luminance, no color filter or assistive lens recovers them.
- Reverse-contrast codes. Light modules on a dark background still scan when the contrast ratio is high enough, but many older scanner apps and assistive camera modes assume dark-on-light. The safer default is dark modules on a light background, then verify reverse-contrast variants on at least three devices including one older budget phone.
The print-ready QR checklist covers contrast at the production-quality level. Use that for general scan reliabilityHow consistently a QR code scans across different devices, lighting conditions, distances, and orientations. Read more → and use the 4.5 to 1 floor here when accessibility is on the requirement list.
Print the destination URL as a typed fallback
The single highest-leverage accessibility addition is a short typed URL near the code. Something like example.com/menu or exmp.co/sp1.
This recovers users whose camera is broken or restricted, whose hand tremor makes aiming impractical, who use a screen reader on a separate device and can read the URL aloud, who want to type the address on a desktop to keep the link, or who simply do not trust QR codes after years of phishing-overlay news. The fallback is also the single best defense against the printed-QR sticker overlay attack, because a guest who notices the URL doesn’t match the brand will hesitate before scanning.
For the URL to be typed, it needs to be short and human-readable. A 60-character tracking URL is unusable. A custom short domain (yourbrand.link/menu) or a clean path on the main site (yourbrand.com/qr/menu) is what makes the fallback real. Tracking can ride underneath via a server-side redirect.
For dynamic QR setups the same short URL becomes the canonical form; the long tracking URL never has to appear on the print.
Pair the code with an NFC tag where the surface allows
For users who cannot aim a camera, a tap-based fallback removes the hardest motor barrier in the QR scan flow. NFC tags read at one to four centimetres with no aiming, no light, and no framing decisions. A user with low vision, a tremor, or limited fine motor control can hover the phone within a few centimetres of the surface and trigger the URL.
The cost is the chip itself, $0.10 to $1 per unit, plus the encoding workflow. For high-touch surfaces — a hotel room card, a museum exhibit, a clinic check-in pad — that cost is small relative to the inclusion benefit. The pattern is QR primary, NFC secondary, both pointing at the same destination URL. Users who can aim a camera scan; users who can’t tap.
The QR vs NFC comparison covers the full trade-off matrix. For accessibility specifically, NFC is rarely the only carrier — it’s the second carrier added on surfaces where the audience benefits.
Place codes within reach for wheelchair and short-standing users
Vertical placement on a wall, kiosk, or counter has to work for a seated user, a standing user, and a child. The US ADA Standards for Accessible Design specify a forward-approach reach range of roughly 38 to 122 cm above the finished floor (15 to 48 inches). For QR codes specifically, the safe target is the centre of the code at 100 to 120 cm above the floor.
Two corollaries that get missed:
- Don’t place codes above 140 cm on a vertical surface. A wheelchair user cannot reach to aim their phone at that height, and a tall person aiming downward usually catches glare from overhead lighting.
- Don’t place codes that require leaning over a counter. A user with limited mobility cannot lean. The code should be on the front face of the counter at standing-eye level, not on the horizontal countertop.
For seated-table deployments (restaurants, clinics), table-tent codes work well because they’re already in the optimal reach range when the user sits down. For walk-up surfaces, the placement decision is where most accessibility audits find regressions.
Use high error correction when adding a logo or stylized art
QR codes use Reed-Solomon error correctionMathematical redundancy built into every QR code that lets it scan correctly even if part of the matrix is damaged, dirty, smudged, or covered (for example by a logo). Read more →, which lets the scanner recover the original data even when part of the code is damaged or occluded. The four levels are L (7 percent), M (15 percent), Q (25 percent), and H (30 percent). The number is the share of modules that can be lost before decoding fails.
Two scenarios where error correction protects accessibility:
- Hand tremor and partial framing. A user with shaky hands often catches only three of the four finder patternsThe three large squares in the corners (top-left, top-right, bottom-left) of every QR code. Scanners use them to detect a QR in the camera frame, lock onto it, and determine its orientation. Read more → in any given camera frame. Some scanner apps stitch frames; others wait for a clean single frame. Higher error correction means a single imperfect frame is more likely to decode anyway.
- Logos and stylized art. A centred logo occludes a chunk of modules. At level L, even a small logo risks tipping the code below the recoverable threshold. At level H, a logo covering up to 25 percent of the code still scans reliably. The error correction explainer covers the math.
The trade-off is that higher error correction increases module density (more modules per code), which means a slightly larger print to keep individual modules above the minimum size. For accessibility, that compromise is worth it. The combination is: level H, larger overall print, larger modules at the same data length. Each pass helps the user with motor or vision difficulty.
Set screen-reader patterns for QR codes on web pages
When the QR code lives on a webpage — a confirmation page, a ticket, a shipping notice — assistive technology has to convey what scanning will do. Three patterns:
- Alt text describes the action, not the pattern. The right alt text is
QR code linking to your boarding pass at example.com/bp/AB12, notsquare pattern of black and white squares. The user wants to know where the code goes, not what it looks like. - Pair the QR image with a real anchor link. The screen-reader user does not need the image; they need the destination. Render the destination URL as a real
<a>link near the image, with descriptive link text (Open boarding pass). The QR is for the sighted in-person user; the anchor is for everyone else. - Don’t use the QR as the only way to access the action. A button or link to the same destination, on the same page, removes the QR from the critical accessibility path entirely. The QR becomes a convenience for the user who wants to hand the page to a phone; the action remains reachable for the user who is already on the device.
For embedded codes generated client-side, set role="img" and aria-label on the SVG with the action description. Don’t leave a screen reader to announce dozens of <rect> elements as graphics.
Translate the destination page
A printed QR in a multilingual environment is only as inclusive as its destination. A guest who scans a French QR and lands on an English-only page has been excluded by the destination, not the code. The accessibility solution is on the web side: a destination that detects browser language and serves a translated version, or a clearly-marked language switcher above the fold.
For a use case like a restaurant menu or an event check-in, the audience often spans multiple languages. The QR code itself doesn’t change. The destination needs to.
The same logic applies to plain-language reading levels. Many users with cognitive differences, lower literacy, or simply less tech comfort benefit from short sentences, larger type, and a clear next action above the fold. A 1,200-word marketing page with the action buried at the bottom fails them silently.
Wrap-up
Accessibility on QR codes lives at three layers: the print itself (size, contrast, error correction), the surface (placement, fallback URL, optional NFC tag), and the destination (alt text, language, plain language). None of the seven decisions in this post are expensive. Together they recover a meaningful share of users that an able-bodied test pass would have written off.
The honest test is not whether the code scans for you on a new phone in good light. It’s whether it scans for the user with low vision holding the phone five centimetres from the surface, the user with essential tremor framing the code on the third try, the user in a wheelchair reaching up at 130 cm, and the user who would rather type the URL than touch a camera. Design for those users and the rest of the audience benefits too.
Sources
- Web Content Accessibility Guidelines (WCAG) 2.2 — Minimum contrast ratios for text and non-text content; the 4.5:1 and 3:1 thresholds referenced in this post.
- WHO — Vision impairment and blindness — Global estimate of 2.2 billion people living with near or distance vision impairment.
- World Bank — Disability inclusion — Background on the share of the global population living with some form of disability.
- ADA Standards for Accessible Design — Reach ranges — Forward and side reach ranges for wheelchair users; the source for the 38–122 cm placement recommendation.
- ISO/IEC 18004:2015 — QR code error-correction levelsOne of four settings that controls how much damage a QR code can tolerate: L (about 7%), M (15%), Q (25%), or H (30%). Read more → and the module-recovery thresholds (7/15/25/30 percent) referenced for logo placement decisions.