When one campaign runs across several cities, branches or stores, reporting breaks down fast if every location tags its links differently. UTM parameters are the only reliable way to tell which location, channel and campaign produced a visit — but only if the naming is consistent. This guide shows how to build a UTM structure that survives multi-location reporting, and how a link shortener fits into the workflow.
Why multi-location UTM reporting fails without a fixed schema
UTM parameters are free-form text. Analytics tools group traffic by exact string match, so utm_campaign=spring-sale-berlin and utm_campaign=Spring_Sale_Berlin become two separate rows in every report. Multiply that by ten locations, three channels and a handful of staff members creating links, and the data becomes unusable. The fix is not more discipline after the fact — it is a documented schema that every location follows before a link is created.
Build a location-aware UTM schema before you create any links
Decide once which parameter carries which piece of information, then never repurpose it. A workable convention:
- utm_source — the platform: facebook, instagram, google, newsletter, print-qr.
- utm_medium — the type of traffic: paid-social, organic-social, cpc, email, offline.
- utm_campaign — the campaign name, identical across all locations: spring-sale.
- utm_id or a dedicated custom parameter — the location identifier: berlin, manchester, store-014.
Keeping the location in its own parameter (rather than inside the campaign name) is the key decision. It lets you filter one campaign across all locations, or one location across all campaigns, without string parsing. Lowercase everything, use hyphens instead of spaces, and write the rules down where link builders can find them.
Separate location from campaign so reports aggregate cleanly
If location is embedded in the campaign name, every cross-location comparison requires manual cleanup. With a dedicated location parameter, a single report view answers both questions: “How did the spring sale perform overall?” and “Which location contributed most?” The same logic applies to channel: keep medium values to a short, closed list so a typo cannot create a phantom channel. A closed list of allowed values, enforced by whoever approves links, is worth more than any dashboard.
Use a link shortener to standardise and govern campaign URLs
Long tagged URLs are error-prone to paste and ugly in print or SMS. A URL shortener with campaign support solves both problems: you save the full tagged destination once, and every location reuses the same short link. Central teams can create a short link per location and hand them out, which guarantees the UTM values are correct because nobody edits the underlying URL. Short links also make offline placements practical — a QR code pointing to a compact short URL is easier to print, and the redirect layer keeps the tracking parameters intact.
Tag offline and QR placements with their own medium
Multi-location campaigns usually mix digital and physical touchpoints: posters, flyers, window stickers, in-store screens. Give each a distinct medium value (offline-print, offline-qr, in-store-screen) so you can compare how each location's physical placements perform against its social channels. Without a separate medium, all offline traffic collapses into “direct” or “referral” and the location comparison is meaningless.
Keep one source of truth for links and naming
Store the schema, the allowed values and the generated links in one shared document or spreadsheet that every location can read. Include the campaign name, the location code, the channel, the final tagged URL and the short link. When a campaign ends, archive the row rather than deleting it, so historical reports still make sense. This single artefact prevents the most common failure: two locations running the “same” campaign with incompatible tags.
Audit incoming traffic before you trust the report
Even a good schema drifts. Check your analytics for UTM values that fall outside the allowed list — capitalisation variants, misspellings, missing location codes — and fix them at the source (the link), not in the report. A short monthly audit of the campaign and medium fields catches problems while the campaign is still running, when a corrected short link can still make a difference.
Report by location first, then by channel
Structure dashboards around the questions the business actually asks: which locations generated the most engaged visits, and which channels drove them. A table with locations as rows and channels as columns, filtered to one campaign, gives an immediate comparison. Because the location lives in its own parameter, this view requires no manual segmentation — it is just a filter. That is the payoff of a consistent UTM setup: reporting becomes a matter of filtering, not rebuilding.