QR Code Basics

Types of QR Codes

"Type of QR code" is really two separate questions wearing one name: what the code does when scanned (static or dynamic), and what content it carries (a link, a contact card, Wi-Fi credentials, and so on). They're independent choices, and getting either wrong is expensive in different ways — one costs you a reprint, the other costs you a scan that lands somewhere useless.

The short version

  • Static encodes the final data permanently; dynamic encodes a short redirect you can repoint later.
  • Static is the right default for self-contained data — Wi-Fi, vCard, plain text — that has no reason to change.
  • Dynamic is worth it for anything printed at volume, campaign-linked, or where you want scan analytics.
  • Content type is a formatting convention, not a technical mode: every code stores plain text underneath.
  • A content type only works if the scanning device has an app that understands it — which is why Wi-Fi and vCard behave differently across platforms.

Static vs. dynamic QR codes

This is the most consequential decision you make, because it can't be changed afterwards without generating and reprinting a new code.

Two flows compared. A static QR code encodes its final destination directly. A dynamic QR code encodes a short redirect URL that passes through a redirect service to an editable destination, which also allows scans to be counted.
A static code carries the destination. A dynamic code carries a pointer to a destination you control.

Static codes

A static code encodes its final data directly into the module pattern at creation time. Scanning it touches no external server — the data comes straight off the code. That makes static codes simple, free to generate indefinitely, permanent, and functional with no internet connection at all for self-contained payloads like Wi-Fi credentials, a contact card, or plain text.

The trade-off is absolute: if the destination changes, or you spot a typo after the code is on 5,000 flyers, there is no fix. You reprint. A static code also grows with its payload, so a long URL with tracking parameters attached produces a dense, harder-to-scan grid.

Dynamic codes

A dynamic code encodes a short redirect URL pointing at a service that forwards the scanner to the real destination. Because the target lives on a server rather than in the code, you can change it whenever you like — same printed code, new destination. Every scan passing through the redirect also makes analytics possible: counts, timestamps, device type, rough location.

The costs are real too. A dynamic code depends on the redirect service staying online for as long as the printed material exists, it normally requires an account with whoever generated it, and there's a small extra hop before the destination loads. Some free tools deliberately expire dynamic codes after a trial — check before printing anything.

StaticDynamic
Editable after printingNoYes
Scan analyticsNoneYes
Works offlineYes (for self-contained payloads)No
Third-party dependencyNoneRedirect service, indefinitely
Code densityGrows with payloadAlways compact
Typical costFreeUsually account-gated
Best forWi-Fi, vCard, text, permanent linksCampaigns, packaging, signage, print runs
Rule of thumb

Static for anything permanent and self-contained. Dynamic for anything printed at scale, anything tied to a campaign that might change, or anywhere you actually want the scan data. If the cost of being wrong is a reprint, go dynamic.

How the dynamic redirect actually works, and what it costs you →

Content types and their payload formats

Separately from static/dynamic, a code can carry several categories of content. It's worth being clear about what's actually happening here: a QR code has no concept of "type." It stores text. What makes a scanned code offer to join a Wi-Fi network rather than open a browser is that the text follows a formatting convention the scanning app recognises. Those conventions are what this section documents.

Each of these has its own generator, already set to that type: URL, text, vCard, Wi-Fi, email, phone, SMS, WhatsApp, location and calendar event.

URL

The most common type by a wide margin. The payload is just the address, including the scheme:

https://example.com/menu

Always include https://. Without a scheme, many scanners treat the text as a plain string and show it rather than offering to open it. One density trick worth knowing: alphanumeric encoding mode covers uppercase letters only, so writing the host in uppercase — HTTPS://EXAMPLE.COM/menu — can drop the code a whole version smaller. Domains are case-insensitive, so it resolves identically; the path after the host is not case-insensitive, so leave that alone.

Plain text

No prefix at all — the scanner simply displays what's encoded. Used for serial numbers, short instructions, verification codes, or anything a human is meant to read rather than act on.

Asset 4417-B · Serviced 2026-03-11

vCard / contact card

Encodes a structured contact record so scanning offers to save it straight to the address book. The widely-supported version is vCard 3.0:

BEGIN:VCARD
VERSION:3.0
N:Rivera;Sam;;;
FN:Sam Rivera
ORG:Northwind Studio
TITLE:Creative Director
TEL;TYPE=CELL:+15551234567
EMAIL:sam@example.com
URL:https://example.com
END:VCARD

vCards get long fast, and length drives code density — a full record with address and multiple numbers can push a code past version 10 and make it noticeably harder to scan from a business card. The compact alternative is MeCard, which Android handles well but iOS support for is patchier:

MECARD:N:Rivera,Sam;TEL:+15551234567;EMAIL:sam@example.com;;

