Marketing

How to make a QR code for a link that scans every time

Make a QR code for a link that scans reliably: shorten the URL first, pick the right error correction, size and quiet zone, test before printing, and choose SVG or PNG.

About this guide

Topic
Marketing
Reading time
7 minutes
Updated
October 11, 2026
Written by
The Blinkhop team
On this page

To make a QR code for a link that scans every time, shorten the URL first, generate the code from the short link, then print it large enough, with a clear margin, and test it where people will actually scan it. A short link gives you a simpler code with bigger squares, counts every scan and keeps your options open after printing. This guide covers each step, from error correction and print sizes to testing and the choice between SVG and PNG.

  1. Shorten the link. Paste the destination on blinkhop.com or send it to the API. You get a short link such as https://zou.sh/spring-menu. If you need help with custom endings, see how to shorten a link.
  2. Get the QR code. Add /qr to any zou.sh link: https://zou.sh/spring-menu/qr returns a print-ready SVG QR code. You can also use the QR button that appears after shortening on blinkhop.com, or the free QR code generator.
  3. Place it in your design at the right size, with enough white space around it. The sections below explain how much.
  4. Print a proof and test it with several phones before you print the full run.

To save the code as a file from a terminal:

curl -o spring-menu-qr.svg https://zou.sh/spring-menu/qr

A QR code stores the text of the link in a grid of black and white squares called modules. The more characters it holds, the more modules it needs. QR codes come in versions from 1 (21 × 21 modules) to 40 (177 × 177 modules), and each version adds 4 modules per side, according to Denso Wave, the company that developed the QR code.

We generated codes at error correction level M for three links to compare:

Link Characters QR version Grid
https://zou.sh/7Kp2x 20 2 25 × 25 modules
https://zou.sh/spring-menu 26 2 25 × 25 modules
A product page URL with four UTM parameters 148 8 49 × 49 modules

Printed at the same width, the short link’s modules are almost twice as wide. At 2 cm across, each module of the 25 × 25 code measures 0.8 mm, against about 0.4 mm for the 49 × 49 code. Bigger modules are easier for a phone camera to read, from farther away and in worse light.

Shortening first has other benefits:

  • Every scan is counted. A scan that opens the link is a click on the short link. Blinkhop counts clicks per day, country, referrer domain and device type, without cookies, and the total appears on the link’s preview page.
  • Long tracking URLs stay out of the code. Add UTM parameters to the destination, as explained in the UTM parameters guide, and the code stays small.
  • The destination can change after printing. What many QR services call a dynamic QR code is exactly this: a code that holds a short link. With a Blinkhop account (early access), you can edit where a link points without reprinting.
  • The link keeps working. zou.sh links never expire unless an owner sets an expiry date.

Error correction: L, M, Q or H

QR codes include redundant data so that a scanner can still read a code that is dirty, scratched or partly covered. There are four levels:

Level Data that can be restored Typical use
L About 7% Clean environments, large amounts of data
M About 15% Most printed links
Q About 25% Codes that may get dirty or scuffed
H About 30% Harsh environments, or a logo placed on top

The percentages come from Denso Wave’s error correction page, which notes that level M is the one most frequently selected, and that raising the level also makes the code bigger. Blinkhop’s QR codes use level M.

Short links leave room for stronger protection. In our test, https://zou.sh/7Kp2x still fits in the same 25 × 25 grid at level Q, while the long UTM URL grows from 49 × 49 modules at level M to 57 × 57 at level Q.

If you put a logo in the middle of a code, it hides modules, and the scanner has to rebuild them from the redundant data. Keep the logo small, use level Q or H, and test the result carefully.

Keep a clear quiet zone

The quiet zone is the empty margin around the code. Scanners use it to find where the code starts. Denso Wave’s specification asks for a margin four modules wide on all sides. Do not let text, borders, photos or background patterns touch the code, and when you place a downloaded code in a layout, add white space around it rather than cropping it tight.

Choose a size for the scanning distance

