It is one of the most common small-business surprises: the QR code on the menu, the flyer, the product label — printed a thousand times — suddenly opens an error page or a "reactivate your account" screen. The code did not break. The company that generated it turned it off.
The trick behind "free" QR generators
Many QR sites do not put your link into the code. They put in a shortened redirect on their own domain, and that redirect forwards to your link. This is called a dynamic code, and it gives them total control: after your "free trial", or after a scan limit, or when the startup pivots, the redirect stops — and every printed copy of your code dies at once. The expiry is not a technical limitation; it is the business model. The QR standard itself has no expiry, no scan limit and no owner.
The permanent alternative: a direct (static) code
A static QR code encodes your actual URL — or Wi-Fi details, or contact card — directly into the pattern of squares. Scanning reads the content straight off the paper; no server is involved. It works for as long as your destination exists, survives any company shutting down, and handles unlimited scans because there is nothing to count them.
Direct encoding, no account, no expiry, no scan limit — generated in your browser, downloaded as SVG or PNG.
When you genuinely need to change the destination later
The one honest advantage of dynamic codes is editability: reprint nothing, change where it points. You can have that
without the trap — put a page on a domain you control inside a permanent code
(yoursite.com/menu), and change what that page shows, or redirect it, whenever you like. Your domain, your
rules, no third party to expire it.
Before you print
- Scan the final artwork with two different phones, from the distance customers will actually stand at.
- Download SVG for print. Vector stays sharp from sticker to poster; a small PNG scaled up gets fuzzy edges that hurt scanning. Need a bitmap at an exact size? The SVG to PNG converter renders any resolution from the same file.
- Error correction H for anything handled or outdoors — it survives ~30% damage; M is fine for screens.
- Keep the quiet zone — the empty border is part of the code, not wasted space.