Best practices
QR code best practices, tested
63 rules for QR codes that scan the first time, from design and print to screens, placement and safety, each with what to avoid. Where guides disagree most, on inverted codes, logo size, contrast and minimum size, we tested Apple's own QR reader on simulated phone photos and give you our numbers.
- 63 rules, 1 sentence each
- 4 disputed rules tested
- A checklist you can print
In 10 seconds
The short version
The 10 rules that matter most. Tap one to read its section.
- Dark code on a light background
- A clear margin, at least 2 squares wide
- Say what the scan does
- 1 cm wide for every 10 cm away
- Print on flat, matte stock
- On a phone, give a link instead
- Keep what the code holds short
- Test the printed proof on 3 phones
- Place it where people can stop
- Print the address the scan shows
Section 1 of 8
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.
Deep violet on whiteDark to a camera, so it reads.
A margin of 2 squares or moreNothing printed inside it.
Scan to open qrplify.com
qrplify.com
3 corners left wholePhones find the code by them.
Logo 28% of the widthAt error level Q.
Says what the scan doesWith the address under it.
Avoid
- Pale on whiteToo little contrast to read
- Light on darkSome readers cannot find it
- A logo too bigOver 30% of the width
- Text in the marginWords run into the code
-
Use a dark colour on a light background.
Avoid: Pale colours, or colours close to the background.
Why
Black on white is safest. Dark blues, purples and greens on white read in our tests; red did too, but scanners that use red light miss it.
-
Pick 2 colours that differ in brightness, not only in hue.
Avoid: Pairs like blue on green that turn the same grey.
Why
A blue and a green that look nothing alike failed all 20 of our simulated scans. Keep the pair at 3.5:1 or more: every pair from there up read on both readers.
-
On a dark design, put the code on a light panel.
Avoid: White squares straight on a dark background.
Why
Apple's reader read all 66 of our inverted images, but a second reader, OpenCV, read none in our colour test, and some fixed scanners cannot read them.
-
Leave a clear margin at least 2 squares wide on every side.
Avoid: Text, borders or pictures inside the margin, or a code trimmed to its edge.
Why
In our test, 2 squares read as well as the standard's 4 on white, dark and busy designs; at about 1 square, a common scanner library missed up to 1 in 4 on dark and busy ones. The standard asks for 4, so use 4 where there is room.
-
Leave the 3 large corner squares whole.
Avoid: Logos, frames or stickers over a corner.
Why
Phones find the code, and which way up it is, by these 3 squares. Cover any of them and the code may not read.
-
Keep the code square, flat and undistorted.
Avoid: Stretching, skewing, mirroring, shadows or heavy restyling.
Why
A squashed, mirrored or heavily styled code may not read at all. To resize it, keep its proportions.
-
Keep a centred logo within 30% of the width, at level Q or H.
Avoid: Big logos, and logos at level L or M.
Why
Measured with its white border, that size read on every code we tried, while logos covering 25 to 30% of the area, as some guides suggest, failed. Use H where it will get worn.
-
Say what the scan does, next to the code.
Avoid: A bare code, or words too small to notice.
Why
"Scan to see the menu" tells people what they get, and a logo alone does not. If only 1 app can read the code, name it.
-
Keep any gradient dark from end to end.
Avoid: A gradient that fades into a pale colour.
Why
Judge a gradient by its lighter end, and keep that end at 3.5:1 or more. Guides warn gradients can blur the squares, so test any you use.
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 8
Size it for the distance
Size the code for the distance people scan from. The farther away they stand, and the longer the link, the bigger it needs to be.
1 cm per 10 cmEach size matches the distance it is read from.
Not to scale. All 3 open qrplify.com.
2 cm at the leastThe card size, for anything held.
20 cm from 2 mThe poster size, for a wall.
The squares grow tooAbout 1 to 2.4 mm for each metre away.
Avoid
- Too small for distanceCard size on a poster
- Too dense to resolveLong link, tiny squares, blurred
-
Make the code 1 cm wide for every 10 cm of scanning distance.
Avoid: Sizing by eye, or by the space left over.
Why
Measure from where people will stand: from 50 cm it needs 5 cm, from 2 m, 20 cm. Add 20 to 30% for dim light, curves or older phones.
-
Print it at least 2 cm across on anything people hold.
Avoid: Codes under 2 cm on cards, labels and packs.
Why
A 1 cm code can be too small for reliable scans, so guides agree on 2 cm. Go bigger for long links or rough paper.
-
For long links or long distances, check the size of the squares too.
Avoid: A dense code sized only by the 10:1 rule.
Why
With a model 12 MP camera, Apple's reader needed squares of about 0.3 mm at 30 cm and 1 mm at 1 m. A dense code from 1 m needed up to 11 cm.
-
From the nearest spot, check the whole code fits on a phone screen.
Avoid: A wall code too big to frame from close up.
Why
Apple and Google both tell people to get the whole code inside the camera's view, so a code can be too big for where people stand.
Section 3 of 8
Print it well
Paper, ink, finish and weather all change what a camera sees. Pick the material for where the code will live, and keep every square sharp.
Matte cardNo shine to throw glare back.
Flat, away from foldsSo the squares stay square.
Scan to open qrplify.com
qrplify.com
Printed on matte card
Dark ink, white stockClear contrast once printed.
Clear card all roundThe margin survives the trim.
Avoid
- Gloss and glareLight bounces off the squares
- Across a foldThe crease breaks the pattern
- On a tight curveThe squares bend away
- A blurry fileLow resolution, soft edges
-
Send the printer a vector file: SVG, EPS or PDF.
Avoid: Screenshots, JPEGs, or a small PNG stretched to fit.
Why
Vectors stay sharp at any size. If you must use PNG, export it at 300 dpi at the final size; JPEG blurs the edges of the squares.
-
Print on a flat, matte surface.
Avoid: Gloss, foil or metallic ink under bright light.
Why
Gloss throws glare back at the camera. If you laminate, choose matte: it spreads the light instead of mirroring it.
-
Keep the code on 1 flat panel, clear of folds, seams and curves.
Avoid: A crease, seam or tight curve through the code.
Why
Each one bends or breaks the pattern. On a bottle or cup, use the flattest part, or a flat label or tag.
-
On uncoated or rough paper, print the code bigger.
Avoid: Small codes on newsprint, kraft or napkins.
Why
Porous paper spreads the ink and blurs the squares, so guides add 20 to 25%. Under 2.5 cm, use a smooth, coated stock with a matte finish.
-
Convert colours to CMYK, then check the contrast on the real paper.
Avoid: Screen colours sent to print, or ink close in tone to the paper.
Why
Colours shift in print, and 2 that stood apart on screen can move closer. On coloured stock, keep the code far darker than the sheet.
-
On glass or clear plastic, put a white background behind the code.
Avoid: Clear film, or a file with a transparent background.
Why
Clear material reflects too little light, so the light squares show whatever is behind them. On a window, test from outside, by day and after dark.
-
Outdoors, use weatherproof material and error level H.
Avoid: Paper outside, or prints with no laminate in full sun.
Why
Sun and dirt wear the squares down. Laminate it matte, use UV resistant ink, and replace it when it fades: guides expect anywhere from 12 months to 7 years.
-
On clothing and fabric, print the code at least 5 cm across.
Avoid: Stretchy or ribbed fabric that warps the squares.
Why
The weave breaks up fine squares. Keep the link short, and test on the real fabric before the full run.
-
On metal, wood or engraved finishes, test a scrap of the real material first.
Avoid: Engraving that leaves light squares on a dark finish.
Why
Etched and engraved codes have less contrast, and engraving can swap which parts look dark. Print it bigger, at level H.
-
On receipts and thermal labels, use codes people will scan soon.
Avoid: A code people need for months, on thermal paper.
Why
Thermal paper fades in heat and sun. For codes under 2.5 cm, a label maker recommends a printer of 300 dpi or more.
Section 4 of 8
On screens and phones
A phone cannot easily scan a code on its own screen, so on phones, give people a link to tap. On every other screen, size the code in pixels and give it time.
On the big screenA code for phones across the room.
A solid light panelNever straight over video.
Scan to open qrplify.com
On the phone itself
Open qrplify.comA link to tap, no code
A link on the phoneA phone cannot easily scan itself.
The same words on bothEach says what will open.
Avoid
- Code on a phoneIts own camera cannot scan it
- Over moving videoNo solid panel behind it
- Up for 3 secondsGone before phones are out
- Lost in dark modeA transparent file turns dark
-
On a phone screen, give people a link to tap, not a code.
Avoid: A code people must scan with the phone showing it.
Why
A phone cannot easily scan its own screen. On a page seen on phones and computers, put the link beside the code. A code that opens the page it sits on needs no link: people are already there.
-
In emails, texts, social posts and videos, add a link people can tap.
Avoid: A bare code in an email, which looks like phishing.
Why
Many will read them on the very phone the code needs. Safety advice also tells people not to scan codes in emails they did not expect.
-
If people must scan a code on their own phone, tell them how.
Avoid: Assuming everyone knows the screenshot route.
Why
Screenshot it, then press and hold the code in Photos on iPhone, or use Google Lens on Android. Many people do not know that: our scanning guide shows how. A code that opens the page it sits on needs neither steps nor a link, since nobody has to scan it.
-
Use a code on a TV or computer to move people to their phone.
Avoid: Making people type long addresses or passwords on a TV.
Why
That is where screen codes work best: the phone opens the page, or signs people in, with no typing. Passkeys can work this way.
-
Show a screen code at least 150 pixels wide.
Avoid: A big image shrunk by the browser or email app.
Why
Guides set about 150 pixels for a short link. Export it at the size shown, or as SVG: a shrunk image softens the edges of the squares.
-
Give a screen code a solid white background, margin included.
Avoid: Transparent files that vanish in dark mode.
Why
In dark mode, email apps can change the colours around an image, and a transparent code then sits on dark. A white background in the file keeps it dark on light.
-
Leave a code on a slide or sign for at least 15 seconds.
Avoid: A code that rotates away after a few seconds.
Why
People must notice it, find a phone, open the camera and aim. If the screen moves on sooner, show a short address instead.
-
On TV, show the code on a solid panel for 10 seconds or more.
Avoid: A small code flashed over moving video.
Why
TV guides ask for 5 to 10 seconds at the least, or the whole spot, at about 15% of the screen width. Say it in the voiceover, and test from the sofa.
Section 5 of 8
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.
Short content, big squaresIt can print smaller and still read.
Tracking tags add squaresSame width, finer squares, harder to read.
Error level M for bothEnough for clean indoor print.
Avoid
- Squashed to fitThe layout broke the square
-
Keep what the code holds short.
Avoid: Long addresses with tracking tags pasted into the code.
Why
At level M, qrplify.com makes 25 squares across, and a blog page with tracking tags, 113 characters, makes 45. With fewer squares, each prints bigger at the same size.
-
Put the full address in the code, starting with https://.
Avoid: A bare domain, or a page without HTTPS.
Why
The https:// tells the phone it is a web link. People are also told to look for HTTPS before they trust a page.
-
Link to the exact page the code promises, not your home page.
Avoid: A home page, a sign up wall or an unrelated offer.
Why
People expect the page to match where they found the code: "Scan to review us" should open the box to write in.
-
Make the page work on a phone, and load fast.
Avoid: A desktop page that is slow or hard to read.
Why
Everyone who scans arrives on a phone. A page that renders poorly or loads slowly wastes the scan.
-
Use error level M indoors, Q or H with a logo, and H outdoors.
Avoid: Level H everywhere, or L on print that will wear.
Why
A higher level can add squares: the blog page's code grows from 45 at M to 57 at H. Use what the place needs.
-
Test the printed proof with 3 phones, in the light where it will hang.
Avoid: 1 scan on your own phone, from the screen.
Why
Use a current iPhone, a current Android and 1 a few years old, at the real distance, straight on and at an angle. Our tests did not cover Android phones.
-
Test again once the code sits in the final layout.
Avoid: A layout that trims the margin or shrinks the code.
Why
Layout tools can crop the margin, resize the code or swap in a blurry copy. The QR code decoder shows exactly what a file holds.
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 6 of 8
Pick the right type
Most jobs need a plain web link. Choose another type only when it saves people a step.
A web link by defaultEvery phone camera opens it.
A contact card for detailsA scan offers to save them.
More fields, more squaresKeep only what people need.
-
Use a web link for anything that lives on a page.
Avoid: A special type when a plain page would do.
Why
Every phone camera opens a web link, and you can update the page behind it at any time.
-
Use a contact card for your details, with only the fields people need.
Avoid: A full contact card printed at the smallest size.
Why
A scan offers to save them to the phone's contacts. Each field adds squares, so for long details, link to a contact page instead.
-
Use a WiFi code only where sharing the password is fine.
Avoid: A WiFi code for a private or staff network.
Why
The password sits inside the code, and the phone asks before it joins. A short password keeps the code simpler.
-
For a phone number or email, use the call or email type.
Avoid: Plain text, or a number without its country code.
Why
The right type opens the dialler, or a new email addressed to you. Add the country code so the number works from abroad.
-
For an app, use 1 link that sends each phone to its own store.
Avoid: An iPhone only code, or an app link with no fallback.
Why
The same code then serves the App Store and Google Play. If it opens inside your app, people without the app still need a useful page.
-
If a menu or document may move to a new address, use a dynamic code.
Avoid: A static code to a PDF you will replace.
Why
A static code to a page you edit keeps working. A dynamic one also survives a new file or a new address.
-
Use a calendar code to add an event to the phone in 1 tap.
Avoid: A calendar code for an event whose date may change.
Why
A tap adds the event to the calendar and shows its details. The date sits in the code, so use a web page for events that may move.
Section 7 of 8
Place it where people scan
A code works where people have a reason, a moment and a free hand to scan it. The table below gives a size and a spot for each use.
Upright on the tableEasy to aim at from a seat.
Where people sitTime and a free hand to scan.
QRplify
Scan to open qrplify.com
qrplify.com
Says what the scan doesBefore anyone lifts a phone.
The address under itTo type it, or check where it goes.
Avoid
- Flat on the tableHard to aim at when seated
- Where people rushNo time to stop and scan
- 2 codes, no labelsPeople scan the wrong one
By use
-
Put the code where people already look, next to what it is about.
Avoid: A code tucked in a corner, far from its topic.
Why
People read things that sit close together as related. A code beside what it describes gets noticed; a code in a far corner gets missed.
-
Place it where people can stop and hold a phone still.
Avoid: Moving vehicles, roadside signs and busy doorways.
Why
Tables, counters, queues, platforms and waiting rooms give people time. On a moving van or a road sign, there is none.
-
Hang wall codes between chest and eye height, about 1 to 1.6 m up.
Avoid: Codes near the floor, or above head height.
Why
Guides range from 90 cm, for people who sit or use a wheelchair, to 1.8 m. Tilt a high wall screen down.
-
Check the light where the code will hang, at the hour people use it.
Avoid: Glare, deep shadow, or a dim corner.
Why
A code that scans at noon can fail under evening lamps. In a dim place, print it bigger or light it.
-
Show 1 code per surface, or label each and keep them apart.
Avoid: 2 unlabelled codes side by side.
Why
With 2 codes in view, a phone may pick the wrong one. A single code to a page of links often works better.
-
Give each placement its own code, to see where people scan.
Avoid: The same code on the window, the menu and the flyer.
Why
Separate dynamic codes count scans for each spot, so you can see which spots earn their space and which to drop.
-
Treat the table's sizes as a floor, and go bigger when in doubt.
Avoid: Copying a size from a different use.
Why
Guides differ: a business card from 1.5 to 2.5 cm, a flyer from 2.5 to 4 cm. A bigger code costs a little space; a smaller one can cost the scan.
Section 8 of 8
Where the scan goes
A code tells people nothing about where it leads until they scan it, and scammers stick their own codes over real ones. Show the address, keep the page working, and make a fake easy to spot.
The address, printedUnder the code, for people to check.
A design people knowA plain sticker over it stands out.
Scan to open qrplify.com
qrplify.com
After the scan, before the page opens
The address matches the one under the code.
The address, on the phoneShown after the scan, before the page.
The 2 matchYour own domain, easy to check.
Avoid
- A sticker on topA fake pasted over yours
- No address shownPeople cannot tell where it goes
-
Print the address under the code: at least the domain, and the path when it is short.
Avoid: A code with no address, or a different domain.
Why
Phone cameras usually show the domain before the page opens, so people can check the 2 match. A short path also helps anyone who would rather type the address.
-
For a dynamic code, prefer a short link on your own domain.
Avoid: An unfamiliar short link people cannot place.
Why
The phone shows the short link, not your page, and people are rightly wary of shortened links. Scammers abuse the popular shorteners.
-
Point people to the camera app already on their phone.
Avoid: Asking people to download a scanner app first.
Why
Current iPhones and most Android phones read codes in the camera, and the UK's NCSC advises using the scanner that comes with the phone rather than one from an app store.
-
Check your codes in public places often for stickers stuck over them.
Avoid: A new sticker on an old sign, left unnoticed.
Why
UK victims reported losing £3.5m to QR code scams in 2024. Scan each code, check where it goes, and teach staff what a fake looks like.
-
Make public codes hard to fake: your own design, under plastic.
Avoid: Plain paper codes anyone could copy and cover.
Why
A plain sticker over your branded code is easier to spot, though fakes have copied real logos. Bring outdoor codes in after closing.
-
If your logo is drawn as a code, make it open your own site.
Avoid: A logo whose code opens another site, or is the only way to reach a page.
Why
It is a brand mark that people are not meant to scan, so it can sit light on dark, small, or beside other codes. Some readers will miss it: in our test, Apple's reader and ZXing read all 32 light-on-dark codes, and OpenCV none. Ours, at the top of this page, opens qrplify.com.
-
In photos and illustrations, show only real codes that open a real page.
Avoid: A pattern that only looks like a code, or a stock image's code that opens someone else's page.
Why
A code inside a photo or illustration is scenery: it need not scan off the screen. Someone may still try to scan it, so it must decode from the full-size image and open a real page. The QR code decoder shows what an image holds.
-
If people pay by code, offer another way to pay beside it.
Avoid: Payment by code as the only option.
Why
Fake codes turn up most on car park payment machines, and safety advice is to avoid paying by code. A card reader, an app or a phone line lets wary people still pay.
-
Ask for as little personal information as you can on the page.
Avoid: Card details or a login asked for right after a scan.
Why
Canada's cyber safety advice calls a page that asks for unnecessary personal information a warning sign. A page that asks only for what it needs is easier to trust.
-
Check the signal where the code hangs: a web page needs it.
Avoid: A web menu in a basement with no signal.
Why
Phones read the code offline, but the page needs a connection. Where signal is weak, offer guest WiFi, or a code that holds the text itself.
-
Keep the page working and current for as long as the print is out.
Avoid: A dead link, or last year's offer still showing.
Why
Printed codes outlive their events, so send late scans to what is current. Do QR codes expire? covers what stops each kind.
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.
On 7 November 2026 we tested light-on-dark codes again, adding ZXing, an open-source reader, to Apple's and OpenCV. Apple's reader and ZXing read all 32 images, and OpenCV none.
What we did not test: a phone's live camera, Android phones, readers other than Apple's (beyond OpenCV in our colour test and ZXing on light-on-dark codes), real photographs, glare, curved surfaces, and more than 1 logo design.
Sources
45
- QRplifyour tests of inverted codes, logo size, contrast and minimum size, 18 October 2026
- QRplify colour testour colour test of Apple's reader and OpenCV
- QRplify reader testour test of light-on-dark codes on Apple's reader, ZXing and OpenCV, 7 November 2026
- 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
- FTCthe US Federal Trade Commission: See a QR code parked somewhere? Don't scan it...yet!, 3 September 2026
- FTC 2023the US Federal Trade Commission: Scammers hide harmful links in QR codes to steal your information, 6 December 2023
- Get Cyber Safethe Government of Canada's cyber safety campaign: How to use QR codes safely
- AppleiPhone User Guide: Scan a QR code with your iPhone camera
- Apple developerQR code recognition on iOS 11, Apple Tech Talk 206
- Google Pixel helpPixel Camera Help: Scan QR codes with your Pixel phone
- Google ML Kitbarcode scanning on Android: input image guidelines
- FIDO Alliancepasskeys: signing in on another device with a QR code
- USPSDomestic Mail Manual 202: the barcode clear zone on cards and letters
- Litmusthe ultimate guide to dark mode for email marketers
- Printing ImpressionsDon't sabotage your QR code by printing it on the wrong paper grade, by Sabine Lenz
- MediaVillagecommon mistakes TV advertisers make with QR codes
- CaptainDNSURL shorteners as a phishing attack vector
- ScanelyInverted QR codes: why they fail and how to fix them
- Connect MachineHow small can a QR code be?
- The QR Code GeneratorQR code size guide
- TabresWhat size should a QR code be? Print sizes for table tents, flyers, posters and billboards
- 4over4the best colour profile for printing, and CMYK against RGB
- StickerNationoutdoor stickers and decals: what lasts and what does not
- Generate Online QRQR code placement best practices
- YesWePrintprinting QR codes on clothing
- McAuley Labelshow to print QR codes on labels
- QRCodeKIT TVQR codes on TV commercials
- QRCodeKIT spacingseveral QR codes close together on packaging and print
- AdwaveQR codes in TV advertising
- ScreenClouddigital signage best practices
- BitlyHow to scan a QR code from a picture
- Bitly mistakescommon QR code mistakes
- QRLynxDo QR codes work without internet?
- SmartQRCodeQR codes on vehicle wraps
- PixPlatwhere to place QR codes in your restaurant
- BadgeGoevent badges with QR codes
Before you print
The checklist
All 63 rules as boxes to tick. Tick them here, or print the list.
Design9
Size4
Print10
Screens8
Content7
Type7
Placement7
Safety11
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 postHow to scan a QR code
With the camera you already have: iPhone, Android, a computer and screenshots.
Read the guideMake 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.