Why offline campaigns need a tracking layer
Offline campaigns — posters, flyers, packaging, menus, event badges — are hard to measure. You can see how many codes were scanned, but that does not tell you which channel or placement drove the scan. Was it the poster in the subway or the flyer at the conference? Was it the menu on the table or the one at the entrance? Without a tracking layer, all scans blend into one number, and you cannot tell what worked.
UTM parameters solve this. They are tags added to the URL behind the QR code that tell your analytics platform where the visitor came from. When someone scans the code, the URL opens with the UTM tags, and the analytics platform records the source. This makes offline campaigns measurable in the same way as online ones.
This article is about how to use UTM parameters with QR codes for offline campaigns. It covers what to tag, how to structure the tags, and how to avoid the common mistakes that make the data unreliable.
What UTM parameters are
UTM parameters are a set of tags appended to a URL. They do not change the destination; they only add information about where the visit came from.
The standard UTM parameters are:
utm_source — where the traffic came from (for example, poster, flyer, menu);
utm_medium — the type of channel (for example, offline, print, event);
utm_campaign — the name of the campaign (for example, summer_sale, launch_2026);
utm_content — the specific placement or creative (for example, subway_poster, conference_flyer);
utm_term — usually used for paid keywords, rarely needed for QR codes.
When someone scans a QR code that contains a UTM-tagged URL, the analytics platform records the tags and attributes the visit to the correct source, medium, campaign, and content.
Why UTM parameters matter for QR codes
Without UTM tags, a QR code only tells you that a scan happened. With UTM tags, it tells you which placement, campaign, and channel drove the scan.
This matters for several reasons.
First, it lets you compare placements. If the poster in one location performs better than the poster in another, you can see it in analytics.
Second, it lets you compare offline and online. You can see whether QR scans from print contribute more or less than social media or email.
Third, it lets you measure campaigns over time. If you run the same campaign in different months, UTM tags let you compare the results.
Fourth, it lets you optimize. If one placement performs poorly, you can adjust or remove it.
Without UTM tags, all this information is lost. You know scans happened, but not where they came from.
How to structure UTM parameters for QR codes
The structure of the tags matters. A consistent, well-planned structure makes the data usable; a messy one makes it hard to analyze.
Use consistent naming. If you use "poster" in one campaign, do not use "Poster" or "posters" in another. Analytics platforms treat these as different values.
Use lowercase. Some platforms treat uppercase and lowercase as different. Lowercase is safer.
Use hyphens or underscores, not spaces. Spaces in URLs are encoded, which can cause issues. Hyphens and underscores are safe.
Keep values short but descriptive. "subway_poster" is better than "poster_number_3_in_the_subway_station".
Plan the hierarchy. utm_source is the broadest level (for example, print), utm_medium is the type (for example, poster), utm_campaign is the specific campaign, and utm_content is the specific placement.
Document the structure. Keep a list of the values you use, so the team stays consistent.
For a related look at how UTM tags work in general, see URL rotation and A/B testing for short links.
How to add UTM parameters to a QR code
The process depends on how the QR code is created.
If the QR code is static, the UTM-tagged URL is encoded directly into the code. The tags cannot be changed after printing.
If the QR code is dynamic, the code contains a short link, and the short link redirects to the UTM-tagged URL. This allows changing the UTM tags without reprinting the code.
Dynamic QR codes are usually better for offline campaigns because they allow changes without reprinting. If a campaign runs for a long time or uses many placements, dynamic codes are more flexible.
Steps:
— decide on the UTM structure;
— build the tagged URL;
— generate the QR code with the tagged URL;
— test the code on multiple devices;
— confirm that the analytics platform records the tags;
— print and distribute the code.
Testing is essential. A UTM-tagged URL that has a typo will still work, but the data will be wrong.
How to avoid common UTM mistakes
A few mistakes come up often enough to be worth naming.
Mistake one: inconsistent naming. "poster" and "Poster" are treated as different values.
Mistake two: spaces in values. Spaces are encoded, which can cause issues with some analytics platforms.
Mistake three: missing parameters. If utm_campaign is missing, the visit may not be attributed to the correct campaign.
Mistake four: over-stuffing. Adding too many parameters makes the URL long and the QR code dense, which can reduce scan reliability.
Mistake five: not testing. A typo in a UTM value is invisible until you look at the data.
Mistake six: using the same tags for different placements. If two placements share the same tags, you cannot tell them apart.
Mistake seven: not documenting the structure. Without documentation, the team will use different values over time.
How to read UTM data for QR campaigns
Once the tags are in place, the analytics platform will record the visits. The data can answer several questions.
Which source drives the most scans? For example, print vs. event vs. packaging.
Which medium performs best? For example, posters vs. flyers vs. menus.
Which campaign is most effective? For example, summer_sale vs. launch_2026.
Which placement is most effective? For example, subway_poster vs. conference_flyer.
How does offline compare to online? For example, QR scans vs. social media clicks.
The data should be reviewed regularly. A sudden change in one placement may indicate a problem with the code or the placement.
For an example of how QR code data is analyzed, see analyzing who actually scans your event QR code.
When UTM tags are not the right approach
UTM tags are useful, but not always the right tool.
If the campaign is small and the goal is just to know how many scans happened, UTM tags may be unnecessary.
If the destination page does not support UTM tags or the analytics platform does not record them, the tags will not help.
If the QR code is printed once and never changed, the tags are static, which may be fine but limits flexibility.
If the URL becomes too long, the QR code becomes dense, and scan reliability may drop. In this case, it may be better to use a dynamic QR code with a short link and add UTM tags at the redirect level.
In most offline campaigns, UTM tags are worth the effort, but they should be planned, not added as an afterthought.
Frequently asked questions
Can I use UTM parameters with QR codes?
Yes. The UTM tags are added to the URL behind the QR code. When the code is scanned, the URL opens with the tags, and the analytics platform records the source, medium, campaign, and content.
Should I use static or dynamic QR codes with UTM tags?
Dynamic QR codes are usually better for offline campaigns because they allow changing the UTM tags without reprinting. Static codes encode the tags directly and cannot be changed after printing.
What UTM parameters should I use for QR codes?
Typically utm_source, utm_medium, utm_campaign, and utm_content. utm_term is rarely needed for QR codes. Use consistent, lowercase values without spaces.
How do I avoid common UTM mistakes?
Use consistent naming, avoid spaces, include all necessary parameters, do not over-stuff, test the code, use different tags for different placements, and document the structure.
How do I read UTM data for QR campaigns?
Look at which source, medium, campaign, and content drive the most scans. Compare offline and online. Review regularly to spot anomalies.
When are UTM tags not worth it?
When the campaign is small, when the analytics platform does not support UTM tags, when the URL becomes too long, or when the QR code is printed once and never changed. In these cases, a simpler approach may be better.