Use a UTM tagged link, turn that link into a QR code, and check GA4 Traffic acquisition reports, you can set up Google Analytics QR code tracking in about 10 minutes.
If you only do one thing, make each printed placement use its own tagged URL. That is what lets Google Analytics tell a poster scan from a box insert or a table tent. If the destination might change later, make the code dynamic so you can swap the link without reprinting.
How to set up Google Analytics QR code tracking#

-
Open a QR generator and decide what the code should open, usually a landing page, product page, form, or app page. If you want to change the destination later, start with a dynamic code instead of a static one.
-
Build a UTM tagged link for that destination using your site URL plus campaign parameters. A typical link looks like
yourdomain.com/sale?utm_source=qr&utm_medium=print&utm_campaign=spring-flyer. -
Make one tagged link for each placement you want to compare. Keep
utm_source=qrthe same, then change fields likeutm_medium=poster,utm_medium=packaging, orutm_campaign=menu-juneso the reports stay readable. -
Paste the full tagged link into the generator and create the code. With QRFLOW.codes, you can generate the code right away, and your first dynamic code is free if you need to edit the link after printing.
-
Name the code after the real-world object it will live on, not just the campaign. Good names look like
front-window-posterortrade-show-box-card, which saves you guessing later. -
Publish or print the code, then scan it once yourself to confirm the page opens with the UTM parameters still attached. If your browser strips or redirects the tags away, fix that before you send anything to print.
-
Open GA4 and go to Reports, Acquisition, Traffic acquisition to see sessions from your QR visits. Look first at Session source, Session medium, and Session campaign.
-
Compare QR traffic against conversions on the landing page, not just visits. A code that gets 200 visits and 2 form fills is weaker than one that gets 40 visits and 12.
A short note on static versus dynamic. Static codes bake the tagged link into the square itself, so changing the destination means a new code and a reprint. Dynamic codes send scanners through a short link first, which lets you change the destination later and, on paid plans, add scan analytics too.
Need a code you can edit after the poster is already up? Use the free QR code generator to make the code first, then swap the destination later if your campaign page changes.
Which UTM setup gives you clean GA4 reports?#

Clean GA4 reports start with consistent names. Pick one naming pattern before you print anything, then stick to it across every code.
For most teams, this setup works well:
utm_source=qrutm_medium=printutm_campaign=spring-saleor another campaign nameutm_content=table-tent-aorutm_content=window-poster
The key is not the exact words. The key is that the same field always means the same thing. If utm_medium means placement on Monday and channel on Friday, your report gets messy fast.
utm_content is the field most people skip, and it is often the one that helps most. Use it to tell similar printed pieces apart, like two posters in different store windows or two postcard versions in the same mail drop.
Avoid spaces, random capitalization, and last minute abbreviations. GA4 treats SpringSale, springsale, and spring-sale as different values.
If you run lots of printed campaigns, keep a simple sheet with approved UTM names. That matters even more if several people make codes. If you also want scan level reporting from the QR platform itself, read your scan analytics alongside GA4 so you can compare scans with sessions.
If your destination is a form, the setup is the same. Build the tagged link first, then turn it into a code. If you still need the form itself, start with How to make a Google Form, from blank to published.
Track QR code with changing link#

Trackable QR codes still work if the link changes later, but only if you control the redirect. Put the UTM tagged destination behind a dynamic code, then update the destination without changing the printed square.
That matters for seasonal menus, event pages, and limited offers. Say your flyer first points to /spring-sale and later needs to point to /summer-sale. With a dynamic code, you keep the same printed code and edit the destination in one place.
There are two clean ways to handle this:
- Keep the UTMs on the final destination URL each time you update it.
- Send the code to a stable redirect URL on your own site, then let that page or redirect pass the UTMs into the final destination.
The first method is simpler. The second is better if many printed codes will change over time, because you keep your naming system in one place.
If your campaign team may swap pages after launch, this is where dynamic beats static in real life. QRFLOW.codes lets you change where a code points after printing, and Premium makes every code dynamic if you need that across all campaigns. If that is part of your rollout, check plans and prices before you print a batch.
If you want a deeper breakdown of the choice, see static vs dynamic QR code.
What should you look at in GA4 after scans start coming in?#

