I work with a lot of local businesses that run offline campaigns such as flyers, radio spots, transit ads, and mailers. We know that these tactics work for local businesses, but how well do they work? Without tracking, it’s hard to put a number on the impact of offline tactics.
It is possible to get meaningful directional data on offline advertising traffic. It won’t be perfect attribution, but it’ll give you a signal where right now you have none.
One quick clarification before we get into it: if you’ve searched for “offline tracking in GA4” before, you’ve probably found a lot of content about Google Ads offline conversion imports. That includes things like uploading phone call records or CRM data back into Google Ads to close the attribution loop. That’s a legitimate workflow, but it’s a different problem. What I’m covering here is a truly offline discovery: when someone sees your flyer or hears your radio ad and then visits your website, how do you know that’s what happened? That’s what UTM parameters and redirect URLs are for.
Let’s walk through the full setup.
Start Here: What Your UTM Parameters Should Look Like for Offline Ads
If you’ve used UTM parameters for digital campaigns before, the structure for offline is the same. The difference is in the values you use. If you’d like the full foundation first, my guide to UTM parameters in GA4 covers the whole picture. For offline campaigns specifically, here’s how I’d build out the four key parameters.
Let’s say a local café is running a seasonal flyer drop promoting their summer drinks menu. Here’s what I’d use:
- utm_medium=offline — this tells GA4 the session came from an offline marketing tactic
- utm_source=flyer — the specific channel or format
- utm_campaign=summer+2026 — the campaign name (plus symbols become spaces in GA4; dashes and underscores also work)
- utm_content=summer+drinks — the specific offer or creative, useful if you’re testing multiple messages
Put together, the full destination URL looks something like this:
https://example.com/summer-drinks/?utm_medium=offline&utm_source=flyer&utm_campaign=summer+2026&utm_content=summer+drinks
One thing to note: there’s no official list of required medium values for offline traffic in GA4. I simply use offline because it’s a clear, consistent value and it’s easily understood by anyone else reviewing your GA4 data. If you already have campaigns tagged as utm_medium=print or utm_medium=direct-mail, that’s fine too. The important thing is consistency!
Nobody Is Typing That URL Into Their Phone
Here’s the obvious problem with the URL above: it’s 100+ characters long, and there is absolutely no universe in which someone reading a flyer is going to type that into their browser. At least not without messing it up somewhere along the way!
Instead of putting this UTM-tagged URL on your ad, we’ll use a short, memorable URL that immediately redirects to it. The visitor types in something like yourcafe.com/summer, they land on your seasonal drinks page, and GA4 picks up all the UTM parameters from the redirect destination. Most visitors won’t even notice the redirect or the UTM parameters.
Why not use a link shortener like bit.ly? They certainly work for the basic use case, but why use a third-party service when you can do this on your own site? Plus a URL on your own site looks more credible to the people you’re asking to visit it and you don’t need to worry about a third-party service going out of business and taking all your redirects with them.
What about QR codes? QR codes don’t need a redirect process because you can use the URL with UTM tags as the QR code destination. This process is intended for people reading or hearing a short URL that they would need to type into their phone or computer. If you want to learn more about using QR codes, I covered that approach in my Black Friday tracking post.
Can I reuse these redirects in the future? Absolutely! You could keep using the same redirect link year after year and just update the campaign values to match the current time period.
One last tip before we get into the setup: keep a log of what each redirect URL is pointing to and when you last updated it. If someone on your team later publishes a page at the same path as an active redirect, the redirect will stop working and you probably won’t realize it until you see your data disappear in your reports.
How to Set Up Your Redirect: A Platform-by-Platform Guide
Most website platforms make this pretty straightforward. Here’s how to do it on the ones I see most often with local business clients.
One important note for Shopify and Squarespace users before we get into the steps: Both platforms will only allow a redirect from a source URL that doesn’t currently exist on your site. If you’ve already published a page at /summer/, the redirect won’t work as the live page takes precedence and no error is shown. For this use case that’s rarely a problem (you’re creating a new tracking path, not overriding an existing page), but it’s worth knowing before you run into it.
WordPress
The Redirection plugin is the one I’d recommend here. It’s what we use, it’s free, widely used, and straightforward to configure.
Install the plugin, then go to Tools > Redirection > Add New. Enter your short URL (for example, /summer/) as the source, and your full UTM-tagged URL as the destination. Select the options “Ignore Case” and “Ignore Slash”, then save the redirect and it’s live!
One thing to confirm: make sure the source URL path doesn’t already exist as a real page on your site, or the redirect may not work. Even if it does work, you’ll end up redirecting traffic away from a real page on your site, which you don’t want to do.
Wix
Wix has redirect functionality built in, so no plugin needed. Go to Settings > URL Redirect Manager > Add Redirect. Enter the source path and the destination URL.
Note that Wix redirects require a connected custom domain. If you’re on the free Wix subdomain, you’ll need to upgrade before this option becomes available.
Shopify
In your Shopify admin, go to Online Store > Navigation. Look for View URL Redirects — in some Shopify admin versions this link is tucked behind a (…) overflow menu, so check there if you don’t see it immediately. Add the source path and destination URL.
Shopify also has a restriction on which source paths you can redirect from. Paths starting with /products, /collections, /apps, /cart, and a few others can’t be used as redirect sources. For a campaign-specific vanity URL like /summer/ this won’t be an issue, but keep that in mind for future redirects.
Squarespace
Go to Settings > Developer Tools > URL Mappings. Squarespace uses a text-based syntax that differs from the other platforms. Each redirect is entered as a single line in a text box, formatted like this:
/summer -> /summer-drinks/?utm_medium=offline&utm_source=flyer&utm_campaign=summer+2026&utm_content=summer+drinks 301
The arrow is a hyphen followed by a greater-than symbol (->), with spaces on both sides. The 301 at the end specifies a permanent redirect. Any formatting error will prevent the whole block from saving, and Squarespace will show a red error message — so double-check what you entered if you run into an error message when you try to save.
GoDaddy Website Builder
In the GoDaddy Website Builder side panel, look for More > Settings > URL Redirect. Enter the source path and the destination URL. Note that the source path needs to be one that doesn’t already exist on your site.
Using another platform?
Searching “[platform name] + URL redirect” will usually get you to the right documentation. If you’re stuck, get in touch and I’ll add instructions for your platform.
Now Tell GA4 What to Do With This Traffic: Setting Up Your Custom Channel
Without a custom channel, sessions tagged with utm_medium=offline will land in the Unassigned channel in your acquisition reports. By setting up a custom channel, you’re giving that traffic a proper home.
If you’ve set up a custom channel group in GA4 before, this will look familiar. If you haven’t, check out my guide to setting up custom channel groups.
In your GA4 admin, go to Data Display > Channel Groups, then open the channel group you’re using for this property (assuming you’ve already created a custom channel group). If you don’t have a custom channel group, go to my guide and follow the steps to create a new custom group, then come back here.
Click Add New Channel, name it “Offline Advertising” (or whatever you want), and set the condition to: Medium exactly matches offline.
This channel doesn’t conflict with any existing default GA4 channels, so you don’t need to reorder anything after saving. Just save your changes and you’re all set!
Here's How to Check If Your Setup Is Working
You won’t see traffic data until the campaign actually runs, but there’s a test: visit the short redirect URL yourself and confirm it lands on the right page with the UTM parameters visible in the browser address bar. If they’re there, the redirect is working.
After your campaign launches, check your Acquisition reports for traffic in the Offline Advertising channel. Google Analytics can take anywhere from 24 to 72 hours for full processing, so don’t worry if nothing shows up immediately on day one.
If traffic is landing in Unassigned instead of your custom channel, double-check your UTM and channel definition and make sure you’ve set it up exactly the same. Google Analytics is case-sensitive, meaning utm_medium=offline and utm_medium=Offline are treated as different values. Check the spelling in both your redirect destination URL and your channel condition. For a broader look at what causes Unassigned traffic and how to address it, this post walks through the most common scenarios.
FAQ
They sound similar but they’re describing different things at different points in the funnel. Tracking offline advertising traffic (what this post covers) is about attributing website sessions to offline marketing channels like flyers, radio, or transit ads. Offline conversion tracking in the Google Ads sense is about uploading phone call records, CRM data, or in-store visit information back into Google Ads to tell it which clicks led to real-world outcomes. Both are valuable, but they solve different attribution problems and require completely different setups.
It isn’t a Google Analytics requirement! In fact, there’s no official list of required or recognized medium values for offline traffic in GA4. “offline” is a convention I recommend because it’s clear, consistent, and makes your reports readable to anyone looking at them. If your team already uses utm_medium=print or another value consistently, that works too. What matters is that your GA4 custom channel condition exactly matches whatever value you’re using.
You can, and it’ll work for the basic tracking use case. My preference for your own domain comes down to brand trust (a URL on your own site looks more credible) and avoiding a dependency on a third-party service. That said, if bit.ly is what you have and getting any data is better than getting none, it’s a perfectly fine starting point.
Plan for 24 to 72 hours after someone visits the tracking URL for that session to be fully attributed in your GA4 reports. The session itself will often appear faster, but give it a couple of days before drawing conclusions about whether your channel setup is working correctly.
Start with case sensitivity — utm_medium=offline and utm_medium=Offline are treated as different values in GA4, and your channel condition needs to exactly match what’s in your URL. If the spelling checks out, confirm that you’re looking at your custom channel group that has the Offline channel added and not another group. And if you’re troubleshooting Unassigned traffic more broadly, this post covers the most common causes.
That's the Full Setup
Remember, you won’t get perfect data from this, but going from “we have no idea if the flyer is working” to “we can see 47 sessions came from the summer flyer campaign and 12 of them converted” is fantastic progress.
Once your redirect is live, your UTMs are consistent, and your custom channel is set up, you’ll be able to look at your acquisition reports after the next campaign and have something concrete to say about its performance.