What Can You Put in a QR Code Besides a Link?
A QR code doesn't "know" what a URL is. It's a grid that encodes a string of text, and whatever app scans it decides what to do with that string based on its shape. Most QR codes happen to contain a URL because phone cameras auto-detect `http://` and offer to open it, but the underlying format supports several other structured payloads that trigger different behavior on scan. Here's the actual syntax for each.
Plain URL and plain text
A URL payload is just the URL itself, nothing wrapped around it:https://example.com/page. Plain text is exactly the same idea with no scheme prefix at all, just literal text. A scanner falls back to plain text display whenever the payload doesn't match one of the recognized schemes below.
WiFi network credentials
WiFi QR codes use a small parameter format defined informally by ZXing (the barcode library most Android scanners are built on) and later adopted by iOS:
WIFI:T:WPA;S:NetworkName;P:Password;;
Each field is a single letter followed by a colon and a value, terminated by a semicolon:
T— security type:WPA(covers WPA/WPA2/WPA3),WEP, ornopassfor an open networkS— the SSID (network name), case-sensitiveP— the password, omitted entirely ifTisnopassH— optional, set totrueif the network is hidden (not broadcasting its SSID)
The trailing double semicolon closes the record. A semicolon, comma, or colon that's literally part of the SSID or password has to be escaped with a backslash (\;), or the parser reads it as a field boundary and the network name or password comes out truncated.
Contact cards: MECARD and vCard
Two competing formats show up here. MECARD is the compact one most QR generators default to:
MECARD:N:Doe,Jane;TEL:+15551234567;EMAIL:jane@example.com;;
vCard is the same idea in the older format email/calendar clients already parse natively, which is why iOS and Android contact apps generally prefer it over MECARD when both are offered:
BEGIN:VCARD VERSION:3.0 N:Doe;Jane TEL:+15551234567 EMAIL:jane@example.com END:VCARD
Email, SMS, and phone
These reuse the same URI schemes browsers already understand:mailto:jane@example.com opens a new email addressed to that recipient (append ?subject=and &body= to prefill those fields);sms:+15551234567 opens a new text message; andtel:+15551234567 prompts a phone call.
Geographic coordinates
geo:37.786971,-122.399677 hands a pair of coordinates to whatever maps app the device has set as default, no address lookup required. An optional third value adds altitude in meters.
Longer payloads mean a denser, harder-to-scan code
A QR code's version (its grid size) scales with how much data it has to hold. A short URL fits comfortably in a low version with large, easy-to-scan modules. A vCard with a base64- encoded photo embedded in it, or a long WiFi password, can push the code up several versions into a dense grid where each module is small enough that a slightly blurry camera or a code printed too small physically fails to scan. If a QR code needs to work reliably from a few feet away or on a low-end camera, keep the payload short. A photo belongs in a linked vCard file, not embedded inline.
Generating and reading these
QR Code Generator builds any of these payload types entirely in your browser, and QR Code Scanner decodes an existing QR code's raw payload so you can see exactly what format it's using before you scan it with something else.