Skip to content

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.

QR code that opens https://qrplify.com/

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.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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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
QR code that opens https://qrplify.com/

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.

QR code that opens https://qrplify.com/, shown at the card size
Card: 2 cmRead from about 20 cm
QR code that opens https://qrplify.com/, shown at the flyer size
Flyer: 5 cmRead from 50 cm
QR code that opens https://qrplify.com/, shown at the poster size
Poster: 20 cmRead from 2 m

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.

  1. 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.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

  3. 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

  4. 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

  5. 2.5

    Print on a flat, matte surface.

    Gloss throws glare, and curves, folds and seams bend the pattern.

    Sources: Scanova, Uniqode, QR Tiger

  6. 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

  7. 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

  8. 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.

QR code that opens https://qrplify.com/, 25 squares across
qrplify.com: 25 squares20 characters. Opens qrplify.com.
QR code that opens https://qrplify.com/blog/how-small-can-qr-codes-be-and-still-scan-reliably/?utm_source=qrplify&utm_medium=qr-code, 45 squares across
With tracking tags: 45 squares113 characters. Opens the post on minimum size.
  • 3.4

    Error level M for bothEnough for clean indoor print.

  1. 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

  2. 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.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

  4. 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

  5. 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

  6. 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.

Web link QR code that opens https://qrplify.com/
Web linkOpens qrplify.com.
Contact card QR code with QRplify's email and website
Contact cardOffers to save QRplify's email and website.
  • 4.2

    A contact card for detailsOnly the fields people need.

  1. 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

  2. 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

  3. 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.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

  5. 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

  6. 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

  7. 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

  8. 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

QR code that opens https://qrplify.com/

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.

  1. 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

  2. 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

  3. 5.3

    Hang posters at eye level, within reach.

    Not near the floor, and not across a fold or a corner.

    Sources: Scanova, Uniqode

  4. 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.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.

QR code that opens https://qrplify.com/

Scan to open qrplify.com

qrplify.com

After the scan, before the page opens

Websiteqrplify.com

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.

  1. 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

  2. 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?

  3. 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

  4. 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

  5. 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

Before you print

The checklist

All 40 rules as boxes to tick. Tick them here, or print the list.

1. Design
2. Size and print
3. Make the code
4. Type
5. Placement
6. Trust

Make 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.