Einfach erklärt
Wenn jemand auf einen Link klickt und deine Website besucht, weiß Analytics normalerweise nur: „Jemand kam von Google” oder „Jemand kam direkt”. UTM-Parameter geben dir viel mehr Kontext: Welche Kampagne? Welcher Newsletter? Welcher Social-Media-Post? Welcher CTA-Button?
Ein UTM-Link sieht so aus:
https://example.com/produkt
?utm_source=newsletter
&utm_medium=email
&utm_campaign=herbst-sale-2025
&utm_content=cta-button-mitte
Analytics liest diese Parameter und ordnet den Besuch der richtigen Quelle zu.
Die 5 UTM-Parameter
| Parameter | Bedeutung | Beispielwerte |
|---|
utm_source | Woher kommt der Traffic? | google, newsletter, instagram, partner-xyz |
utm_medium | Welcher Kanal/Typ? | cpc, email, social, organic, referral |
utm_campaign | Welche Kampagne? | herbst-sale-2025, product-launch-ki-tool |
utm_content | Welches Element? | cta-button, banner-oben, text-link |
utm_term | Welches Keyword? (SEA) | ki-tool-kaufen, chatgpt-alternative |
Technischer Deep Dive
Naming Conventions – Best Practices
✅ Gut:
utm_source=newsletter
utm_medium=email
utm_campaign=2025-02-herbst-sale
❌ Schlecht:
utm_source=Newsletter (Großschreibung → andere Zeile in Analytics)
utm_source=E-Mail Newsletter (Leerzeichen → URL-Encoding-Probleme)
utm_campaign=Kampagne (zu generisch, nicht auswertbar)
Empfohlene Medium-Werte (konsistent halten):
cpc – bezahlte Suchanzeigen (Google Ads, Bing Ads)
email – E-Mail-Marketing
social – organische Social-Media-Posts
paid-social – bezahlte Social-Media-Anzeigen
referral – Links von anderen Websites
affiliate – Affiliate-Links
display – Display-Werbung
UTM-Links automatisch generieren
function buildUTMUrl(baseUrl, params) {
const url = new URL(baseUrl);
const utmParams = {
utm_source: params.source,
utm_medium: params.medium,
utm_campaign: params.campaign,
...(params.content && { utm_content: params.content }),
...(params.term && { utm_term: params.term }),
};
Object.entries(utmParams).forEach(([key, value]) => {
// Immer lowercase, Leerzeichen durch Bindestriche ersetzen
url.searchParams.set(key, value.toLowerCase().replace(/\s+/g, '-'));
});
return url.toString();
}
// Verwendung:
const link = buildUTMUrl('https://example.com/produkt', {
source: 'newsletter',
medium: 'email',
campaign: 'herbst-sale-2025',
content: 'cta-button-mitte',
});
// → https://example.com/produkt?utm_source=newsletter&utm_medium=email&...
UTM-Daten in GA4 auswerten
GA4 → Reports → Acquisition → Traffic Acquisition
Wichtige Dimensionen:
Session source/medium → utm_source / utm_medium
Session campaign → utm_campaign
Session default channel group → automatische Gruppierung
Wichtige Metriken:
Sessions → Wie viele Besuche?
Engaged sessions → Qualität des Traffics
Conversions → Welcher Kanal konvertiert?
Revenue → Welcher Kanal bringt Umsatz?
UTM + First-Party Data kombinieren
// UTM-Parameter beim ersten Besuch in First-Party Cookie speichern
function captureUTMParams() {
const params = new URLSearchParams(window.location.search);
const utmKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term'];
const utmData = {};
utmKeys.forEach(key => {
if (params.has(key)) utmData[key] = params.get(key);
});
if (Object.keys(utmData).length > 0) {
// 30 Tage speichern – auch wenn Nutzer mehrere Seiten besucht
document.cookie = `utm_data=${JSON.stringify(utmData)}; max-age=2592000; path=/`;
}
}
// Bei Conversion: UTM-Daten mit Order mitschicken
function trackConversion(orderId, orderValue) {
const utmData = JSON.parse(getCookie('utm_data') || '{}');
sendToAnalytics({
event: 'purchase',
order_id: orderId,
value: orderValue,
attribution: utmData, // Welche Kampagne hat diesen Kauf gebracht?
});
}
Häufige Fehler
| Fehler | Auswirkung | Lösung |
|---|
| Interne Links mit UTM | Traffic-Quelle wird überschrieben | Interne Links nie taggen |
| Inkonsistente Schreibweise | Fragmentierte Daten in Analytics | Naming Convention + Tool |
| UTM in Social-Media-Bio | Jeder Klick gleiche Quelle | utm_content für verschiedene Posts |
| Kein UTM in E-Mails | Traffic erscheint als Direct | Alle E-Mail-Links taggen |