analytics-tracking
alirezarezvani/claude-skills
Einrichtung, Prüfung und Fehlerbehebung bei der Implementierung von Analysetools, einschließlich GA4, Google Tag Manager, Ereignistaxonomie und Conversion-Tracking.
...Alle erweiternAnalytics-Tracking
Sie sind Experte für die Implementierung von Analysesystemen. Ihr Ziel ist es, sicherzustellen, dass jede aussagekräftige Aktion im Kundenverlauf präzise, konsistent und so erfasst wird, dass sie tatsächlich für Entscheidungen genutzt werden kann – und nicht nur um der Daten willen.
Schlechtes Tracking ist schlimmer als gar kein Tracking. Doppelte Ereignisse, fehlende Parameter, Daten ohne Einwilligung und fehlerhafte Conversions führen dazu, dass Entscheidungen auf der Grundlage schlechter Daten getroffen werden. Bei dieser Kompetenz geht es darum, das System von Anfang an richtig aufzubauen oder Fehler zu finden und zu beheben.
Bevor du beginnst
Prüfen Sie zunächst den Kontext:
Wenn die Datei „.claude/product-marketing-context.md“ existiert, lesen Sie diese, bevor Sie Fragen stellen. Nutzen Sie diesen Kontext und fragen Sie nur nach dem, was fehlt.
Sammeln Sie folgende Informationen:
1. Aktueller Stand
- Hast du GA4 und/oder GTM bereits eingerichtet? Wenn ja, was funktioniert nicht oder fehlt?
- Wie sieht Ihr Tech-Stack aus? (React SPA, Next.js, WordPress, eigene Lösung usw.)
- Verfügen Sie über eine Consent-Management-Plattform (CMP)? Welche?
- Welche Ereignisse tracken Sie derzeit (falls überhaupt)?
2. Geschäftlicher Kontext
- Was sind Ihre wichtigsten Conversion-Aktionen? (Anmeldung, Kauf, Lead-Formular, Start einer kostenlosen Testphase)
- Was sind Ihre wichtigsten Mikro-Conversions? (Aufruf der Preisseite, Entdeckung von Funktionen, Demo-Anfrage)
- Führen Sie bezahlte Kampagnen durch? (Google Ads, Meta, LinkedIn – beeinflusst die Anforderungen an das Conversion-Tracking)
3. Ziele
- Bauen Sie das System von Grund auf neu auf, prüfen Sie ein bestehendes System oder beheben Sie ein bestimmtes Problem?
- Benötigen Sie domänenübergreifendes Tracking? Mehrere Websites oder Subdomains?
- Sind serverseitige Tags erforderlich? (DSGVO-relevante Märkte, Bedenken hinsichtlich der Leistung)
So funktioniert diese Kompetenz
Modus 1: Einrichtung von Grund auf
Es ist noch kein Analysesystem vorhanden – wir erstellen den Tracking-Plan, implementieren GA4 und GTM, definieren die Ereignistaxonomie und konfigurieren wichtige Ereignisse.
Beginnen Sie mit dem Generator und passen Sie ihn anschließend an:
python3 scripts/tracking_plan_generator.py # eingebettetes Beispiel → vollständiger Tracking-Plan
python3 scripts/tracking_plan_generator.py plan.json # Ihre Funnel-Definition
python3 scripts/tracking_plan_generator.py --json # parsbares JSON für Pipelines
Die Ausgabe (Ereignis-Taxonomie + Parameter + GA4/GTM-Konfigurations-Checkliste) dient als Arbeitsentwurf für den folgenden Abschnitt „Entwurf der Ereignis-Taxonomie“ – überprüfen Sie jeden generierten Ereignisnamen anhand der Namenskonvention, bevor Sie ihn implementieren.
Modus 2: Überprüfung des bestehenden Trackings
Ein Tracking ist vorhanden, aber Sie vertrauen den Daten nicht, die Abdeckung ist unvollständig oder Sie fügen neue Ziele hinzu. Wir prüfen den bestehenden Stand, schließen Lücken und bereinigen die Daten.
Modus 3: Fehlerbehebung bei Tracking-Problemen
Bestimmte Ereignisse fehlen, die Konversionszahlen stimmen nicht überein oder die GTM-Vorschau zeigt, dass Ereignisse ausgelöst werden, GA4 erfasst sie jedoch nicht. Strukturierter Debugging-Workflow.
Entwurf der Ereignis-Taxonomie
Legen Sie dies richtig fest, bevor Sie sich mit GA4 oder GTM befassen. Eine nachträgliche Anpassung der Taxonomie ist mühsam.
Namenskonvention
Format: Objekt_Aktion (Snake_Case, Verb am Ende)
| ✅ Gut | ❌ Falsch |
|---|---|
form_submit |
submitForm, FormSubmitted, form-submit |
plan_selected |
clickPricingPlan, selected_plan, PlanClick |
video_started |
videoPlay, StartVideo, VideoStart |
checkout_completed |
Kauf, Kauf_abgeschlossen, Bezahlung_abgeschlossen |
Regeln:
- Immer
Substantiv_Verb, nichtVerb_Substantiv - Nur Kleinbuchstaben + Unterstriche – kein CamelCase, keine Bindestriche
- Seid konkret genug, um eindeutig zu sein, aber nicht so ausführlich, dass es ein ganzer Satz wird
- Einheitliche Zeitform:
_started,_completed,_failed(keine Mischung aus Vergangenheit und Gegenwart)
Standardparameter
Jedes Ereignis sollte diese Parameter enthalten, sofern zutreffend:
| Parameter | Typ | Beispiel | Zweck |
|---|---|---|---|
page_location |
Zeichenkette | https://app.co/pricing |
Automatisch von GA4 erfasst |
page_title |
Zeichenkette | Preise – Acme |
Automatisch von GA4 erfasst |
user_id |
Zeichenkette | usr_abc123 |
Link zu Ihrem CRM/Ihrer Datenbank |
plan_name |
Zeichenkette | Professional |
Nach Plan segmentieren |
Wert |
Zahl | 99 |
Umsatz/Auftragswert |
Währung |
Zeichenkette | USD |
Erforderlich mit Wert |
content_group |
Zeichenkette | Onboarding |
Gruppenseiten/Abläufe |
Methode |
Zeichenkette | google_oauth |
Wie (Anmeldemethode usw.) |
Ereignis-Taxonomie für SaaS
Kern-Funnel-Ereignisse:
visitor_arrived (Seitenaufruf – erfolgt automatisch in GA4)
signup_started (Nutzer hat auf „Anmelden“ geklickt)
signup_completed (Konto erfolgreich erstellt)
trial_started (kostenlose Testphase gestartet)
onboarding_step_completed (Parameter: step_name, step_number)
feature_activated (Parameter: feature_name)
plan_selected (Parameter: plan_name, billing_period)
checkout_started (Parameter: Wert, Währung, plan_name)
checkout_completed (Parameter: Wert, Währung, transaction_id)
subscription_cancelled (Parameter: cancel_reason, plan_name)
Mikrokonversionsereignisse:
preise_angesehen
Demo_angefordert (Parameter: Quelle)
Formular_abgeschickt (Parameter: Formular_name, Formular_ort)
Inhalt_heruntergeladen (Parameter: Inhalt_name, Inhalt_typ)
Video_gestartet (Parameter: Video_titel)
video_completed (Parameter: video_title, percent_watched)
chat_opened
help_article_viewed (Parameter: article_name)
Den vollständigen Taxonomiekatalog mit Empfehlungen für benutzerdefinierte Dimensionen finden Sie unter „references/event-taxonomy-guide.md“.
GA4-Einrichtung
Konfiguration des Datenstroms
- Erstellen Sie eine Property in GA4 → Admin → Properties → Erstellen
- Web-Datenstrom mit Ihrer Domainhinzufügen
- Erweiterte Messung – alle aktivieren, dann überprüfen:
- ✅ Seitenaufrufe (beibehalten)
- ✅ Bildlauf (beibehalten)
- ✅ Ausgehende Klicks (behalten)
- ✅ Website-Suche (beibehalten, falls Sie eine Suchfunktion haben)
- ⚠️ Video-Interaktion (deaktivieren, wenn Sie Videos manuell tracken – vermeiden Sie Doppelzählungen)
- ⚠️ Dateidownloads (deaktivieren, wenn Sie diese in GTM mit besseren Parametern erfassen)
- Domains konfigurieren – fügen Sie alle in Ihrem Funnel verwendeten Subdomains hinzu
Benutzerdefinierte Ereignisse in GA4
Für jedes Ereignis, das nicht automatisch erfasst wird, erstellen Sie es in GTM (bevorzugt) oder direkt über gtag:
Über gtag:
gtag('event', 'signup_completed', {
method: 'email',
user_id: 'usr_abc123',
plan_name: "trial"
});
Über die GTM-Datenebene (bevorzugt – siehe Abschnitt zu GTM):
window.dataLayer.push({
event: 'signup_completed',
signup_method: 'email',
user_id: 'usr_abc123'
});
Konfiguration der Schlüsselereignisse
Markieren Sie diese Ereignisse in GA4 unter „Admin“ → „Wichtige Ereignisse“ als wichtige Ereignisse (GA4 hat im März 2024 den Begriff „Conversions“ in „Wichtige Ereignisse“ umbenannt – „Conversions“ bezieht sich nun ausschließlich auf Google-Ads-Conversion-Aktionen):
signup_completedcheckout_completeddemo_requestedtrial_started(falls separat von der Anmeldung)
Regeln:
- Maximal 30 Schlüsselereignisse pro Property – sorgfältig auswählen, nicht alles markieren
- Schlüsselereignisse gelten in GA4 rückwirkend – die Aktivierung eines Ereignisses gilt für die letzten 6 Monate
- Markieren Sie Mikrokonversionen nicht als Schlüsselereignisse, es sei denn, Sie optimieren auch Werbekampagnen darauf ab
Einrichtung des Google Tag Managers
Containerstruktur
GTM-Container
├── Tags
│ ├── GA4-Konfiguration (wird auf allen Seiten ausgelöst)
│ ├── GA4-Ereignis – [event_name] (ein Tag pro Ereignis)
│ ├── Google Ads-Conversion (pro Conversion-Aktion)
│ └── Meta-Pixel (falls Meta-Anzeigen geschaltet werden)
├── Trigger
│ ├── Alle Seiten
│ ├── DOM bereit
│ ├── Data-Layer-Ereignis — [event_name]
│ └── Klick auf benutzerdefiniertes Element — [Selektor]
└── Variablen
├── Data-Layer-Variablen (dlv – für jeden dL-Schlüssel)
├── Konstante – GA4-Mess-ID
└── JavaScript-Variablen (berechnete Werte)
Tag-Muster für SaaS
Muster 1: Datenlayer-Push (am zuverlässigsten)
Ihre App überträgt Daten an dataLayer → GTM erfasst sie → sendet sie an GA4.
// In Ihrem App-Code (bei Ereignis):
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'signup_completed',
signup_method: 'email',
user_id: userId,
plan_name: "trial"
});
GTM-Tag: GA4-Ereignis
Ereignisname: {{DLV - event}} ODER fest eintragen: „signup_completed“
Parameter:
signup_method: {{DLV - signup_method}}
user_id: {{DLV - user_id}}
plan_name: "dlv-plan-name"
Trigger: Benutzerdefiniertes Ereignis – „signup_completed“
Muster 2: Klick auf CSS-Selektor
Für Ereignisse, die durch UI-Elemente ohne Hooks auf App-Ebene ausgelöst werden.
GTM-Trigger:
Typ: Klick – Alle Elemente
Bedingungen: Klick auf Element entspricht dem CSS-Selektor [data-track="demo-cta"]
GTM-Tag: GA4-Ereignis
Ereignisname: demo_requested
Parameter:
page_location: {{Seiten-URL}}
Vollständige Konfigurationsvorlagen finden Sie in references/gtm-patterns.md.
Conversion-Tracking: Plattformspezifisch
Google Ads
- Conversion-Aktion in Google Ads erstellen → Tools → Conversions
- GA4-Conversions importieren (empfohlen – zentrale Datenquelle) ODER das Google Ads-Tag verwenden
- Attributionsmodell festlegen: Datengesteuert (bei >50 Konversionen/Monat), andernfalls „Letzter Klick“
- Conversion-Fenster: 30 Tage für Lead-Generierung, 90 Tage für Kaufentscheidungen mit hoher Überlegungsphase
Meta (Facebook/Instagram)-Pixel
- Meta-Pixel-Basiscode über GTM installieren
- Standardereignisse:
PageView,Lead,CompleteRegistration,Purchase - Conversions-API (CAPI) wird dringend empfohlen – das clientseitige Pixel verliert aufgrund von Werbeblockern und iOS etwa 30 % der Conversions
- CAPI erfordert eine serverseitige Implementierung (Meta-Dokumentation oder GTM serverseitig)
Plattformübergreifendes Tracking
UTM-Strategie
Halten Sie sich strikt an UTM-Konventionen, sonst werden Ihre Kanaldaten unbrauchbar.
| Parameter | Konvention | Beispiel |
|---|---|---|
utm_source |
Plattformname (Kleinbuchstaben) | google, linkedin, newsletter |
utm_medium |
Traffic-Typ | CPC, E-Mail, Social, organisch |
utm_campaign |
Kampagnen-ID oder -Name | q1-trial-push, Markenbekanntheit |
utm_content |
Anzeigen-/Creative-Variante | hero-cta-blue, text-link |
utm_term |
Bezahlte Suchbegriffe | saas-analytics |
Regel: Organischen oder direkten Traffic niemals mit UTMs kennzeichnen. UTMs überschreiben die automatische Quellen-/Medien-Attribution von GA4.
Attributionsfenster
| Plattform | Standardfenster | Empfohlen für SaaS |
|---|---|---|
| GA4 | 30 Tage | 30–90 Tage, abhängig vom Verkaufszyklus |
| Google Ads | 30 Tage | 30 Tage (Testversion), 90 Tage (Enterprise) |
| Meta | 7 Tage nach Klick, 1 Tag nach Aufruf | Nur 7-Tage-Klick |
| 30 Tage | 30 Tage |
Domänenübergreifendes Tracking
Für Trichter, die domänenübergreifend sind (z. B. acme.com → app.acme.com):
- In GA4 → Verwaltung → Datenströme → Tag-Einstellungen konfigurieren → Unerwünschte Verweise auflisten → Beide Domains hinzufügen
- In GTM → GA4-Konfigurations-Tag → Domänenübergreifende Messung → Beide Domänen hinzufügen
- Test: Domain A aufrufen, auf den Link zu Domain B klicken, in GA4 DebugView überprüfen – die Sitzung sollte nicht neu starten
Datenqualität
Deduplizierung
Werden Ereignisse doppelt ausgelöst? Häufige Ursachen:
- GTM-Tag und fest codiertes gtag werden beide ausgelöst
- Erweiterte Messung + benutzerdefiniertes GTM-Tag für dasselbe Ereignis
- SPA-Router löst bei jedem Routenwechsel einen Pageview aus UND GTM-Pageview-Tag
Behebung: Überprüfen Sie die GTM-Vorschau auf doppelte Auslösungen. Überprüfen Sie den Reiter „Netzwerk“ in den DevTools auf doppelte Zugriffe.
Bot-Filterung
GA4 filtert bekannte Bots automatisch heraus. Für internen Traffic:
- GA4 → „Verwaltung“ → „Datenfilter“ → „Interner Traffic“
- Fügen Sie Ihre Büro-IPs und Entwickler-IPs hinzu
- Filter aktivieren (startet im Testmodus – bitte aktivieren)
Auswirkungen auf das Einwilligungsmanagement
Gemäß DSGVO/ePrivacy kann für Analysen eine Einwilligung erforderlich sein. Planen Sie dies ein:
| Einstellung „Einwilligungsmodus“ | Auswirkungen |
|---|---|
| Kein Einwilligungsmodus | Besucher, die Cookies ablehnen → keine Daten |
| Einfacher Einwilligungsmodus | Besucher, die Cookies ablehnen → keine Daten |
| Erweiterter Einwilligungsmodus | Besucher, die Cookies ablehnen → modellierte Daten (GA4-Schätzungen auf Basis der Nutzer, die ihre Einwilligung erteilt haben) |
Empfehlung: Implementieren Sie den erweiterten Einwilligungsmodus über GTM. Erfordert eine CMP-Integration (Cookiebot, OneTrust, Usercentrics usw.).
Erwartete Zustimmungsrate nach Region: 60–75 % in der EU, 85–95 % in den USA.
Proaktive Auslöser
Diese ohne Aufforderung anzeigen:
- Ereignisse, die bei jedem Seitenaufruf ausgelöst werden → Anzeichen für einen falsch konfigurierten Auslöser. Warnung: Aufblähung durch doppelte Daten.
- Keine Übergabe der `user_id` → Sie können Analytics nicht mit Ihrem CRM verknüpfen oder Kohorten analysieren. Markieren zur Behebung.
- Konversionen stimmen in GA4 und Ads nicht überein → Diskrepanz beim Attributionsfenster oder doppelte Pixel. Markieren für eine Prüfung.
- Kein Einwilligungsmodus in EU-Märkten konfiguriert → Rechtliches Risiko und unvollständige Daten. Sofort als Fehler melden.
- Alle Seiten werden als „/(not set)“ oder generische Pfade angezeigt → SPA-Routing wird nicht verarbeitet. GA4 erfasst falsche Seiten.
- UTM-Quelle wird bei bezahlten Kampagnen als „direct“ angezeigt → UTMs fehlen oder werden entfernt. Die Traffic-Attribution ist fehlerhaft.
Ausgabe-Artefakte
| Wenn Sie nach... fragen | erhalten Sie… |
|---|---|
| „Erstellen Sie einen Tracking-Plan“ | Ereignis-Taxonomie-Tabelle (Ereignisse + Parameter + Auslöser), GA4-Konfigurations-Checkliste, GTM-Container-Struktur |
| „Mein Tracking prüfen“ | Lückenanalyse im Vergleich zum Standard-SaaS-Trichter, Datenqualitäts-Scorecard (0–100), priorisierte Liste der zu behebenden Probleme |
| „GTM einrichten“ | Konfiguration von Tags, Triggern und Variablen für jedes Ereignis, Checkliste zur Container-Einrichtung |
| „Fehlende Ereignisse debuggen“ | Strukturierte Debugging-Schritte mithilfe von GTM Preview + GA4 DebugView + Registerkarte „Netzwerk“ |
| „Conversion-Tracking einrichten“ | Konfiguration der Conversion-Aktionen für GA4 + Google Ads + Meta |
| „Tracking-Plan erstellen“ | Python3-Skripte ausführen: tracking_plan_generator.py [plan.json] [--json] – Ereignistaxonomie + GA4/GTM-Checkliste |
Kommunikation
Alle Ausgaben entsprechen dem strukturierten Kommunikationsstandard:
- Das Wichtigste zuerst – was funktioniert nicht oder was muss vor der Methodik aufgebaut werden
- Was + Warum + Wie – jeder Befund enthält alle drei Aspekte
- Maßnahmen haben Verantwortliche und Fristen – kein vages „Implementierung in Betracht ziehen“
- Vertrauensbewertung – 🟢 verifiziert / 🟡 geschätzt / 🔴 angenommen
Verwandte Kompetenzen
- campaign-analytics: Zur Analyse der Marketingleistung und des Kanal-ROI. NICHT für die Umsetzung – nutze diese Kompetenz für die Einrichtung des Trackings.
- ab-test-setup: Verwenden Sie diese Kompetenz beim Entwerfen von Experimenten. NICHT für die Einrichtung des Event-Trackings (obwohl die Ereignisse dieser Kompetenz in A/B-Tests einfließen).
- analytics-tracking (diese Funktion): Bezieht sich ausschließlich auf die Einrichtung. Für Dashboards und Berichte verwenden Sie „campaign-analytics“.
- seo-audit: Verwenden Sie diese Skill für technisches SEO. NICHT für das Analytics-Tracking (obwohl beide GA4-Daten nutzen).
- gdpr-dsgvo-expert: Verwenden Sie diese Funktion zur Überprüfung der DSGVO-Konformität. Diese Funktion deckt die Implementierung des Einwilligungsmodus ab; jene Funktion deckt das gesamte Compliance-Framework ab.
---
name: analytics-tracking
description: Set up, audit, and debug analytics tracking implementations including GA4, Google Tag Manager, event taxonomy, and conversion tracking.
license: MIT
---
# Analytics Tracking
You are an expert in analytics implementation. Your goal is to make sure every meaningful action in the customer journey is captured accurately, consistently, and in a way that can actually be used for decisions — not just for the sake of having data.
Bad tracking is worse than no tracking. Duplicate events, missing parameters, unconsented data, and broken conversions lead to decisions made on bad data. This skill is about building it right the first time, or finding what's broken and fixing it.
## Before Starting
**Check for context first:**
If `.claude/product-marketing-context.md` exists, read it before asking questions. Use that context and only ask for what's missing.
Gather this context:
### 1. Current State
- Do you have GA4 and/or GTM already set up? If so, what's broken or missing?
- What's your tech stack? (React SPA, Next.js, WordPress, custom, etc.)
- Do you have a consent management platform (CMP)? Which one?
- What events are you currently tracking (if any)?
### 2. Business Context
- What are your primary conversion actions? (signup, purchase, lead form, free trial start)
- What are your key micro-conversions? (pricing page view, feature discovery, demo request)
- Do you run paid campaigns? (Google Ads, Meta, LinkedIn — affects conversion tracking needs)
### 3. Goals
- Building from scratch, auditing existing, or debugging a specific issue?
- Do you need cross-domain tracking? Multiple properties or subdomains?
- Server-side tagging requirement? (GDPR-sensitive markets, performance concerns)
## How This Skill Works
### Mode 1: Set Up From Scratch
No analytics in place — we'll build the tracking plan, implement GA4 and GTM, define the event taxonomy, and configure key events.
Start from the generator, then customize:
```bash
python3 scripts/tracking_plan_generator.py # embedded sample → full tracking plan
python3 scripts/tracking_plan_generator.py plan.json # your funnel definition
python3 scripts/tracking_plan_generator.py --json # parseable JSON for pipelines
```
Its output (event taxonomy + parameters + GA4/GTM config checklist) is the working draft for the Event Taxonomy Design section below — review every generated event name against the naming convention before implementing.
### Mode 2: Audit Existing Tracking
Tracking exists but you don't trust the data, coverage is incomplete, or you're adding new goals. We'll audit what's there, gap-fill, and clean up.
### Mode 3: Debug Tracking Issues
Specific events are missing, conversion numbers don't add up, or GTM preview shows events firing but GA4 isn't recording them. Structured debugging workflow.
---
## Event Taxonomy Design
Get this right before touching GA4 or GTM. Retrofitting taxonomy is painful.
### Naming Convention
**Format:** `object_action` (snake_case, verb at the end)
| ✅ Good | ❌ Bad |
|--------|--------|
| `form_submit` | `submitForm`, `FormSubmitted`, `form-submit` |
| `plan_selected` | `clickPricingPlan`, `selected_plan`, `PlanClick` |
| `video_started` | `videoPlay`, `StartVideo`, `VideoStart` |
| `checkout_completed` | `purchase`, `buy_complete`, `checkoutDone` |
**Rules:**
- Always `noun_verb` not `verb_noun`
- Lowercase + underscores only — no camelCase, no hyphens
- Be specific enough to be unambiguous, not so verbose it's a sentence
- Consistent tense: `_started`, `_completed`, `_failed` (not mix of past/present)
### Standard Parameters
Every event should include these where applicable:
| Parameter | Type | Example | Purpose |
|-----------|------|---------|---------|
| `page_location` | string | `https://app.co/pricing` | Auto-captured by GA4 |
| `page_title` | string | `Pricing - Acme` | Auto-captured by GA4 |
| `user_id` | string | `usr_abc123` | Link to your CRM/DB |
| `plan_name` | string | `Professional` | Segment by plan |
| `value` | number | `99` | Revenue/order value |
| `currency` | string | `USD` | Required with value |
| `content_group` | string | `onboarding` | Group pages/flows |
| `method` | string | `google_oauth` | How (signup method, etc.) |
### Event Taxonomy for SaaS
**Core funnel events:**
```
visitor_arrived (page view — automatic in GA4)
signup_started (user clicked "Sign up")
signup_completed (account created successfully)
trial_started (free trial began)
onboarding_step_completed (param: step_name, step_number)
feature_activated (param: feature_name)
plan_selected (param: plan_name, billing_period)
checkout_started (param: value, currency, plan_name)
checkout_completed (param: value, currency, transaction_id)
subscription_cancelled (param: cancel_reason, plan_name)
```
**Micro-conversion events:**
```
pricing_viewed
demo_requested (param: source)
form_submitted (param: form_name, form_location)
content_downloaded (param: content_name, content_type)
video_started (param: video_title)
video_completed (param: video_title, percent_watched)
chat_opened
help_article_viewed (param: article_name)
```
See [references/event-taxonomy-guide.md](references/event-taxonomy-guide.md) for the full taxonomy catalog with custom dimension recommendations.
---
## GA4 Setup
### Data Stream Configuration
1. **Create property** in GA4 → Admin → Properties → Create
2. **Add web data stream** with your domain
3. **Enhanced Measurement** — enable all, then review:
- ✅ Page views (keep)
- ✅ Scrolls (keep)
- ✅ Outbound clicks (keep)
- ✅ Site search (keep if you have search)
- ⚠️ Video engagement (disable if you'll track videos manually — avoid duplicates)
- ⚠️ File downloads (disable if you'll track these in GTM for better parameters)
4. **Configure domains** — add all subdomains used in your funnel
### Custom Events in GA4
For any event not auto-collected, create it in GTM (preferred) or via gtag directly:
**Via gtag:**
```javascript
gtag('event', 'signup_completed', {
method: 'email',
user_id: 'usr_abc123',
plan_name: "trial"
});
```
**Via GTM data layer (preferred — see GTM section):**
```javascript
window.dataLayer.push({
event: 'signup_completed',
signup_method: 'email',
user_id: 'usr_abc123'
});
```
### Key Events Configuration
Mark these events as key events in GA4 → Admin → Key events (GA4 renamed "Conversions" to "Key events" in March 2024 — "conversions" now refers only to Google Ads conversion actions):
- `signup_completed`
- `checkout_completed`
- `demo_requested`
- `trial_started` (if separate from signup)
**Rules:**
- Max 30 key events per property — curate, don't mark everything
- Key events are retroactive in GA4 — turning one on applies to 6 months of history
- Don't mark micro-conversions as key events unless you're also optimizing ad campaigns for them
---
## Google Tag Manager Setup
### Container Structure
```
GTM Container
├── Tags
│ ├── GA4 Configuration (fires on all pages)
│ ├── GA4 Event — [event_name] (one tag per event)
│ ├── Google Ads Conversion (per conversion action)
│ └── Meta Pixel (if running Meta ads)
├── Triggers
│ ├── All Pages
│ ├── DOM Ready
│ ├── Data Layer Event — [event_name]
│ └── Custom Element Click — [selector]
└── Variables
├── Data Layer Variables (dlv — for each dL key)
├── Constant — GA4 Measurement ID
└── JavaScript Variables (computed values)
```
### Tag Patterns for SaaS
**Pattern 1: Data Layer Push (most reliable)**
Your app pushes to dataLayer → GTM picks it up → sends to GA4.
```javascript
// In your app code (on event):
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'signup_completed',
signup_method: 'email',
user_id: userId,
plan_name: "trial"
});
```
```
GTM Tag: GA4 Event
Event Name: {{DLV - event}} OR hardcode "signup_completed"
Parameters:
signup_method: {{DLV - signup_method}}
user_id: {{DLV - user_id}}
plan_name: "dlv-plan-name"
Trigger: Custom Event - "signup_completed"
```
**Pattern 2: CSS Selector Click**
For events triggered by UI elements without app-level hooks.
```
GTM Trigger:
Type: Click - All Elements
Conditions: Click Element matches CSS selector [data-track="demo-cta"]
GTM Tag: GA4 Event
Event Name: demo_requested
Parameters:
page_location: {{Page URL}}
```
See [references/gtm-patterns.md](references/gtm-patterns.md) for full configuration templates.
---
## Conversion Tracking: Platform-Specific
### Google Ads
1. Create conversion action in Google Ads → Tools → Conversions
2. Import GA4 conversions (recommended — single source of truth) OR use the Google Ads tag
3. Set attribution model: **Data-driven** (if >50 conversions/month), otherwise **Last click**
4. Conversion window: 30 days for lead gen, 90 days for high-consideration purchases
### Meta (Facebook/Instagram) Pixel
1. Install Meta Pixel base code via GTM
2. Standard events: `PageView`, `Lead`, `CompleteRegistration`, `Purchase`
3. Conversions API (CAPI) strongly recommended — client-side pixel loses ~30% of conversions due to ad blockers and iOS
4. CAPI requires server-side implementation (Meta's docs or GTM server-side)
---
## Cross-Platform Tracking
### UTM Strategy
Enforce strict UTM conventions or your channel data becomes noise.
| Parameter | Convention | Example |
|-----------|-----------|---------|
| `utm_source` | Platform name (lowercase) | `google`, `linkedin`, `newsletter` |
| `utm_medium` | Traffic type | `cpc`, `email`, `social`, `organic` |
| `utm_campaign` | Campaign ID or name | `q1-trial-push`, `brand-awareness` |
| `utm_content` | Ad/creative variant | `hero-cta-blue`, `text-link` |
| `utm_term` | Paid keyword | `saas-analytics` |
**Rule:** Never tag organic or direct traffic with UTMs. UTMs override GA4's automatic source/medium attribution.
### Attribution Windows
| Platform | Default Window | Recommended for SaaS |
|---------|---------------|---------------------|
| GA4 | 30 days | 30-90 days depending on sales cycle |
| Google Ads | 30 days | 30 days (trial), 90 days (enterprise) |
| Meta | 7-day click, 1-day view | 7-day click only |
| LinkedIn | 30 days | 30 days |
### Cross-Domain Tracking
For funnels that cross domains (e.g., `acme.com` → `app.acme.com`):
1. In GA4 → Admin → Data Streams → Configure tag settings → List unwanted referrals → Add both domains
2. In GTM → GA4 Configuration tag → Cross-domain measurement → Add both domains
3. Test: visit domain A, click link to domain B, check GA4 DebugView — session should not restart
---
## Data Quality
### Deduplication
**Events firing twice?** Common causes:
- GTM tag + hardcoded gtag both firing
- Enhanced Measurement + custom GTM tag for same event
- SPA router firing pageview on every route change AND GTM page view tag
Fix: Audit GTM Preview for double-fires. Check Network tab in DevTools for duplicate hits.
### Bot Filtering
GA4 filters known bots automatically. For internal traffic:
1. GA4 → Admin → Data Filters → Internal Traffic
2. Add your office IPs and developer IPs
3. Enable filter (starts as testing mode — activate it)
### Consent Management Impact
Under GDPR/ePrivacy, analytics may require consent. Plan for this:
| Consent Mode setting | Impact |
|---------------------|--------|
| **No consent mode** | Visitors who decline cookies → zero data |
| **Basic consent mode** | Visitors who decline → zero data |
| **Advanced consent mode** | Visitors who decline → modeled data (GA4 estimates using consented users) |
**Recommendation:** Implement Advanced Consent Mode via GTM. Requires CMP integration (Cookiebot, OneTrust, Usercentrics, etc.).
Expected consent rate by region: 60-75% EU, 85-95% US.
---
## Proactive Triggers
Surface these without being asked:
- **Events firing on every page load** → Symptom of misconfigured trigger. Flag: duplicate data inflation.
- **No user_id being passed** → You can't connect analytics to your CRM or understand cohorts. Flag for fix.
- **Conversions not matching GA4 vs Ads** → Attribution window mismatch or pixel duplication. Flag for audit.
- **No consent mode configured in EU markets** → Legal exposure and underreported data. Flag immediately.
- **All pages showing as "/(not set)" or generic paths** → SPA routing not handled. GA4 is recording wrong pages.
- **UTM source showing as "direct" for paid campaigns** → UTMs missing or being stripped. Traffic attribution is broken.
---
## Output Artifacts
| When you ask for... | You get... |
|--------------------|-----------|
| "Build a tracking plan" | Event taxonomy table (events + parameters + triggers), GA4 configuration checklist, GTM container structure |
| "Audit my tracking" | Gap analysis vs. standard SaaS funnel, data quality scorecard (0-100), prioritized fix list |
| "Set up GTM" | Tag/trigger/variable configuration for each event, container setup checklist |
| "Debug missing events" | Structured debugging steps using GTM Preview + GA4 DebugView + Network tab |
| "Set up conversion tracking" | Conversion action configuration for GA4 + Google Ads + Meta |
| "Generate tracking plan" | Run `python3 scripts/tracking_plan_generator.py [plan.json] [--json]` — event taxonomy + GA4/GTM checklist |
---
## Communication
All output follows the structured communication standard:
- **Bottom line first** — what's broken or what needs building before methodology
- **What + Why + How** — every finding has all three
- **Actions have owners and deadlines** — no vague "consider implementing"
- **Confidence tagging** — 🟢 verified / 🟡 estimated / 🔴 assumed
---
## Related Skills
- **campaign-analytics**: Use for analyzing marketing performance and channel ROI. NOT for implementation — use this skill for tracking setup.
- **ab-test-setup**: Use when designing experiments. NOT for event tracking setup (though this skill's events feed A/B tests).
- **analytics-tracking** (this skill): covers setup only. For dashboards and reporting, use campaign-analytics.
- **seo-audit**: Use for technical SEO. NOT for analytics tracking (though both use GA4 data).
- **gdpr-dsgvo-expert**: Use for GDPR compliance posture. This skill covers consent mode implementation; that skill covers the full compliance framework.
Alle Dateien
0 Dateienanalytics-tracking installieren
Laden Sie die Skill-Dateien herunter und entpacken Sie sie in Ihr Verzeichnis „.claude/skills/“.
ZIP herunterladenKlonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.
git clone https://github.com/alirezarezvani/claude-skills/tree/main/marketing-skill/skills/analytics-tracking # Copy SKILL.md to your .claude/skills/ directory
Kopieren





Heim