There is no single minimum size, because it depends on how far away people stand. A long-standing rule of thumb from QRStuff is that the scanning distance can be about 10 times the width of the code for a well-lit, black-and-white code scanned straight on, and closer to 8 times in poor light or at an angle. Applied to common situations, with example distances:

Where the code appears Example scanning distance Minimum code width at 10:1
Business card or product label 20 to 25 cm (8 to 10 in) 2 to 2.5 cm (0.8 to 1 in)
Flyer, menu or packaging 30 to 40 cm (12 to 16 in) 3 to 4 cm (1.2 to 1.6 in)
Poster on a wall 1 to 2 m (3 to 6.5 ft) 10 to 20 cm (4 to 8 in)
Window sign or banner 3 to 5 m (10 to 16 ft) 30 to 50 cm (12 to 20 in)

Treat these numbers as a starting point, not a guarantee. Long URLs with dense codes need more room than a short link, and glossy surfaces, curved packaging and low contrast all make scanning harder. Dark modules on a light background are the safest choice. Some scanners struggle with inverted codes, where light modules sit on a dark background.

Test before you print

A code that works on your screen can still fail on paper. Before the full print run:

  • Print a proof at the final size, on the final material if you can.
  • Scan it with at least two phones, ideally one iPhone and one Android phone, using the built-in camera app.
  • Scan from the real distance and angle, in the real light, for example from across the room for a poster.
  • Check the destination on a phone. The page should load quickly and work on a small screen.
  • Confirm where the code leads. Add + to the short link, as in https://zou.sh/spring-menu+, to see the destination, creation date and total clicks.
  • Keep a record of which code points where, especially if you print several versions.

After launch, the click total on the preview page tells you whether people are scanning. Bots and app link previews are not counted.

SVG or PNG: which file format to use

Format SVG PNG
Type Vector: shapes described mathematically Raster: a fixed grid of pixels
Scaling Sharp at any size Blurs or turns jagged when enlarged
Best for Print, signage, design tools Web pages, email, slides and apps that refuse SVG
Watch out for Some apps and websites do not accept SVG uploads Export at the final size or larger

For print, SVG is the better choice. The code stays crisp whether it ends up 2 cm wide on a business card or 50 cm wide on a banner, and that is the format the /qr endpoint returns.

If a tool insists on PNG, convert the SVG at the size you need instead of enlarging a small image. At 300 dots per inch, a typical print resolution, a 3 cm code needs about 355 pixels across. On the command line, librsvg’s converter does it in one step:

rsvg-convert -w 1200 spring-menu-qr.svg > spring-menu-qr.png

Avoid JPEG for QR codes: its compression can blur the edges of the modules. The QR codes feature page has more examples.

Key takeaways

  • Shorten the link first: a zou.sh link fits in a 25 × 25 grid, while a long tracking URL can need almost twice as many modules per side.
  • Add /qr to any zou.sh link to get a print-ready SVG with error correction level M.
  • Keep a quiet zone four modules wide and size the code for the scanning distance, roughly one tenth of the distance as a starting point.
  • Use level Q or H if the code may get damaged or carries a logo.
  • Print a proof and test it with several phones in real conditions before the full run.
  • Prefer SVG for print, and export PNG at the final size only when a tool requires it.

FAQ

Frequently asked questions

Why should I shorten a link before making a QR code?

A shorter URL needs fewer modules, so each square is larger at the same print size and easier to scan. A short link also counts scans as clicks, and with an account (early access) you can change its destination after printing.

What size should a printed QR code be?

It depends on the scanning distance. A long-standing rule of thumb is a code width of at least one tenth of the distance, so about 3 cm for a flyer read at 30 cm, then test a printed proof at the real distance.

Which error correction level should I use?

Level M, which can restore about 15% of the data, suits most printed links and is the level Blinkhop's QR codes use. Choose Q or H if the code may get dirty or damaged, or if you place a logo on top of it.

Should I use SVG or PNG for a QR code?

Use SVG for print, because it stays sharp at any size. Use PNG only where a tool does not accept SVG, and export it at the final size or larger.

Related reading

Your next link is one paste away.

Free, no sign-up. Links that never expire.