GA4 should answer three questions first: which printed piece got visits, which visits turned into action, and which placements were worth reprinting.
Start in Traffic acquisition. Filter by source or campaign, then compare sessions, engaged sessions, and conversions. If your site tracks purchases, leads, or signups as conversions, use those instead of raw traffic as your score.
Then check these patterns:
- High scans, low sessions usually means redirects, slow pages, or people dropping before the page loads.
- Good sessions, low conversions usually means the landing page does not match the promise on the printed piece.
- One placement beating another usually means better context, not a better QR design. A checkout counter card and a sidewalk poster ask for very different attention.
You can also compare QR traffic with other channels inside GA4. That helps answer whether print is assisting a campaign or carrying it.
If you want a practical split, use GA4 for website behavior and conversion data, then use the QR platform for scan details. A dynamic code on QRFLOW.codes can show when and where scans happened, while GA4 shows what people did after they arrived. Those two views together are usually enough to decide what to print again.
Choosing a QR code generator#
For this job, the main thing to check is whether the generator supports dynamic codes, because that is what lets you keep the printed square and change the destination later. You also want clear naming, easy downloads, and scan reporting if you plan to compare platform scan counts with GA4 sessions.
If your campaign is simple and the page will never move, a static code is fine. If the campaign might change, or several printed pieces need separate tracking, dynamic usually saves you from a reprint and keeps your reporting cleaner.
Best practices for QR code placement#
Where you place your QR codes can significantly impact their effectiveness. Consider the environment and how people will interact with the code. High-traffic areas like store entrances or checkout counters are ideal. Ensure the code is at eye level and easily accessible. Avoid placing codes in areas with poor lighting or where they might be obstructed. If you're using QR codes on printed materials like flyers or posters, make sure they're large enough to be scanned easily. A minimum size of 1 inch (2.5 cm) is recommended for most uses. Test the placement by scanning the code yourself to ensure it's functional in its intended location.
Integrating QR data with tools#
Most teams do not need a complicated stack. GA4 covers sessions, engagement, and conversions on your site, while your QR platform can cover scan counts, scan time, and rough location data if that feature is available.
The useful part is comparing the two views without expecting them to match exactly. A scan does not always become a session, and a session can be filtered, redirected, or dropped before GA4 records it. When you see a gap, check page speed, redirects, and whether the tagged URL stays intact after the scan.
If you share results with a sales or marketing team, keep one sheet with the code name, the printed placement, and the UTM values used. That makes it much easier to line up a physical poster or insert with the traffic it created later.
Questions people ask about Google Analytics QR code tracking#
How do I create a UTM tagged link?#
To create a UTM tagged link, start with your site URL and add campaign parameters like utm_source, utm_medium, and utm_campaign. This helps track the source and effectiveness of your marketing efforts in Google Analytics.
Can I track QR code scans without using Google Analytics?#
Yes, you can track QR code scans using a QR code generator that offers scan analytics. This provides insights on when and where scans occur, but for detailed website behavior, Google Analytics is recommended.
What is the difference between static and dynamic QR codes?#
Static QR codes have a fixed URL that cannot be changed without creating a new code. Dynamic QR codes allow you to change the destination URL after printing, making them more flexible for campaigns that may need updates.
Why are UTM parameters important for QR code tracking?#
UTM parameters are important because they help identify the source, medium, and campaign of your traffic in Google Analytics. This allows you to see which QR code placements are driving traffic and conversions, making your marketing efforts more measurable.
A good tracked code is not just scannable. It tells you which piece of print did its job. Make your next one with the generator, and if you need editable links or deeper tracking across campaigns, see /pricing.
