QR · 8 min read
Static or Dynamic QR Codes? Why Some Codes Stop Working, and How to Print Codes That Last
By the site owner · Published
The flyers are printed, the menus laminated, the stickers on the packaging. Then, a few months later, customers report that the QR code leads to an advertising page or an error message. The cause is almost always the same: the code was created as a dynamic code with an online service, and the free trial or subscription has ended.
This guide explains the difference between static and dynamic QR codes, what you give up with each, and how to design and print a code that still scans reliably years from now. The examples use Toolula's QR Code Generator, which creates static codes in your browser.
Static codes: the content is in the code
A QR code is a pattern of black and white squares, called modules, that stores a short piece of data. With a static code, that data is the actual content: the full web address, the text, the contact card or the Wi-Fi password. The phone reads the pattern and opens the address directly. No server sits in between.
This has clear advantages. A static code works as long as its content is valid, independent of any provider. Nobody sees who scans it. And it costs nothing, because there is nothing to operate. The disadvantage is just as clear: the content cannot be changed after printing. If the web address moves, you need a new code.
Dynamic codes: a redirect via someone's server
A dynamic code contains only a short address belonging to the code provider. When someone scans it, the phone first contacts the provider's server, which looks up where the code should currently lead and forwards the visitor. You can change the destination at any time in your account, and the provider counts the scans.
The catch is the dependency. If the provider shuts the redirect down, because a trial ended, an invoice wasn't paid or the company went out of business, every printed code stops working at once. Some services that advertise free codes create dynamic codes and deactivate them after a trial period. Before you print, check what kind of code you have: if the address encoded in it belongs to the generator's domain rather than yours, it is a dynamic code.
Tracking is the second issue. Every scan of a dynamic code passes through the provider, who learns the time, the approximate location derived from the IP address and the device type. That is the point of the scan statistics, but it means your customers' scans are processed by a third party, which has to be covered in your privacy information.
The best of both: a static code to your own address
If you want to change the destination later without depending on a code provider, encode an address you control in a static code, for example example.com/menu, and set up a redirect on your own website. If the menu moves to a new page, you change the redirect, and the printed codes keep working for as long as your domain exists. Your own web analytics show how often the address is opened, under your own privacy policy.
Keep that address short. The less data a QR code holds, the fewer and larger its modules are, and the easier it scans from a distance or on a crumpled flyer. Long addresses with tracking parameters make codes dense and fragile.
Design that still scans
Phones are tolerant, but not without limits. Dark modules on a light background with strong contrast scan best; inverted codes, light on dark, are not read by every scanner app. Gradients and colours work as long as the dark colour stays clearly darker than the background everywhere. Toolula's generator shows a contrast note before a design becomes hard to read.
Error correction lets a code survive damage and overlays. There are four levels: L restores about 7 percent of the code, M about 15, Q about 25 and H about 30 percent. Higher levels make the code denser. Use M for screens, Q or H for print, packaging and anything that may get scratched. A logo in the middle covers part of the code, so the generator raises error correction to H automatically when you add one, and the logo should stay small.
Leave a quiet zone. The QR standard asks for an empty margin of four modules around the code; a code printed edge to edge against a busy background is often not recognised.
Printing at the right size
A common rule of thumb is that a code should be about one tenth as wide as the distance from which it will be scanned: around 2 to 3 centimetres for a business card read at arm's length, 10 centimetres or more for a poster read from a metre away. Dense codes with a lot of data need more. Download the code as SVG for print; it is a vector file and stays sharp at any size, while PNG suits screens and messages and WebP websites.
Always test before printing in quantity: with two or three different phones, in the size and on the material you will use, and in the light where it will hang. A code that scans from a screen can fail on glossy paper under a lamp.
- Short content, ideally your own short address
- Dark on light, enough contrast, quiet zone around it
- Error correction Q or H for print and codes with a logo
- SVG for print, tested on several phones before the print run
Other kinds of static codes
Besides web addresses, static codes can hold a contact card (vCard), a calendar event, plain text, Wi-Fi access data or a SEPA transfer. A Wi-Fi code lets guests join your network without typing the password; the guide on GiroCodes on invoices explains payment codes. All of them work without a server, for as long as the data they contain is valid.
To check what an unknown code contains before you open it, use the QR Scanner, which shows the content first and doesn't follow links automatically.
Fake codes and how to spot them
QR codes in public places have become a target for fraud. Stickers with a fake code are placed over the real one on parking meters, charging stations or posters and lead to a page that imitates a payment form. Before you enter payment details after scanning a code, look at the address: does it belong to the operator you expect? Toolula's QR Scanner shows the full link before opening it, so you can check it first.
For your own codes, this is another argument for a short address on your own domain: customers recognise your name in the link and can tell a genuine code from a sticker. Where codes are exposed to the public, check from time to time that nobody has covered them.
If you need many codes at once, for example one per table, product or inventory item, the Bulk QR Code Generator creates them from a list or a CSV file with the same design, as a ZIP of separate files.
Before the print run
Run through a short final check whenever a code goes on something you can't change later. Scan the print proof, not the screen preview, and open the link to the end: does it land on the right page, does that page work on a phone, and is it still the address you want in two years? Keep the SVG file and a note of the content with the print files, so the same code can be reprinted or replaced later without guesswork.
Frequently asked questions
Do static QR codes expire?
No. A static code contains its content directly and works as long as that content is valid, for example as long as the web address exists.
Why did my QR code stop working?
Usually because it was a dynamic code from an online service whose trial or subscription ended. The code points to the provider's redirect, which has been switched off.
Can I change the link of a static code after printing?
No. Encode a short address on your own domain instead and change where it redirects on your website.
How large should a printed QR code be?
As a rule of thumb, about one tenth of the scanning distance, with a quiet zone around it. Test with several phones before printing in quantity.
How can I tell whether a QR code is a fake sticker?
Check the address shown before opening the link: it should belong to the operator you expect. A sticker on top of another code and an unfamiliar domain are warning signs.
Which error correction level should I choose?
M for codes shown on screens, Q or H for print, packaging and codes with a logo. Higher levels survive more damage but make the code denser, so keep the content short.
How this guide is kept current: it is checked against the official sources it cites and against the Toolula tools it describes, and revised when a rule, deadline or tool changes. The date above shows the last revision.