Best practices
QR code best practices, tested
40 rules for QR codes that scan the first time, each in 1 sentence: design, size, content, type, placement and safety. Where guides disagree most, on inverted codes, logo size, contrast and minimum size, we tested Apple's built-in QR reader on simulated phone photos and give you our numbers.
- 40 rules, 1 sentence each
- 4 disputed rules tested
- A checklist you can print
Section 1 of 6
Design that scans
Colour, a logo and a frame tell people whose code it is and what it opens. Keep them inside these limits and the code still scans.
- 1.1
Deep violet on whiteDark to a camera, so it reads.
- 1.4
A 4-square marginNothing printed inside it.
Scan to open qrplify.com
qrplify.com
- 1.7
Logo 28% of the widthAt error level Q.
- 1.6
3 corners left wholePhones find the code by them.
- 1.8
Says what the scan doesWith the address under it.
- 1.1
Use a dark colour on a light background.
Black on white is the safest pair. Dark blues, purples and greens on white also read in our tests. Red read too, but scanners that use red light cannot see it.
Tested by QRplify · Sources: Denso Wave, Nielsen Norman Group
- 1.2
Pick 2 colours that differ in brightness, not only in hue.
A blue and a green that look nothing alike failed all 20 of our simulated scans: to a camera they are equally bright. Keep the pair at 3.5:1 or more: from there up, every pair read on both readers in our colour test.
Tested by QRplify
- 1.3
Avoid light codes on dark backgrounds: on a dark design, put the code on a light panel.
Apple's reader read all 66 of our inverted test images, but a second reader, OpenCV, read none in our colour test, and some fixed scanners cannot read them.
Tested by QRplify · Sources: Nielsen Norman Group
- 1.4
Leave a clear margin 4 squares wide on every side.
Keep text, borders and pictures out of it.
Sources: Denso Wave, Scanova, QRStuff, QR Tiger
- 1.5
Keep the code square and flat: no stretching, skewing or shadows.
A distorted code may not read at all.
Sources: Denso Wave, Scanova, QR Tiger
- 1.6
Leave the 3 large corner squares whole.
Phones find the code by these corners, so keep logos and frames off them.
Sources: QR Tiger, Scanova
- 1.7
Keep a centred logo, white border included, to at most 30% of the code's width, at error level Q or H.
That size read on every code we tried. Logos covering 25 to 30% of the area, as some guides suggest, failed. At Q a logo uses most of a short code's error correction, so use H where the code will get worn.
Tested by QRplify
- 1.8
Say what the scan does, next to the code.
"Scan to see the menu" tells people what they get. A logo on its own does not.
Sources: Nielsen Norman Group, Scanova
What the camera sees
- Blue on greenFailed all 20 simulated scans
- Deep violet on whiteFar apart: the pair on the code above
On a dark design: a light panel
qrplify.com
Section 2 of 6
Size and print
Size the code for the distance people scan from, then print it so every square stays sharp.
- 2.1
1 cm for every 10 cmEach code is sized for how far away it is read.
Not to scale. All 3 open qrplify.com.
- 2.2
2 cm at the leastThe card size, the smallest for anything held.
- 2.3
The squares grow tooAbout 1 to 2.4 mm each for a scan from 1 m.
- 2.1
Make the code 1 cm wide for every 10 cm of scanning distance.
Read from 50 cm, it needs 5 cm. Read from 2 m, it needs 20 cm. Add 20 to 30% for poor light, curved surfaces or older phones.
Sources: Nielsen Norman Group, Scanova, Uniqode, QRStuff, QR Tiger
- 2.2
Print it at least 2 cm across on anything people hold.
Cards, flyers, labels and packaging. A 1 cm code can be too small for reliable scans.
Sources: Nielsen Norman Group, Uniqode
- 2.3
For long links or long distances, check the size of the squares too.
On a model of a 12 MP phone camera, Apple's reader needed squares about 0.3 mm wide at 30 cm and about 1 mm at 1 m, or about twice that if the camera reads a video frame. In our harshest model, a dense 45-square code read from 1 m needed 11 cm, more than the 10:1 rule gives.
Tested by QRplify
- 2.4
Send the printer a vector file: SVG, EPS or PDF.
If you must use PNG, export it at 300 dpi at the final size. Avoid JPEG: it blurs the edges of the squares.
Sources: Scanova, Uniqode, QR Tiger
- 2.5
Print on a flat, matte surface.
Gloss throws glare, and curves, folds and seams bend the pattern.
Sources: Scanova, Uniqode, QR Tiger
- 2.6
On glass or clear plastic, put a white background behind the code.
A see-through code does not reflect enough light for a camera to find the light squares.
Sources: Denso Wave, Uniqode
- 2.7
Outdoors, use error level H and weatherproof material.
Dirt, scratches and sun wear the squares down, so laminate it matte, use UV resistant ink and replace the code every 12 to 18 months.
Sources: Uniqode, Denso Wave
- 2.8
Convert the colours to CMYK, then check a printed proof.
Colours shift in print, and 2 that stood apart on screen can move closer.
Sources: Uniqode
Section 3 of 6
Make the code
What the code holds, and its error level, decide how many squares it has. Shorter content means fewer, bigger squares at the same print size.
- 3.1
Short content, big squaresThe left code can print smaller and still read.
- 3.4
Error level M for bothEnough for clean indoor print.
- 3.1
Keep what the code holds short.
At error level M, qrplify.com makes 25 squares across. A blog page with tracking tags, 113 characters, makes 45.
Tested by QRplify · Sources: Denso Wave, QR Tiger
- 3.2
Link to the exact page the code promises, not your home page.
People expect the page to match where they found the code.
Sources: Nielsen Norman Group, QR Tiger
- 3.3
Make that page work on a phone, over HTTPS.
Everyone who scans arrives on a phone, and safety tips tell people to look for HTTPS.
Sources: Nielsen Norman Group
- 3.4
Choose the error level for the place: M indoors, Q or H with a logo, H outdoors.
A higher level can add squares: the blog page's code grows from 45 at M to 57 at H, so use only what the place needs.
Tested by QRplify · Sources: Denso Wave, Uniqode, QR Tiger
- 3.5
Test the printed proof, not the screen.
Use 3 phones, a current iPhone, a current Android and 1 a few years old, in 2 kinds of light, straight on and at an angle, at the real distance.
Sources: Uniqode, Scanova, QRStuff, QR Tiger
- 3.6
Test again once the code sits in the final layout.
Layout tools can trim the margin or shrink the code. The QR code decoder shows exactly what a file holds.
Sources: QR Tiger
Static or dynamic?
A static code holds your content in its pattern: it needs no account, and it can never change. A dynamic code holds a short link: you can change where it goes after printing and count its scans, and it keeps working while the provider keeps that link running.
Choose dynamic when the destination may change, when you want scan counts, or when the address is long. Static vs dynamic QR codes compares them in full.
Section 4 of 6
Pick the right type
Most jobs need a plain web link. Choose another type only when it saves people a step.
- 4.1
A web link by defaultEvery phone opens it.
- 4.2
A contact card for detailsOnly the fields people need.
- 4.1
Use a web link for anything that lives on a page.
Phone cameras open it in the browser, and you can update the page behind it at any time.
Sources: ZXing
- 4.2
Use a contact card to share your details.
A scan offers to save them to the phone's contacts. Fill in only the fields people need: each one adds squares.
Sources: ZXing
- 4.3
Use a WiFi code only where sharing the password is fine.
The password sits inside the code, and the phone asks before it joins.
Sources: ZXing
- 4.4
For reviews, link straight to the review form.
A scan should open the box to write in, not a profile page.
Sources: Nielsen Norman Group
- 4.5
For an app, use 1 link that sends each phone to its own store.
The same code then serves the App Store and Google Play.
Sources: Nielsen Norman Group
- 4.6
If a menu or a document may move to a new address, use a dynamic code.
A static code to a page you edit keeps working. A dynamic one also survives a new file or a new address.
Sources: Uniqode, QR Tiger
- 4.7
On a screen people already hold, use a link instead of a code.
People cannot easily scan a code shown on their own phone. In emails, texts, social posts and mobile pages, let them tap a link.
Sources: Nielsen Norman Group
- 4.8
Where people pass in under 15 seconds, show a short web address instead.
Roadside billboards and rotating screens rarely leave time to find a phone and scan.
Sources: Nielsen Norman Group
Section 5 of 6
Place it where people scan
A code works where people have a reason, a moment and a free hand to scan it.
- 5.2
On a tablePeople sit, so they have time and a free hand.
QRplify
Scan to open qrplify.com
qrplify.com
- 1.8
Says what the scan doesBefore anyone lifts a phone.
- 5.5
The address under the codeTo type it, or to check where it goes.
- 5.1
Put the code where people already look, next to what it is about.
A code beside the thing it describes gets noticed. One in a corner gets missed.
Sources: Nielsen Norman Group
- 5.2
Place it where people can stop and hold a phone still.
Tables, counters, packaging and waiting rooms work. Moving vehicles, road signs and busy doorways do not.
Sources: QR Tiger, Nielsen Norman Group
- 5.3
Hang posters at eye level, within reach.
Not near the floor, and not across a fold or a corner.
Sources: Scanova, Uniqode
- 5.4
Check the light where the code will hang.
Glare and dim corners stop scans. In a dim place, print the code bigger.
Sources: QRStuff, Nielsen Norman Group
- 5.5
Print the short web address under the code.
People without a camera handy can type it, and everyone can see where the code goes.
Sources: Nielsen Norman Group
Section 6 of 6
Keep it trustworthy
Scammers stick their own codes over real ones. UK victims reported losing £3.5m to QR code scams in 2024, and Action Fraud says fake codes turn up most often as stickers on car park payment machines.
- 6.1
The address, printedUnder the code, for people to check.
Scan to open qrplify.com
qrplify.com
After the scan, before the page opens
The address matches the one under the code.
- 6.1
The address, on the phoneShown before the page opens. The 2 match.
- 6.2
A design people knowA plain sticker over it stands out.
- 6.1
Print the address the scan will show beside the code.
Phone cameras usually show it before the page opens, so people can check that the 2 match. With a dynamic code that is the short link: print it, or use one on your own domain.
Sources: Which?, Heartland, QR Tiger
- 6.2
Give the code a design people know as yours.
A plain sticker over your branded code is easier to spot. Branding alone does not stop copies: fake parking stickers have carried the real operator's logo.
Sources: Heartland, Which?
- 6.3
Check your codes in public places often for stickers stuck over them.
Car parks, stations and other open spaces are where fake codes turn up most.
Sources: NCSC, Which?, Heartland
- 6.4
When an offer or an event ends, point the code to a page that says so.
Printed codes outlive their events. Send late scans to what is current.
Sources: Nielsen Norman Group
- 6.5
Keep the page behind the code working for as long as the print is out.
A code is only as good as the page it opens. Do QR codes expire? covers what stops each kind.
Sources: Nielsen Norman Group
Method
How we tested
What we read, how we read it, and what we left out.
Guides disagree on inverted codes, logo size, contrast and minimum size, so we tested them on 18 October 2026. We made 2 real codes, one for a short address and one for a long address with tracking tags, and read 7,344 images of them with Apple's Vision framework, the code reader built into Apple's devices, on a Mac. Some images were clean files. The rest were made to look like phone photos, with a slight turn, blur, noise and JPEG compression.
18 control checks ran first: clean codes read, and a blank image and codes with their corner squares wiped read as nothing, as they should.
What we did not test: a phone's live camera, Android phones, readers other than Apple's (beyond OpenCV in our colour test), real photographs, glare, curved surfaces, and more than 1 logo design.
Sources
- QRplifyour tests of inverted codes, logo size, contrast and minimum size, 18 October 2026
- QRplifyour colour test of Apple's reader and OpenCV
- Denso Wavethe inventor of the QR code: its guides and FAQ
- Nielsen Norman GroupQR-code usage guidelines, February 2024
- Which?quishing scams warning, 25 June 2025
- NCSCthe UK National Cyber Security Centre: QR codes, what's the real risk?, 8 February 2024
- Heartland5 ways you can protect your small business clients against QR code scams, 3 September 2022
- ZXingthe open-source barcode project: barcode contents (contact cards and WiFi)
- ScanovaQR code guidelines
- UniqodeQR code printing guideline
- QRStuffQR code design best practices
- QR TigerQR code best practices
Before you print
The checklist
All 40 rules as boxes to tick. Tick them here, or print the list.
Keep reading
Get the details right
Static vs dynamic QR codes
What each kind holds, when each one fits, and what each costs.
Read the guideDo QR codes have to be black and white?
Brand colours, inverted codes, gradients and logos, tested on 2 readers.
Read the postMinimum QR code size
How small a code can print and still scan, by distance and link length.
Read the postDo QR codes expire?
What stops each kind of code, and how to fix one that stopped working.
Read the answerMake yours
Make a code that follows every rule
Static codes are free with no account. A free account adds unlimited dynamic codes you can edit after printing.