Raydar free tools · UTM builder

UTM parameters for QR codes

Tag every QR code with utm_source naming the placement, such as flyer or menu, and utm_medium=qr. An untagged scan arrives with no referrer and looks exactly like Direct traffic. A tagged scan lands in GA4's Unassigned channel, because GA4 has no QR channel, but it keeps its own source and medium.

The interactive UTM builder loads with this page, pre-filled for QR codes, and runs entirely in your browser.

The preset

utm_source=placement-name&utm_medium=qr&utm_campaign=campaign-name

No GA4 default channel matches qr, so tagged scans land in Unassigned: out of Direct, and one custom channel group away from a QR row of their own.

Where to put it

  1. Build the tagged URL here: utm_source names the physical placement, utm_medium=qr.
  2. Make the code from the full tagged URL with the QR code generator.
  3. Scan a printed proof with a phone and check the utm_ values reach the landing page.
  4. In GA4, add a custom channel group with a QR channel matching medium qr if you want scans on their own row.

A scan of an untagged QR code opens your URL with no referrer. GA4's Direct channel is source (direct) with medium (none) or (not set), which is exactly what an untagged scan looks like, and exactly what someone typing your address by hand looks like. The flyer, the menu and the packaging insert all get folded into one number that can't tell them apart. Why traffic shows as Direct has the longer version.

Tagging moves scans into Unassigned, and that's progress. GA4 has no default channel for QR, print or offline traffic. utm_medium=qr matches none of the medium values GA4 reserves, so tagged scans land in Unassigned. Unassigned sounds like a failure, but the scans now carry their own source and medium, so a source/medium report shows flyer / qr on its own row, apart from people who typed your URL. To give them a named channel, add a custom channel group in GA4 with a QR channel that matches medium qr.

The Referral shortcut, and why we don't use it. GA4's Referral channel fires on the mediums referral, app or link, so utm_medium=referral would put scans in a named channel with no setup. It would also mix them into the channel you use to judge partner sites and links from around the web. That's a worse report than a clean Unassigned row, so the preset uses qr.

One code per placement. Use utm_source=flyer on the flyer, utm_source=menu on the menu, the same utm_campaign for everything printed for one promotion, and utm_content when you test two designs of the same flyer. Then the source report is a list of your physical placements, each with its own count.

Check before you print. Build the code from the full tagged URL with the QR code generator, scan the proof with a phone, and confirm the tags reach the landing page. If they don't, why UTM parameters get stripped lists the usual reasons. For the reporting side, see how to track QR code scans.

Questions

Can you UTM a QR code?

Yes. Add the UTM parameters to the URL first, then generate the QR code from the full tagged URL. The scan opens that URL, tags included, and your analytics reads them on arrival.

Why do my QR code scans show as Direct in GA4?

Because a scan arrives with no referrer, and without UTMs GA4 sees source (direct) and medium (none), which is its definition of Direct. Tagging the URL gives each scan its own source and medium.

What utm_medium should I use for QR codes?

qr, as long as you know where it lands: GA4 has no QR or offline channel, so qr falls into Unassigned by default. Add a custom channel group to give it a named row. Using referral would put scans in a named channel straight away, but mixes them with links from other websites.

Back to the UTM builder for every platform, or another one: Instagram · Facebook and Instagram ads

Give your bio link a brain.

Build your page, watch who converts, free to start.

Get started free

No card required.