A billboard cannot be clicked. Neither can a magazine page, a conference stand, a radio read, or a carton of oat milk. The people they persuade still arrive at your website, but they arrive without a referrer, so your analytics files them as direct traffic or as branded organic search. The offline budget produces the visit and the search agency gets the credit.
The fix is to give each placement its own address, so the arrival is identifiable. That covers most of what you need. For channels where a unique address is impractical — television, broad outdoor — you fall back to measuring lift against a control. Everything else in offline attribution is detail.
Why offline traffic disappears
When a browser follows a link it sends a referrer header saying where it came from. That header is the raw material of every attribution report you have ever read.
Offline media generates none of it. Someone reads your address off a page and types it, or scans a code that opens the destination cold. The browser has nothing to report, so the session is labeled direct — a bucket that also contains bookmarks, autocomplete, and anyone who already knew your name.
There is a second, subtler leak. A great deal of offline advertising does not send people to a URL at all; it sends them to a search engine. They see the poster, they remember the brand, they search it later. That visit is recorded as organic or paid search, which means an outdoor campaign shows up in your reports as an improvement in search performance. The money moved the needle in exactly the place it will not be credited.
Mechanism 1: a unique address per placement
This is the workhorse, and it is deterministic: a response either used the address or it did not, with no modeling in between.
Give each placement its own short link. The magazine advertisement gets one, the conference stand gets another, each SKU of packaging gets its own. Because the address is printed rather than clicked, it needs to be short and readable — something a person can carry across a room in their head, or that fits under a QR code without crowding it.
The important mechanical detail: the tracking parameters go on the redirect, not on the printed address. A human types acme.com/radio, and the redirect sends them to the destination with utm_source, utm_medium and utm_campaign attached. The reader gets six characters to remember; your analytics gets full tagging. Printing the parameters instead gives you an address nobody will type and, on packaging, a QR code with modules too small to scan reliably — the sizing arithmetic is in our guide to QR codes on packaging.
If you are unsure what tags to attach, draft them in the UTM builder before committing them to a template.
Mechanism 2: a code redeemed at checkout
A unique promotional code does something a link cannot: it survives channel-hopping.
Someone hears a podcast read on a commute, forgets the URL, searches for the brand three days later on a different device, and buys. The link is long gone. The code — mentioned twice in the read, easy to remember — comes back at checkout and identifies the source anyway.
Codes are strongest where the offer is genuinely useful, where the medium is spoken, and where the gap between exposure and purchase is measured in days. They are weakest when the discount changes buying behavior enough to distort what you are measuring, which it usually does. Read the numbers as a signal of source, not as a clean measure of incremental revenue.
Run codes and links together. They catch different people.
Mechanism 3: a lift test
Some channels resist unique addresses. Nobody scans a code from a motorway billboard at 70 mph, and a fifteen-second television spot cannot carry a URL anyone will remember.
For these, stop trying to identify individuals and measure the market instead. Run the campaign in some regions and not in others, then compare the difference in direct traffic, branded search volume, and conversions between the two groups. Or run it in a fixed window and compare against a matched period before it started.
Lift tests are more work and produce less satisfying reports. They are also the only method that measures the search-engine leak described above, because branded search volume is exactly the thing they capture. If outdoor or television is a serious line in your budget, one properly designed geographic holdout will tell you more than a year of coded links.
How granular to go
The most common mistake is not too few codes. It is too many.
A useful rule: give a placement its own code only if you would act on the result. Two billboards in the same city, bought as a package you would never split, do not need separate codes — separating them creates two thin, noisy numbers where one solid number would do. The same billboard in two cities where you might cut one next quarter absolutely does.
Granularity follows decisions, not curiosity. Apply the rule and most campaigns settle at a manageable number of links rather than several hundred.
| Channel | Best mechanism | Sensible granularity | What it will not tell you |
|---|---|---|---|
| Direct mail | Unique link per batch, code as backup | Segment, creative | Household members converting on another device |
| Print advertising | Vanity URL, plus a QR where the reader is seated | Publication, issue | Readers who search the brand instead of typing |
| Packaging | QR per SKU or print run | SKU, market | Which retailer the unit came from |
| Events and trade shows | QR per stand, session and handout | Event, asset | Conversations that close months later |
| Outdoor | Geographic lift test | Market | Individual site performance |
| Podcast and radio | Vanity URL plus a spoken code | Show, read | Listeners who search rather than type |
| Television | Geographic or time-based lift | Market, flight | Anything at household level |
| In-store signage | QR per store cluster | Region, format | Whether the sign or the shelf position worked |
Naming that still makes sense in a year
Offline campaigns outlive the people who named them. Packaging especially: a code created this quarter will still be scanned when nobody in the current team recognizes the campaign name.
Use a fixed order and stick to it — channel, placement, market, period — in lowercase with hyphens: print-vogue-uk-q3, event-saas-summit-berlin, pack-oat-original-de. Avoid internal shorthand and agency codenames, which are undecipherable to whoever inherits the account. Avoid anything with a space; it becomes %20 and looks broken in the one place a customer might see it.
Then stop relying on memory. Save the tagging as a UTM template so values are selected rather than typed, and the convention applies itself when a new starter joins mid-campaign. If you are producing dozens of links for an event or a print schedule at once, the bulk shortener will generate them together and hand back a CSV you can paste into the artwork brief.
Offline responds slowly
Digital channels report within hours and tempt you to judge everything on the same clock. Offline does not work that way.
A commuter sees a poster in the morning and acts that evening, or at the weekend, or not until the next time the thing is relevant. A magazine sits on a table for a month. Packaging is scanned in a kitchen, sometimes a year after purchase. A trade-show lead surfaces in the next budget cycle.
Two practical consequences. Judge an offline placement over weeks, not days — a print campaign assessed at 48 hours will look like a failure regardless of whether it was one. And keep enough click history to compare this year's event against last year's, which means at least thirteen months of retention. Anything shorter cannot answer the question anyone actually asks at planning time. Retention limits vary sharply between tools and free plans are usually the worst offenders; ours are listed on the pricing page.
What this cannot tell you
Coded response measures the people who used your code. It does not measure the people you reached.
This is the single most misread number in offline marketing. A billboard seen by two hundred thousand people that produces four hundred scans has not failed. Scanning a billboard is an odd thing to do; most of its effect arrives later, as name recognition, as a branded search, as a purchase in a shop. The code catches a thin, self-selecting slice of the response and misses the rest by design.
So treat coded response as a floor, never a total, and never compare it directly against a digital channel's click count as though the two were the same unit of measurement. Within a channel it is excellent: billboard A against billboard B, this publication against that one, this event against last year's. Across channels it is misleading, and that is what lift tests are for.
Stating this plainly in your own reporting is worth more than any dashboard. The credibility of an attribution program depends almost entirely on whether the person presenting it is honest about its limits.
A ninety-day start
If none of this exists yet, build it in this order.
In the first week, list every offline placement currently running — every publication, event, pack, sign, and read. The list is normally longer than anyone expects, and it is the only complete inventory you will get.
In the second week, decide the naming scheme and build the UTM templates. Do this before issuing any links; retrofitting a convention across live placements is the tedium that kills these projects.
In weeks three and four, issue one link per placement you would act on, and put a redirect in front of every vanity URL so the tagging is attached server-side. Record the current baseline for direct traffic and branded search while you are at it, because you will want it later.
Then leave it alone for a month. Offline needs time to respond, and reading the numbers early will tempt you into a wrong conclusion.
In month three, run the first comparison — within channels only. Then pick the single largest offline line in the budget and design a proper lift test for it. That test, not the dashboard, is what eventually moves money.



