100% In Browser
Add UTM tags so the scans show up in GA4

Need every channel tagged, or a link checked for GA4? Build UTM link

A logo switches error correction to H, and the code is decoded again with the logo in place.

Exact text inside the code

Dynamic QR codes (edit the destination after printing, scan statistics) are coming to Pro.

Why a QR code needs a preflight

A QR code that looks fine on screen can still fail on the shelf. The usual causes are a brand colour with too little contrast, a design that crops the white border, a long tracking link that makes the modules tiny, and a print that is simply too small for the distance people stand from it. None of those show up until the job is printed, so this generator checks them before you download.

What the scan check does

Each time the code is drawn, the pixels are read back by jsQR, an open source decoder, exactly as a phone camera would read an image. The decoded text has to match what you typed byte for byte, including accents and line breaks. If a logo, a colour or a missing quiet zone stops it decoding, the check fails and says so. The other checks are graded pass, warning or fail:

How big to print a QR code

The rule of thumb used here is the ten to one rule: the code should be at least one tenth of the scanning distance wide, so a poster read from two metres needs a 20 cm code. QR Code Generator publishes the same ratio in its minimum size guide, together with a floor of 2 by 2 cm. A dense code needs more room than the ratio suggests, so each module is also kept at 0.4 mm or more, which is the smallest module the GS1 General Specifications allow for retail QR codes (0.396 mm). The calculator takes the largest of the three, then adds the quiet zone. The print export writes that size and resolution into the PNG, so layout software places it at its real size, and the SVG carries the size in millimetres.

Which type to choose

TypeWhat the phone does
WebsiteOpens the link. Add UTM tags so scans are attributed in GA4.
App linkSends iPhone to the App Store and Android to Google Play from one code.
Wi-FiOffers to join the network, no typing.
ContactOffers to save a vCard 3.0 contact.
EventOffers to add the event to the calendar, in UTC.
Email, SMS, phoneOpens a prepared message or starts a call.

Tracking scans in GA4

A QR code cannot tell analytics where it was printed, so the link has to. Tag it with utm_source for the placement and a utm_medium that GA4 maps to a channel. utm_medium=qr is popular but lands in Unassigned unless you define a custom channel group, which the generator warns about. The UTM builder checks a link against the full GA4 channel list.

Questions about QR codes

No. They are static codes: the link or text is stored in the pattern itself, so they keep working for as long as the destination exists. There is no redirect service in between that could be switched off. The one exception is the app link, which passes through adchecklab.com so it can pick the right store.

No. Encoding, decoding, the checks and the exports all run in this browser. Wi-Fi passwords, contacts and CSV files never reach a server. Analytics records which features are used, never what you typed.

SVG for print and for anything that will be scaled, because it is vector and stays sharp at any size. PNG for slides, email and social posts. For print, use the print PNG, which is rendered at the exact physical size and resolution you chose.

M suits most print. L keeps a long link compact on screen. Q helps on rough surfaces and outdoor signs. H is needed for a logo in the centre, and the generator switches to it automatically when you add one.

The app link page only ever redirects to an App Store or Google Play address it builds itself from a numeric app id or a valid package name. The fallback website is shown as a labelled link that the visitor has to click, and only https addresses are accepted, so the link cannot be abused to send people somewhere else.

Related tools

Tag the destination first with the UTM builder. For display campaigns, wire the same link into a banner with the clickTag generator and check the finished ZIP with the HTML5 banner validator. Video cuts for social go through the safe zone checker.