Wi-Fi credentials

Lets a phone join a network straight from the camera, with no typing. The format encodes the security type, network name and password:

WIFI:T:WPA;S:Guest Network;P:hunter2paperclip;H:false;;

T is WPA, WEP or nopass; S is the SSID; P is the password; H marks a hidden network. Note the two semicolons at the end — that's not a typo, it's part of the format. If your SSID or password contains \, ;, ,, : or ", each must be escaped with a backslash.

Before you print this one

A Wi-Fi QR code contains your password in plain text. Anyone who photographs the code has the password permanently, and changing it means reprinting. It's excellent for a guest network and a poor idea for the network your business systems run on.

Email

A mailto: link, optionally with a subject and body pre-filled, opening the default mail client with a draft ready:

mailto:hello@example.com?subject=Menu%20feedback&body=Hi%20there%2C

Subject and body must be URL-encoded — spaces become %20, line breaks %0A. Keep them short; a long pre-filled body inflates the code substantially for something the recipient will probably rewrite anyway.

Phone number

Opens the dialler with the number loaded. It does not place the call — every platform requires a confirming tap, which is by design.

tel:+15551234567

Always use full international format with the + and country code. A locally-formatted number fails for anyone scanning from a different country, which is exactly the audience a printed code tends to reach.

SMS

Opens the messaging app with recipient and optional message text pre-filled:

SMSTO:+15551234567:Send me the brochure

Support for the pre-filled body varies more than any other type here — some Android messaging apps ignore it and populate only the recipient. If the message text is essential, test on real devices before committing to print.

WhatsApp

Technically a URL, using WhatsApp's own deep-link host, which opens a chat with a specific number and an optional pre-written message:

https://wa.me/15551234567?text=Hi%2C%20I%27d%20like%20a%20quote

The number takes no +, no spaces and no dashes — just country code and number. This works whether or not the scanner has WhatsApp installed; without it they get a web prompt to install.

Location

Uses the geo: URI scheme, opening the default maps app at those coordinates:

geo:37.7749,-122.4194

Android handles geo: natively. iOS is inconsistent with it, so if your audience is iPhone-heavy, a plain maps URL is the more reliable choice — less elegant, but it works everywhere.

Calendar event

An iCalendar VEVENT block, so scanning offers to add the event directly:

BEGIN:VEVENT
SUMMARY:Autumn product launch
DTSTART:20260901T180000Z
DTEND:20260901T200000Z
LOCATION:14 Wharf Road, Bristol
END:VEVENT

Times ending in Z are UTC. Get this wrong and you'll send every attendee a calendar entry at the wrong hour — a mistake that's invisible on the code itself and only surfaces once people start arriving early.

Choosing a content type

If you want to…UseStatic or dynamic?
Send people to a pageURLDynamic if it's printed at volume
Hand out your contact detailsvCardStatic — it's self-contained
Get guests onto Wi-FiWi-FiStatic — must work without internet
Take restaurant ordersURLDynamic — menus change
Collect enquiriesEmail, SMS or WhatsAppStatic
Get people to an addressLocation, or a maps URLStatic
Drive event sign-upsURLDynamic — reuse the code next year
Label physical stockPlain textStatic

Each of these types has a step-by-step guide in our product documentation — see QR code types in the help section for how to build each one on this site.

Frequently asked questions

Can I change a static QR code into a dynamic one later?

No. The distinction is baked into what the code encodes — a static code contains your destination, a dynamic one contains a redirect URL — so switching means generating a different code and replacing whatever the old one was printed on. If there's any realistic chance you'll want to redirect it later, choose dynamic at the start; the cost of an unused capability is far lower than the cost of a reprint.

Can one QR code do two things at once?

Not reliably. A code carries a single payload, and scanners act on the first convention they recognise. If you need one code to offer several actions — save a contact, follow a social account, open a site — point it at a landing page that presents those options. That also has the advantage of being editable, and of working identically on every device rather than depending on which apps are installed.

Why does my Wi-Fi QR code work on Android but not iPhone?

Usually a formatting detail. Check that the security type matches exactly (WPA covers WPA2 and WPA3; use nopass for open networks), that both closing semicolons are present, and that any special characters in the SSID or password are backslash-escaped. Networks whose name contains a space or an apostrophe are the most frequent culprit. Both platforms have supported Wi-Fi codes for years, so a genuine platform gap is unlikely.

Does the content type change how the code is encoded?

Only indirectly. Every type is stored as text, so the encoder just sees a string — but the string's character set and length determine which encoding mode is chosen and how large the grid becomes. That's why a vCard produces a much denser code than a short link: it's several hundred characters of mixed-case text, which forces byte mode and a high version number.