UTM links: rules and register¶
Created 2026-10-23. Add every new link here before using it.
UTM tags are labels at the end of a link that tell our statistics where a visitor came from. They do not change the page. This page fixes the allowed values and keeps a register of every link we use, so everyone uses the same spelling and we know exactly what to search for in the reports. How the website handles them technically: Website: ads, SEO and analytics.
How a link is built¶
https://alpformflow.ch/?utm_source=instagram&utm_medium=social&utm_campaign=always-on&utm_content=bio
└────── page ───────┘└───────────────────────── UTM tags ─────────────────────────────────────┘
| Parameter | Answers | Required |
|---|---|---|
utm_source |
Where from? (platform, partner, printed item) | ✅ |
utm_medium |
What kind of channel? | ✅ |
utm_campaign |
Which campaign or period? | ✅ |
utm_content |
Which ad, button or placement exactly? | Recommended |
utm_term |
Which keyword? (only for search ads, usually not needed) | — |
Rules¶
- Only values from the tables below. A new value is first added here, then used.
- Lowercase, hyphens, no spaces, no accents:
hotel-alpina, notHotel Alpinaorhotel_alpina. Statistics countInstagramandinstagramas two different sources. - The language is in the page address (
/de/, or/for English), not in the UTM tags. Exception:utm_contentof an ad may end with the language (-de,-en) when the same ad exists in several languages. - Where links point: ads → the page in the ad's language (
/de/,/for English), because the ad's language is known. All other links → the main address/, because the reader's language is unknown: QR codes, printed items, profile and listing links (Instagram bio, WhatsApp, Google Business Profile, Apple Maps, local.ch), the email signature./is the English page; phones set to DE, FR or IT are offered their language in a small dialog, and the UTM tags are kept (see below). - Never personal data in UTM tags: no names, emails, phone numbers.
- Never UTM tags on links inside our own website (menu, language switcher, buttons). They would start a new visit with a wrong source.
- One link per placement: every flyer, partner and QR code gets its own link, so we can compare them.
- Google Ads adds its own click ID (
gclid) automatically. UTM tags on Google ads are optional (see Ad platform settings).
Allowed values¶
utm_source: where from¶
| Value | Meaning |
|---|---|
google |
Google ads (Search, Demand Gen, YouTube) |
gbp |
Google Business Profile (website button, booking link, posts) |
instagram |
Instagram (bio, Stories, posts, ads) |
facebook |
Facebook (Page, ads) |
whatsapp |
WhatsApp Business (profile, catalog, status, messages) |
tiktok |
TikTok |
youtube |
YouTube (channel, video descriptions; ads use google) |
apple-maps |
Apple Business Connect / Apple Maps |
bing |
Bing Places |
localch |
local.ch |
searchch |
search.ch |
flyer |
Our flyers |
poster |
Our posters |
card |
Business cards, QR cards at the reception, voucher cards |
hotel-…, chalet-…, gym-…, studio-… |
Partners, e.g. hotel-example, chalet-agency-example. One value per partner |
email |
Emails we send (signature, later a newsletter) |
newspaper-… |
Printed ads, e.g. newspaper-anzeiger-saanen [verify] the paper's name |
utm_medium: what kind of channel¶
The values match the channel groups of Google Analytics (GA4), so visits are sorted correctly automatically.
| Value | Meaning | GA4 channel |
|---|---|---|
cpc |
Paid Google ads | Paid Search / Paid Video |
paid-social |
Paid Meta (and TikTok) ads | Paid Social |
social |
Free social media posts, bios, profiles, WhatsApp | Organic Social |
organic |
Business listings: Google Business Profile, Apple Maps, Bing, local.ch, search.ch | Organic Search |
referral |
Partner websites and partner messages | Referral |
print |
Flyers, posters, cards, newspaper (via QR code or short link) | Unassigned → create a custom channel "Print" in GA4 |
email |
Emails we send (e.g. email signature, later a newsletter) |
utm_campaign: which campaign¶
| Value | Meaning |
|---|---|
always-on |
Permanent links: bio, profile, listings, email signature |
opening-2026 |
Opening campaign (before and after the opening in December 2026) |
winter-2026 |
Winter season 2026/27 (tourists) |
spring-2027 |
Spring 2027 (anti-cellulite peak, locals) |
summer-2027 |
Summer season 2027 |
vouchers-xmas-2026 |
Gift vouchers for Christmas 2026 |
remarketing |
Ads for website visitors who did not book |
New campaigns: topic-year, e.g. easter-2027.
utm_content: which ad or placement¶
Free text, but in this format:
| Type | Format | Examples |
|---|---|---|
| Ad | format-idea-language |
video-therapist-de, video-atmosphere-en, photo-offer-de, carousel-steps-en |
| Profile link | where the link sits | bio, website-button, booking-button, story-link, post |
| Printed item | item and place | a6-station, a6-shops, card-reception, poster-gym |
| Google Business Profile | which button | website-button, booking-button, post |
Link register¶
Every link we use. Status: planned, active, stopped. For ads, the UTM tags are set in the ad platform (see below), so only the pattern is listed.
| # | Where it is used | source |
medium |
campaign |
content |
Link | Status |
|---|---|---|---|---|---|---|---|
| 1 | Instagram bio | instagram |
social |
always-on |
bio |
https://alpformflow.ch/?utm_source=instagram&utm_medium=social&utm_campaign=always-on&utm_content=bio |
planned |
| 2 | Facebook Page, website button | facebook |
social |
always-on |
website-button |
https://alpformflow.ch/?utm_source=facebook&utm_medium=social&utm_campaign=always-on&utm_content=website-button |
planned |
| 3 | WhatsApp Business profile | whatsapp |
social |
always-on |
profile |
https://alpformflow.ch/?utm_source=whatsapp&utm_medium=social&utm_campaign=always-on&utm_content=profile |
planned |
| 4 | Google Business Profile, website | gbp |
organic |
always-on |
website-button |
https://alpformflow.ch/?utm_source=gbp&utm_medium=organic&utm_campaign=always-on&utm_content=website-button |
planned |
| 5 | Google Business Profile, booking link ("Appointment URL") | gbp |
organic |
always-on |
booking-button |
https://alpformflow.ch/?utm_source=gbp&utm_medium=organic&utm_campaign=always-on&utm_content=booking-button#book |
planned |
| 6 | Apple Business Connect | apple-maps |
organic |
always-on |
website-button |
https://alpformflow.ch/?utm_source=apple-maps&utm_medium=organic&utm_campaign=always-on&utm_content=website-button |
planned |
| 7 | local.ch listing | localch |
organic |
always-on |
website-button |
https://alpformflow.ch/?utm_source=localch&utm_medium=organic&utm_campaign=always-on&utm_content=website-button |
planned |
| 8 | Opening flyer A6, Saanen station | flyer |
print |
opening-2026 |
a6-station |
https://alpformflow.ch/?utm_source=flyer&utm_medium=print&utm_campaign=opening-2026&utm_content=a6-station |
planned |
| 9 | QR card at a partner hotel's reception (example) | hotel-example |
referral |
always-on |
card-reception |
https://alpformflow.ch/?utm_source=hotel-example&utm_medium=referral&utm_campaign=always-on&utm_content=card-reception |
example |
| 10 | Email signature | email |
email |
always-on |
signature |
https://alpformflow.ch/?utm_source=email&utm_medium=email&utm_campaign=always-on&utm_content=signature |
planned |
| 11 | Meta opening ads (Stories + Reels) | instagram |
paid-social |
opening-2026 |
ad name, e.g. video-therapist-de |
Set in the ad (see below) | planned |
| 12 | Google Search ads | google |
cpc |
opening-2026 |
— | Auto-tagging + final URL suffix (see below) | planned |
| 13 | Gift voucher flyer, Christmas | flyer |
print |
vouchers-xmas-2026 |
a6-shops |
https://alpformflow.ch/?utm_source=flyer&utm_medium=print&utm_campaign=vouchers-xmas-2026&utm_content=a6-shops#vouchers |
planned |
| 14 | Mailbox plate QR code, Dorfstrasse 6 | poster |
print |
always-on |
postbox |
https://alpformflow.ch/?utm_source=poster&utm_medium=print&utm_campaign=always-on&utm_content=postbox |
planned |
Printed items and QR codes: the QR code contains the full link to / with UTM tags (no short links). A long link makes a denser code, so keep the values short, print the code at least about 2.5 cm wide [verify], and test-scan every code with two phones before ordering the print.
Language for printed items: the QR code leads to /, the English page. If the phone's language is DE, FR or IT, a small dialog offers that language; the UTM tags are kept either way. The visitor can always switch the language in the header.
Ad platform settings¶
Meta (Instagram / Facebook ads)¶
In each ad, field URL parameters (under the website URL):
utm_source={{site_source_name}}&utm_medium=paid-social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}
- Meta fills in the values itself:
{{site_source_name}}becomes the platform (Instagram, Facebook…)[verify]exact values,{{campaign.name}}and{{ad.name}}the names we gave. - So name campaigns and ads by the rules above: campaign
opening-2026, advideo-therapist-de.
Google Ads¶
- Auto-tagging on (Account settings). Google Ads and GA4 then match clicks through
gclid. - Optional, so that other tools (e.g. Plausible) see the same labels: account-level Final URL suffix
utm_source=google&utm_medium=cpc&utm_campaign={_campaign}&utm_content={adgroupid}
[verify] the parameter names in Google Ads; {_campaign} is a custom parameter set per campaign.
Where to find the results¶
| Where | What to look at |
|---|---|
| GA4 → Reports → Acquisition → Traffic acquisition | Visits by source / medium and campaign; add the key event booking_completed for bookings per source |
| GA4 → Explore | Own tables, e.g. campaign × language page × bookings |
| Plausible / Matomo (if used) | Sources with UTM filters; goals for bookings |
| Meta Ads Manager / Google Ads | Cost and bookings per campaign and ad |
| Cal.com bookings | The source stored with each booking (see Website: ads, SEO and analytics) |
Every month: per channel, cost ÷ bookings = cost per booking, compared with the limit in the private notes. For free channels (bio, listings, flyers, partners): bookings per link from this register.