QR codes are a given in 2026

What was still a Japanese special case in 2019 has been global everyday life since the COVID pandemic: menus, event tickets, city guides, payment, vaccination certificates. Every smartphone has a scanner built in. But: generating a QR code is trivial, generating a QR code correctly — print-ready, error-tolerant, with tracking — takes some knowledge.

How a QR code is built

QR (Quick Response) was developed in 1994 by Denso Wave, originally for car manufacturing. The basic structure:

  • Position markers in three corners (the large squares). These let the scanner detect orientation and scale.
  • Alignment markers (smaller squares) for correction on angled shots.
  • Timing pattern (dotted lines between position markers).
  • Data modules (the actual content).
  • Error-correction modules (Reed-Solomon codes).

Versions and capacity

A QR code comes in 40 versions. Version 1 is 21×21 modules, version 40 is 177×177 modules. More modules = more capacity, but also more work for the scanner. Rule of thumb for common use cases:

  • URL up to 25 characters: version 1–2, 21×21 or 25×25 modules.
  • URL up to 50 characters: version 3, 29×29.
  • vCard with all fields: version 8–12.
  • Wi-Fi configuration: version 4–5.

Practical tip: shorter content = smaller codes = better scannability. A 200-character URL produces a QR code that's barely readable at 3 m distance. This is exactly where a short-link platform like ScanGo.me comes in — it shortens URLs to 15–20 characters and thus enables dramatically smaller QR codes.

300 × 250 — Rectangle
Cookie-Banner ausstehend

Error-correction levels

QR codes can reliably decode damaged areas too — thanks to Reed-Solomon error correction. Four levels:

  • L (Low): 7% recovery. Lowest data overhead.
  • M (Medium): 15%. The default recommendation for web.
  • Q (Quartile): 25%. For print with a logo overlay.
  • H (High): 30%. Maximum protection, larger QR codes.

To put a logo in the center of the QR code, you need at least level Q (better H), because the logo covers up to 25% of the data modules. More on that in our QR design post.

A QR code is a vector structure — rendered as SVG or a high-resolution PNG it stays sharp. Rules of thumb for print size:

  • Minimum module size: 0.4 mm per module for reliable capture.
  • Business card: 1.5 × 1.5 cm at version 3 (29 modules → 0.5 mm/module).
  • Flyer: 2.5 × 2.5 cm.
  • Poster (A1): at least 8 × 8 cm.
  • Bus advertising: 30 × 30 cm.
  • Shop-window sticker: 10 × 10 cm.

Format: SVG is always the best choice, because it's vector-scalable. For PNG export, choose at least a 1000 px edge length.

Static vs. dynamic

A static QR code contains the target URL directly. On scan it's called 1:1. Advantage: independent, no platform binding. Disadvantage: the URL can't be changed after printing, no tracking possible.

A dynamic QR code contains a tracking URL (e.g. scango.me/abc12) that redirects in the background to the actual target URL. Advantages:

  • Editable: the target URL can be changed after printing — important for seasonal campaigns, A/B tests, corrected landing pages.
  • Tracking: number of scans, device type, location, time of day.
  • Shorter URL = smaller QR code. Better scannability, less print area.
  • Fallback URL: for when the original link ever breaks.

Platforms like ScanGo.me offer dynamic QR codes with tracking and an edit function. More on short links and their advantages in our short-link post.

300 × 250 — Rectangle
Cookie-Banner ausstehend

Browser-local generation

If you don't need a tracking platform, you can generate QR codes browser-local — the most common open-source libraries are qrcode and qr-code-styling:

import QRCode from "qrcode";

const url = "https://my-site.com";
const svgString = await QRCode.toString(url, {
  type: "svg",
  errorCorrectionLevel: "M",
  margin: 2,
  color: { dark: "#000", light: "#fff" }
});

Advantage: no external service dependency, no tracking. Disadvantage: static, not editable.

QR code types beyond URLs

  • Wi-Fi: WIFI:S:NETWORKNAME;T:WPA;P:PASSWORD;; — a guest scans, is on the Wi-Fi.
  • vCard: contact details straight into the address book.
  • SMS: SMSTO:+1234567890:Text — pre-fill for a reservation SMS.
  • Phone call: tel:+1234567890.
  • Email: mailto:info@example.com?subject=….
  • Geo location: geo:52.5,13.4 — opens the maps app.
  • Calendar event: iCal format.
  • SEPA payment: in the EBA payment-hint format.

The most common QR code mistakes

  • Too little contrast. A light-gray QR code on a white background — scanners can't do that reliably. At least 50% brightness difference.
  • QR code scaled too small in print. Rule of thumb: 2 cm on a business card, 5 cm on a flyer.
  • Inverted QR (light code on a dark background). Works in theory, but many smartphones can't do it. Classic black-on-white is safer.
  • Quiet zone forgotten. The QR code needs 4 modules of clear margin all around. If it sits right at the image edge, the scan often fails.
  • Very long URL without a short link. The QR code gets too complex.
300 × 250 — Rectangle
Cookie-Banner ausstehend

Tracking privacy

Dynamic QR codes generate tracking-relevant data. To stay GDPR-compliant:

  • Aggregated statistics instead of personal tracking.
  • Anonymize IP addresses or don't store them at all.
  • On print materials, a privacy notice near the QR code.
  • Platform choice: providers that run servers in the EU (like ScanGo.me).

Recommendation matrix

  • A Wi-Fi card for the guest bathroom: static QR with Wi-Fi content, generated browser-local.
  • Business card: dynamic QR with ScanGo.me — if the target page changes, the card stays valid.
  • Print marketing campaign: dynamic with tracking. Knowing when and where it's scanned is campaign gold.
  • Restaurant menu: dynamic — the menu changes, the QR doesn't.
  • Seasonal promotion on a poster: dynamic with an expiry date.

Sources

Denso Wave — Original QR code specification · ISO/IEC 18004 — QR Code Spec · qrcode (npm) · qr-code-styling · ScanGo.me — dynamic QR codes & short links · Wikipedia — QR Code.