# UTM builder and checker for hotels, tour operators and travel brands

> Free UTM builder and checker for hotels, tour operators and travel brands, with presets for Google Business Profile, OTAs, email, social and QR codes.

Canonical: https://njoy.consulting/utm-builder
Last updated: 2026-10-24

Tag every link that brings guests to your website, then check existing links for the mistakes that quietly split or hide booking data. Free, no signup, runs in your browser.

## Build a tagged link

Pick a channel preset to fill in sensible values, then adjust them to match your own naming convention.

Channel preset

Website page (destination URL) \*

utm\_source \*

Where the link lives: the site, platform or publication.

utm\_medium \*

The type of channel, for example social, email or referral.

utm\_campaign \*

The promotion, season or ongoing placement.

utm\_content

Optional. Tells apart links in the same campaign.

utm\_term

Optional. Mostly used for paid search keywords.

Force lowercase Replace spaces with hyphens

Tagged URL

## Check existing links

Paste one or many URLs, one per line. The checker flags missing required tags, duplicate parameters, mixed casing, spaces, values that are spelt differently across the list, mediums GA4 does not recognise, and UTM tags on internal links.

URLs to check

Your website domain (optional)

These links sit on my own website (internal links)

## Naming convention for travel brands

A written convention matters more than any tool. Agree it once, share it with anyone who posts links, and keep it next to your campaign list.

**UTM naming convention**

| Parameter | Rule | Good | Avoid |
| --- | --- | --- | --- |
| `utm_source` | The platform or publication, lowercase, no spaces | `instagram`, `booking-com`, `newsletter` | `Instagram`, `IG`, `booking.com page` |
| `utm_medium` | A channel type GA4 recognises | `social`, `email`, `referral`, `affiliate`, `organic` | `insta-bio`, `Newsletter`, `post` |
| `utm_campaign` | Season, offer or always-on placement, with a year where relevant | `summer-2027`, `gbp-listing`, `2026-11-newsletter` | `Summer Promo!!`, `campaign1` |
| `utm_content` | Which link or creative within the campaign | `bio-link`, `story-spa`, `hero-button` | Long sentences or dates in every value |
| `utm_term` | Paid search keywords only | `boutique-hotel-kampot` | Using it for social posts |
| Separators | Pick hyphens and use them everywhere | `spring-break-2027` | Mixing `spring_break` and `spring-break` |

## Channel presets explained

**Channel presets**

| Channel | source / medium | Notes |
| --- | --- | --- |
| Google Business Profile website link | `google / organic` | Lands in Organic Search in GA4, with `utm_campaign=gbp-listing` separating profile clicks from ordinary search visits. |
| OTA listings (Booking.com, Expedia, Airbnb, Viator, GetYourGuide) | `booking-com / referral` and similar | Many OTAs limit or remove external website links in listings and guest messages. Check each platform's current policy before adding one. |
| Email newsletter | `newsletter / email` | Put the send date in the campaign, for example `2026-11-newsletter`. |
| Instagram bio and stories | `instagram / social` | Use `utm_content` to separate `bio-link` from each story. |
| Facebook and TikTok | `facebook / social`, `tiktok / social` | Organic posts only. Paid ads should use a paid medium such as `paid-social`. |
| Partners and affiliates | `partner-name / referral` or `/ affiliate` | Use `affiliate` only where the partner is paid per booking. |
| QR codes on print | `brochure / qr` | GA4 shows `qr` as Unassigned unless a custom channel group is created. The source still identifies the print item. |

Channel behaviour is based on Google's [GA4 default channel group definitions](https://support.google.com/analytics/answer/9756891?hl=en), which Google may change.

## How to roll out UTM tracking in five steps

1. List every place a link to your website appears outside the site: profiles, listings, emails, bios, partner pages and print.
2. Agree a naming convention using the table above and write it down.
3. Build each link with this tool and add it to the list, then download the CSV as your campaign register.
4. Open one link yourself and confirm the visit appears with the right source and medium in GA4 Realtime.
5. Every few months, paste the links in use into the checker to catch drift, such as a new team member typing `Instagram`.

## First-touch, last-touch and linear attribution

Guests rarely book on their first visit. Attribution decides which channel gets credit when several visits come before a booking.

- **First-touch** gives all the credit to the channel that brought the guest the first time. It shows what creates awareness.
- **Last-touch** gives all the credit to the final channel before the booking. It shows what closes.
- **Linear** splits the credit equally across every tracked visit.

**Illustrative example only (not real data).** A guest finds a hotel through an Instagram bio link, returns a week later from the newsletter, then books a £600 stay after clicking the Google Business Profile website link.

**Illustrative attribution example**

| Model | Instagram | Newsletter | Google Business Profile |
| --- | --- | --- | --- |
| First-touch | £600 | £0 | £0 |
| Last-touch | £0 | £0 | £600 |
| Linear | £200 | £200 | £200 |

None of these models works without consistent tags, because untagged or mistagged visits cannot be credited to the right channel. GA4's reporting attribution settings currently offer data-driven and last click models. The [GA4 guide for travel brands](https://njoy.consulting/articles/ga4-travel-brands) covers those settings and their limits.

## Frequently asked questions

**What are UTM parameters?**

UTM parameters are tags added to the end of a link, such as `utm_source`, `utm_medium` and `utm_campaign`. Analytics tools such as GA4 read them to report where a visit came from, so a guest arriving from an Instagram bio link is not lumped in with everyone else.

**Which UTM parameters are required?**

Use `utm_source`, `utm_medium` and `utm_campaign` on every tagged link. `utm_content` and `utm_term` are optional and useful for telling apart two links in the same campaign, for example a story link and a bio link.

**Should UTM tags be used on internal links?**

No. Tagging links from one page of your own website to another overwrites the real source of the visit, so the channel that brought the guest loses credit for the booking. Use UTMs only on links placed outside your site.

**Do capital letters in UTM values matter?**

Yes for reporting. GA4 shows `Instagram` and `instagram` as separate values in source and campaign reports, which splits the numbers. GA4's default channel rules are not case sensitive, but consistent lowercase keeps reports clean.

**Why does my QR code traffic show as Unassigned in GA4?**

GA4's default channel groups only recognise certain mediums. `qr` is not one of them, so those visits appear as Unassigned unless a custom channel group is set up. The source and campaign values still show which flyer or poster drove the visit.

**Is any data sent to NJoy Consulting?**

No. The builder and checker run entirely in your browser. URLs you build or paste are not uploaded or stored anywhere.

## Private by design

Everything runs in your browser. Nothing you type is uploaded, stored or sent to NJoy Consulting or anyone else. No signup.

## Related tools and guides

[Booking funnel calculator →](https://njoy.consulting/booking-funnel-calculator)

[OTA commission calculator →](https://njoy.consulting/calculator)

[GA4 for travel brands →](https://njoy.consulting/articles/ga4-travel-brands)

[All free resources →](https://njoy.consulting/resources)

## Want a second pair of eyes?

NJoy Consulting helps hotels, tour operators and travel brands set up tracking that answers real booking questions.

[Get in touch](https://njoy.consulting/contact)
