Skip to content

QR

A QR code that opens the app, not a web page.

The code is only a way of typing a URL. Everything that decides whether your app opens happens after the scan, in software you did not choose.

Encode a link, not a scheme

The first mistake is encoding myapp://product/14. A custom scheme has no meaning to anybody without the app: the scan produces an error, or nothing, and the person has no way to work out what you intended. It also cannot be measured, because no request ever reaches anybody.

Encode an https:// link. Somebody with the app gets the app; somebody without it gets a page that can send them to the store and remember where they were going.

Two scanners, two behaviours

  • The system camera on iOS and Android hands the URL to the operating system, so a universal link or app link is honoured and your app opens directly. This is the good path and it is the majority one.
  • A third-party scanner app frequently opens the URL in its own built-in web view instead. That is an in-app browser, with the failure that comes with one — the OS may never be asked, so your configuration never runs.

You cannot control which one somebody uses, which is the argument for a link that behaves sensibly in both rather than one that assumes the first.

Printed codes and the destination problem

A QR code on packaging, a poster or a card cannot be edited. If it encodes your destination directly, the destination is now permanent — and campaigns, product pages and offers are not.

Encoding a link whose destination you can change afterwards is the whole point of an indirection. The printed artefact stays valid; where it points is a field you can edit. This is also what makes a physical campaign measurable at all: every scan is a resolution you can count, rather than traffic that appears at your website with no origin.

What you can tell afterwards

Each scan is a click against that link, so a code on one poster and a code in one magazine are separable if you issue them as separate links. Where somebody installs the app after scanning, deferred matching decides whether that install can be tied back to the scan, to a measured degree rather than a claimed one.

Creating links is in the quickstart, and the API reference covers doing it in bulk if you are generating a code per unit.