Setting Up UTM Markup for Site Analytics
UTM parameters are standard GET parameters for tracking traffic sources in analytics systems. Without UTM, GA4 and Metrica can't distinguish where visitors come from.
Required UTM Parameters
-
utm_source— traffic source:google,yandex,vk,email,telegram -
utm_medium— traffic type:cpc,organic,email,social,banner -
utm_campaign— campaign name:summer_sale_2024,retargeting_cart
Optional
-
utm_content— ad variant:btn_red,banner_v2 -
utm_term— keyword (for contextual ads)
Examples of Proper Markup
Email newsletter:
?utm_source=unisender&utm_medium=email&utm_campaign=order_shipped
Yandex.Direct:
?utm_source=yandex&utm_medium=cpc&utm_campaign=shoes_brand&utm_term={keyword}
VKontakte:
?utm_source=vk&utm_medium=cpc&utm_campaign=retargeting_cart&utm_content=ad_v1
Telegram post:
?utm_source=telegram&utm_medium=social&utm_campaign=promo_july&utm_content=channel_name
Automatic UTM Markup in Email
If using SendGrid, Mailchimp, or Unisender — enable auto-adding UTM in settings (link tracking). Each link in email automatically gets utm_source=mailchimp&utm_medium=email.
Storing UTM in Session and Order
// Save on first visit (first-touch)
const saveUtm = () => {
const params = new URLSearchParams(window.location.search);
const utm = {};
['source', 'medium', 'campaign', 'content', 'term'].forEach(key => {
const val = params.get(`utm_${key}`);
if (val) utm[key] = val;
});
if (Object.keys(utm).length) {
if (!localStorage.getItem('utm_first')) {
localStorage.setItem('utm_first', JSON.stringify(utm));
}
sessionStorage.setItem('utm_last', JSON.stringify(utm));
}
};
UTM Validation Before Campaign Launch
Common mistakes:
- Spaces in values (
utm_campaign=summer sale— URL not encoded) - Random case (
utm_source=Googlevsutm_source=google) - Missing required parameters
Tools: Google Campaign URL Builder, UTM.io for team use.
Setup time: 1 business day for UTM standardization + DB storage setup.







