Refactor remaining skills for progressive disclosure
Phase 2 refactoring of skills >500 lines and medium-sized skills: - paid-ads: 553 → 297 lines - Extract ad-copy-templates.md, audience-targeting.md, platform-setup-checklists.md - analytics-tracking: 541 → 292 lines - Extract ga4-implementation.md, gtm-implementation.md, event-library.md - ab-test-setup: 510 → 264 lines - Extract test-templates.md, sample-size-guide.md - copywriting: 458 → 248 lines - Extract copy-frameworks.md (headline formulas, section types) - page-cro: 336 → 180 lines - Extract experiments.md (experiment ideas by page type) - onboarding-cro: 435 → 218 lines - Extract experiments.md (onboarding experiment ideas) All skills now use progressive disclosure with references/ folders, keeping SKILL.md files focused on core workflow while detailed content is available when needed. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -14,20 +14,9 @@ If `.claude/product-marketing-context.md` exists, read it before asking question
|
||||
|
||||
Before implementing tracking, understand:
|
||||
|
||||
1. **Business Context**
|
||||
- What decisions will this data inform?
|
||||
- What are the key conversion actions?
|
||||
- What questions need answering?
|
||||
|
||||
2. **Current State**
|
||||
- What tracking exists?
|
||||
- What tools are in use (GA4, Mixpanel, Amplitude, etc.)?
|
||||
- What's working/not working?
|
||||
|
||||
3. **Technical Context**
|
||||
- What's the tech stack?
|
||||
- Who will implement and maintain?
|
||||
- Any privacy/compliance requirements?
|
||||
1. **Business Context** - What decisions will this data inform? What are key conversions?
|
||||
2. **Current State** - What tracking exists? What tools are in use?
|
||||
3. **Technical Context** - What's the tech stack? Any privacy/compliance requirements?
|
||||
|
||||
---
|
||||
|
||||
@@ -60,63 +49,36 @@ Before implementing tracking, understand:
|
||||
### Structure
|
||||
|
||||
```
|
||||
Event Name | Event Category | Properties | Trigger | Notes
|
||||
---------- | ------------- | ---------- | ------- | -----
|
||||
Event Name | Category | Properties | Trigger | Notes
|
||||
---------- | -------- | ---------- | ------- | -----
|
||||
```
|
||||
|
||||
### Event Types
|
||||
|
||||
**Pageviews**
|
||||
- Automatic in most tools
|
||||
- Enhanced with page metadata
|
||||
| Type | Examples |
|
||||
|------|----------|
|
||||
| Pageviews | Automatic, enhanced with metadata |
|
||||
| User Actions | Button clicks, form submissions, feature usage |
|
||||
| System Events | Signup completed, purchase, subscription changed |
|
||||
| Custom Conversions | Goal completions, funnel stages |
|
||||
|
||||
**User Actions**
|
||||
- Button clicks
|
||||
- Form submissions
|
||||
- Feature usage
|
||||
- Content interactions
|
||||
|
||||
**System Events**
|
||||
- Signup completed
|
||||
- Purchase completed
|
||||
- Subscription changed
|
||||
- Errors occurred
|
||||
|
||||
**Custom Conversions**
|
||||
- Goal completions
|
||||
- Funnel stages
|
||||
- Business-specific milestones
|
||||
**For comprehensive event lists**: See [references/event-library.md](references/event-library.md)
|
||||
|
||||
---
|
||||
|
||||
## Event Naming Conventions
|
||||
|
||||
### Format Options
|
||||
### Recommended Format: Object-Action
|
||||
|
||||
**Object-Action (Recommended)**
|
||||
```
|
||||
signup_completed
|
||||
button_clicked
|
||||
form_submitted
|
||||
article_read
|
||||
```
|
||||
|
||||
**Action-Object**
|
||||
```
|
||||
click_button
|
||||
submit_form
|
||||
complete_signup
|
||||
```
|
||||
|
||||
**Category_Object_Action**
|
||||
```
|
||||
checkout_payment_completed
|
||||
blog_article_viewed
|
||||
onboarding_step_completed
|
||||
```
|
||||
|
||||
### Best Practices
|
||||
|
||||
- Lowercase with underscores
|
||||
- Be specific: `cta_hero_clicked` vs. `button_clicked`
|
||||
- Include context in properties, not event name
|
||||
@@ -125,235 +87,94 @@ onboarding_step_completed
|
||||
|
||||
---
|
||||
|
||||
## Essential Events to Track
|
||||
## Essential Events
|
||||
|
||||
### Marketing Site
|
||||
|
||||
**Navigation**
|
||||
- page_view (enhanced)
|
||||
- outbound_link_clicked
|
||||
- scroll_depth (25%, 50%, 75%, 100%)
|
||||
|
||||
**Engagement**
|
||||
- cta_clicked (button_text, location)
|
||||
- video_played (video_id, duration)
|
||||
- form_started
|
||||
- form_submitted (form_type)
|
||||
- resource_downloaded (resource_name)
|
||||
|
||||
**Conversion**
|
||||
- signup_started
|
||||
- signup_completed
|
||||
- demo_requested
|
||||
- contact_submitted
|
||||
| Event | Properties |
|
||||
|-------|------------|
|
||||
| cta_clicked | button_text, location |
|
||||
| form_submitted | form_type |
|
||||
| signup_completed | method, source |
|
||||
| demo_requested | - |
|
||||
|
||||
### Product/App
|
||||
|
||||
**Onboarding**
|
||||
- signup_completed
|
||||
- onboarding_step_completed (step_number, step_name)
|
||||
- onboarding_completed
|
||||
- first_key_action_completed
|
||||
| Event | Properties |
|
||||
|-------|------------|
|
||||
| onboarding_step_completed | step_number, step_name |
|
||||
| feature_used | feature_name |
|
||||
| purchase_completed | plan, value |
|
||||
| subscription_cancelled | reason |
|
||||
|
||||
**Core Usage**
|
||||
- feature_used (feature_name)
|
||||
- action_completed (action_type)
|
||||
- session_started
|
||||
- session_ended
|
||||
|
||||
**Monetization**
|
||||
- trial_started
|
||||
- pricing_viewed
|
||||
- checkout_started
|
||||
- purchase_completed (plan, value)
|
||||
- subscription_cancelled
|
||||
|
||||
### E-commerce
|
||||
|
||||
**Browsing**
|
||||
- product_viewed (product_id, category, price)
|
||||
- product_list_viewed (list_name, products)
|
||||
- product_searched (query, results_count)
|
||||
|
||||
**Cart**
|
||||
- product_added_to_cart
|
||||
- product_removed_from_cart
|
||||
- cart_viewed
|
||||
|
||||
**Checkout**
|
||||
- checkout_started
|
||||
- checkout_step_completed (step)
|
||||
- payment_info_entered
|
||||
- purchase_completed (order_id, value, products)
|
||||
**For full event library by business type**: See [references/event-library.md](references/event-library.md)
|
||||
|
||||
---
|
||||
|
||||
## Event Properties (Parameters)
|
||||
## Event Properties
|
||||
|
||||
### Standard Properties to Consider
|
||||
### Standard Properties
|
||||
|
||||
**Page/Screen**
|
||||
- page_title
|
||||
- page_location (URL)
|
||||
- page_referrer
|
||||
- content_group
|
||||
|
||||
**User**
|
||||
- user_id (if logged in)
|
||||
- user_type (free, paid, admin)
|
||||
- account_id (B2B)
|
||||
- plan_type
|
||||
|
||||
**Campaign**
|
||||
- source
|
||||
- medium
|
||||
- campaign
|
||||
- content
|
||||
- term
|
||||
|
||||
**Product** (e-commerce)
|
||||
- product_id
|
||||
- product_name
|
||||
- category
|
||||
- price
|
||||
- quantity
|
||||
- currency
|
||||
|
||||
**Timing**
|
||||
- timestamp
|
||||
- session_duration
|
||||
- time_on_page
|
||||
| Category | Properties |
|
||||
|----------|------------|
|
||||
| Page | page_title, page_location, page_referrer |
|
||||
| User | user_id, user_type, account_id, plan_type |
|
||||
| Campaign | source, medium, campaign, content, term |
|
||||
| Product | product_id, product_name, category, price |
|
||||
|
||||
### Best Practices
|
||||
|
||||
- Use consistent property names
|
||||
- Include relevant context
|
||||
- Don't duplicate GA4 automatic properties
|
||||
- Don't duplicate automatic properties
|
||||
- Avoid PII in properties
|
||||
- Document expected values
|
||||
|
||||
---
|
||||
|
||||
## GA4 Implementation
|
||||
|
||||
### Configuration
|
||||
### Quick Setup
|
||||
|
||||
**Data Streams**
|
||||
- One stream per platform (web, iOS, Android)
|
||||
- Enable enhanced measurement
|
||||
1. Create GA4 property and data stream
|
||||
2. Install gtag.js or GTM
|
||||
3. Enable enhanced measurement
|
||||
4. Configure custom events
|
||||
5. Mark conversions in Admin
|
||||
|
||||
**Enhanced Measurement Events**
|
||||
- page_view (automatic)
|
||||
- scroll (90% depth)
|
||||
- outbound_click
|
||||
- site_search
|
||||
- video_engagement
|
||||
- file_download
|
||||
|
||||
**Recommended Events**
|
||||
- Use Google's predefined events when possible
|
||||
- Correct naming for enhanced reporting
|
||||
- See: https://support.google.com/analytics/answer/9267735
|
||||
|
||||
### Custom Events (GA4)
|
||||
### Custom Event Example
|
||||
|
||||
```javascript
|
||||
// gtag.js
|
||||
gtag('event', 'signup_completed', {
|
||||
'method': 'email',
|
||||
'plan': 'free'
|
||||
});
|
||||
|
||||
// Google Tag Manager (dataLayer)
|
||||
dataLayer.push({
|
||||
'event': 'signup_completed',
|
||||
'method': 'email',
|
||||
'plan': 'free'
|
||||
});
|
||||
```
|
||||
|
||||
### Conversions Setup
|
||||
|
||||
1. Collect event in GA4
|
||||
2. Mark as conversion in Admin > Events
|
||||
3. Set conversion counting (once per session or every time)
|
||||
4. Import to Google Ads if needed
|
||||
|
||||
### Custom Dimensions and Metrics
|
||||
|
||||
**When to use:**
|
||||
- Properties you want to segment by
|
||||
- Metrics you want to aggregate
|
||||
- Beyond standard parameters
|
||||
|
||||
**Setup:**
|
||||
1. Create in Admin > Custom definitions
|
||||
2. Scope: Event, User, or Item
|
||||
3. Parameter name must match
|
||||
**For detailed GA4 implementation**: See [references/ga4-implementation.md](references/ga4-implementation.md)
|
||||
|
||||
---
|
||||
|
||||
## Google Tag Manager Implementation
|
||||
## Google Tag Manager
|
||||
|
||||
### Container Structure
|
||||
|
||||
**Tags**
|
||||
- GA4 Configuration (base)
|
||||
- GA4 Event tags (one per event or grouped)
|
||||
- Conversion pixels (Facebook, LinkedIn, etc.)
|
||||
|
||||
**Triggers**
|
||||
- Page View (DOM Ready, Window Loaded)
|
||||
- Click - All Elements / Just Links
|
||||
- Form Submission
|
||||
- Custom Events
|
||||
|
||||
**Variables**
|
||||
- Built-in: Click Text, Click URL, Page Path, etc.
|
||||
- Data Layer variables
|
||||
- JavaScript variables
|
||||
- Lookup tables
|
||||
|
||||
### Best Practices
|
||||
|
||||
- Use folders to organize
|
||||
- Consistent naming (Tag_Type_Description)
|
||||
- Version notes on every publish
|
||||
- Preview mode for testing
|
||||
- Workspaces for team collaboration
|
||||
| Component | Purpose |
|
||||
|-----------|---------|
|
||||
| Tags | Code that executes (GA4, pixels) |
|
||||
| Triggers | When tags fire (page view, click) |
|
||||
| Variables | Dynamic values (click text, data layer) |
|
||||
|
||||
### Data Layer Pattern
|
||||
|
||||
```javascript
|
||||
// Push custom event
|
||||
dataLayer.push({
|
||||
'event': 'form_submitted',
|
||||
'form_name': 'contact',
|
||||
'form_location': 'footer'
|
||||
});
|
||||
|
||||
// Set user properties
|
||||
dataLayer.push({
|
||||
'user_id': '12345',
|
||||
'user_type': 'premium'
|
||||
});
|
||||
|
||||
// E-commerce event
|
||||
dataLayer.push({
|
||||
'event': 'purchase',
|
||||
'ecommerce': {
|
||||
'transaction_id': 'T12345',
|
||||
'value': 99.99,
|
||||
'currency': 'USD',
|
||||
'items': [{
|
||||
'item_id': 'SKU123',
|
||||
'item_name': 'Product Name',
|
||||
'price': 99.99
|
||||
}]
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
**For detailed GTM implementation**: See [references/gtm-implementation.md](references/gtm-implementation.md)
|
||||
|
||||
---
|
||||
|
||||
## UTM Parameter Strategy
|
||||
@@ -362,40 +183,17 @@ dataLayer.push({
|
||||
|
||||
| Parameter | Purpose | Example |
|
||||
|-----------|---------|---------|
|
||||
| utm_source | Where traffic comes from | google, facebook, newsletter |
|
||||
| utm_medium | Marketing medium | cpc, email, social, referral |
|
||||
| utm_campaign | Campaign name | spring_sale, product_launch |
|
||||
| utm_content | Differentiate versions | hero_cta, sidebar_link |
|
||||
| utm_source | Traffic source | google, newsletter |
|
||||
| utm_medium | Marketing medium | cpc, email, social |
|
||||
| utm_campaign | Campaign name | spring_sale |
|
||||
| utm_content | Differentiate versions | hero_cta |
|
||||
| utm_term | Paid search keywords | running+shoes |
|
||||
|
||||
### Naming Conventions
|
||||
|
||||
**Lowercase everything**
|
||||
- google, not Google
|
||||
- email, not Email
|
||||
|
||||
**Use underscores or hyphens consistently**
|
||||
- product_launch or product-launch
|
||||
- Pick one, stick with it
|
||||
|
||||
**Be specific but concise**
|
||||
- blog_footer_cta, not cta1
|
||||
- 2024_q1_promo, not promo
|
||||
|
||||
### UTM Documentation
|
||||
|
||||
Track all UTMs in a spreadsheet or tool:
|
||||
|
||||
| Campaign | Source | Medium | Content | Full URL | Owner | Date |
|
||||
|----------|--------|--------|---------|----------|-------|------|
|
||||
| ... | ... | ... | ... | ... | ... | ... |
|
||||
|
||||
### UTM Builder
|
||||
|
||||
Provide a consistent UTM builder link to team:
|
||||
- Google's URL builder
|
||||
- Internal tool
|
||||
- Spreadsheet formula
|
||||
- Lowercase everything
|
||||
- Use underscores or hyphens consistently
|
||||
- Be specific but concise: `blog_footer_cta`, not `cta1`
|
||||
- Document all UTMs in a spreadsheet
|
||||
|
||||
---
|
||||
|
||||
@@ -403,72 +201,44 @@ Provide a consistent UTM builder link to team:
|
||||
|
||||
### Testing Tools
|
||||
|
||||
**GA4 DebugView**
|
||||
- Real-time event monitoring
|
||||
- Enable with ?debug_mode=true
|
||||
- Or via Chrome extension
|
||||
|
||||
**GTM Preview Mode**
|
||||
- Test triggers and tags
|
||||
- See data layer state
|
||||
- Validate before publish
|
||||
|
||||
**Browser Extensions**
|
||||
- GA Debugger
|
||||
- Tag Assistant
|
||||
- dataLayer Inspector
|
||||
| Tool | Use For |
|
||||
|------|---------|
|
||||
| GA4 DebugView | Real-time event monitoring |
|
||||
| GTM Preview Mode | Test triggers before publish |
|
||||
| Browser Extensions | Tag Assistant, dataLayer Inspector |
|
||||
|
||||
### Validation Checklist
|
||||
|
||||
- [ ] Events firing on correct triggers
|
||||
- [ ] Property values populating correctly
|
||||
- [ ] No duplicate events
|
||||
- [ ] Works across browsers
|
||||
- [ ] Works on mobile
|
||||
- [ ] Works across browsers and mobile
|
||||
- [ ] Conversions recorded correctly
|
||||
- [ ] User ID passing when logged in
|
||||
- [ ] No PII leaking
|
||||
|
||||
### Common Issues
|
||||
|
||||
**Events not firing**
|
||||
- Trigger misconfigured
|
||||
- Tag paused
|
||||
- GTM not loaded on page
|
||||
|
||||
**Wrong values**
|
||||
- Variable not configured
|
||||
- Data layer not pushing correctly
|
||||
- Timing issues (fire before data ready)
|
||||
|
||||
**Duplicate events**
|
||||
- Multiple GTM containers
|
||||
- Multiple tag instances
|
||||
- Trigger firing multiple times
|
||||
| Issue | Check |
|
||||
|-------|-------|
|
||||
| Events not firing | Trigger config, GTM loaded |
|
||||
| Wrong values | Variable path, data layer structure |
|
||||
| Duplicate events | Multiple containers, trigger firing twice |
|
||||
|
||||
---
|
||||
|
||||
## Privacy and Compliance
|
||||
|
||||
### Considerations
|
||||
|
||||
- Cookie consent required in EU/UK/CA
|
||||
- No PII in analytics properties
|
||||
- Data retention settings
|
||||
- User deletion capabilities
|
||||
- Cross-device tracking consent
|
||||
|
||||
### Implementation
|
||||
|
||||
**Consent Mode (GA4)**
|
||||
- Wait for consent before tracking
|
||||
- Use consent mode for partial tracking
|
||||
- Integrate with consent management platform
|
||||
|
||||
**Data Minimization**
|
||||
- Only collect what you need
|
||||
- Use consent mode (wait for consent)
|
||||
- IP anonymization
|
||||
- No PII in custom dimensions
|
||||
- Only collect what you need
|
||||
- Integrate with consent management platform
|
||||
|
||||
---
|
||||
|
||||
@@ -476,51 +246,32 @@ Provide a consistent UTM builder link to team:
|
||||
|
||||
### Tracking Plan Document
|
||||
|
||||
```
|
||||
```markdown
|
||||
# [Site/Product] Tracking Plan
|
||||
|
||||
## Overview
|
||||
- Tools: GA4, GTM
|
||||
- Last updated: [Date]
|
||||
- Owner: [Name]
|
||||
|
||||
## Events
|
||||
|
||||
### Marketing Events
|
||||
|
||||
| Event Name | Description | Properties | Trigger |
|
||||
|------------|-------------|------------|---------|
|
||||
| signup_started | User initiates signup | source, page | Click signup CTA |
|
||||
| signup_completed | User completes signup | method, plan | Signup success page |
|
||||
|
||||
### Product Events
|
||||
[Similar table]
|
||||
| signup_completed | User completes signup | method, plan | Success page |
|
||||
|
||||
## Custom Dimensions
|
||||
|
||||
| Name | Scope | Parameter | Description |
|
||||
|------|-------|-----------|-------------|
|
||||
| user_type | User | user_type | Free, trial, paid |
|
||||
| Name | Scope | Parameter |
|
||||
|------|-------|-----------|
|
||||
| user_type | User | user_type |
|
||||
|
||||
## Conversions
|
||||
|
||||
| Conversion | Event | Counting | Google Ads |
|
||||
|------------|-------|----------|------------|
|
||||
| Signup | signup_completed | Once per session | Yes |
|
||||
|
||||
## UTM Convention
|
||||
|
||||
[Guidelines]
|
||||
| Conversion | Event | Counting |
|
||||
|------------|-------|----------|
|
||||
| Signup | signup_completed | Once per session |
|
||||
```
|
||||
|
||||
### Implementation Code
|
||||
|
||||
Provide ready-to-use code snippets
|
||||
|
||||
### Testing Checklist
|
||||
|
||||
Specific validation steps
|
||||
|
||||
---
|
||||
|
||||
## Task-Specific Questions
|
||||
|
||||
251
skills/analytics-tracking/references/event-library.md
Normal file
251
skills/analytics-tracking/references/event-library.md
Normal file
@@ -0,0 +1,251 @@
|
||||
# Event Library Reference
|
||||
|
||||
Comprehensive list of events to track by business type and context.
|
||||
|
||||
## Marketing Site Events
|
||||
|
||||
### Navigation & Engagement
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| page_view | Page loaded (enhanced) | page_title, page_location, content_group |
|
||||
| scroll_depth | User scrolled to threshold | depth (25, 50, 75, 100) |
|
||||
| outbound_link_clicked | Click to external site | link_url, link_text |
|
||||
| internal_link_clicked | Click within site | link_url, link_text, location |
|
||||
| video_played | Video started | video_id, video_title, duration |
|
||||
| video_completed | Video finished | video_id, video_title, duration |
|
||||
|
||||
### CTA & Form Interactions
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| cta_clicked | Call to action clicked | button_text, cta_location, page |
|
||||
| form_started | User began form | form_name, form_location |
|
||||
| form_field_completed | Field filled | form_name, field_name |
|
||||
| form_submitted | Form successfully sent | form_name, form_location |
|
||||
| form_error | Form validation failed | form_name, error_type |
|
||||
| resource_downloaded | Asset downloaded | resource_name, resource_type |
|
||||
|
||||
### Conversion Events
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| signup_started | Initiated signup | source, page |
|
||||
| signup_completed | Finished signup | method, plan, source |
|
||||
| demo_requested | Demo form submitted | company_size, industry |
|
||||
| contact_submitted | Contact form sent | inquiry_type |
|
||||
| newsletter_subscribed | Email list signup | source, list_name |
|
||||
| trial_started | Free trial began | plan, source |
|
||||
|
||||
---
|
||||
|
||||
## Product/App Events
|
||||
|
||||
### Onboarding
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| signup_completed | Account created | method, referral_source |
|
||||
| onboarding_started | Began onboarding | - |
|
||||
| onboarding_step_completed | Step finished | step_number, step_name |
|
||||
| onboarding_completed | All steps done | steps_completed, time_to_complete |
|
||||
| onboarding_skipped | User skipped onboarding | step_skipped_at |
|
||||
| first_key_action_completed | Aha moment reached | action_type |
|
||||
|
||||
### Core Usage
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| session_started | App session began | session_number |
|
||||
| feature_used | Feature interaction | feature_name, feature_category |
|
||||
| action_completed | Core action done | action_type, count |
|
||||
| content_created | User created content | content_type |
|
||||
| content_edited | User modified content | content_type |
|
||||
| content_deleted | User removed content | content_type |
|
||||
| search_performed | In-app search | query, results_count |
|
||||
| settings_changed | Settings modified | setting_name, new_value |
|
||||
| invite_sent | User invited others | invite_type, count |
|
||||
|
||||
### Errors & Support
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| error_occurred | Error experienced | error_type, error_message, page |
|
||||
| help_opened | Help accessed | help_type, page |
|
||||
| support_contacted | Support request made | contact_method, issue_type |
|
||||
| feedback_submitted | User feedback given | feedback_type, rating |
|
||||
|
||||
---
|
||||
|
||||
## Monetization Events
|
||||
|
||||
### Pricing & Checkout
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| pricing_viewed | Pricing page seen | source |
|
||||
| plan_selected | Plan chosen | plan_name, billing_cycle |
|
||||
| checkout_started | Began checkout | plan, value |
|
||||
| payment_info_entered | Payment submitted | payment_method |
|
||||
| purchase_completed | Purchase successful | plan, value, currency, transaction_id |
|
||||
| purchase_failed | Purchase failed | error_reason, plan |
|
||||
|
||||
### Subscription Management
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| trial_started | Trial began | plan, trial_length |
|
||||
| trial_ended | Trial expired | plan, converted (bool) |
|
||||
| subscription_upgraded | Plan upgraded | from_plan, to_plan, value |
|
||||
| subscription_downgraded | Plan downgraded | from_plan, to_plan |
|
||||
| subscription_cancelled | Cancelled | plan, reason, tenure |
|
||||
| subscription_renewed | Renewed | plan, value |
|
||||
| billing_updated | Payment method changed | - |
|
||||
|
||||
---
|
||||
|
||||
## E-commerce Events
|
||||
|
||||
### Browsing
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| product_viewed | Product page viewed | product_id, product_name, category, price |
|
||||
| product_list_viewed | Category/list viewed | list_name, products[] |
|
||||
| product_searched | Search performed | query, results_count |
|
||||
| product_filtered | Filters applied | filter_type, filter_value |
|
||||
| product_sorted | Sort applied | sort_by, sort_order |
|
||||
|
||||
### Cart
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| product_added_to_cart | Item added | product_id, product_name, price, quantity |
|
||||
| product_removed_from_cart | Item removed | product_id, product_name, price, quantity |
|
||||
| cart_viewed | Cart page viewed | cart_value, items_count |
|
||||
|
||||
### Checkout
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| checkout_started | Checkout began | cart_value, items_count |
|
||||
| checkout_step_completed | Step finished | step_number, step_name |
|
||||
| shipping_info_entered | Address entered | shipping_method |
|
||||
| payment_info_entered | Payment entered | payment_method |
|
||||
| coupon_applied | Coupon used | coupon_code, discount_value |
|
||||
| purchase_completed | Order placed | transaction_id, value, currency, items[] |
|
||||
|
||||
### Post-Purchase
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| order_confirmed | Confirmation viewed | transaction_id |
|
||||
| refund_requested | Refund initiated | transaction_id, reason |
|
||||
| refund_completed | Refund processed | transaction_id, value |
|
||||
| review_submitted | Product reviewed | product_id, rating |
|
||||
|
||||
---
|
||||
|
||||
## B2B / SaaS Specific Events
|
||||
|
||||
### Team & Collaboration
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| team_created | New team/org made | team_size, plan |
|
||||
| team_member_invited | Invite sent | role, invite_method |
|
||||
| team_member_joined | Member accepted | role |
|
||||
| team_member_removed | Member removed | role |
|
||||
| role_changed | Permissions updated | user_id, old_role, new_role |
|
||||
|
||||
### Integration Events
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| integration_viewed | Integration page seen | integration_name |
|
||||
| integration_started | Setup began | integration_name |
|
||||
| integration_connected | Successfully connected | integration_name |
|
||||
| integration_disconnected | Removed integration | integration_name, reason |
|
||||
|
||||
### Account Events
|
||||
|
||||
| Event Name | Description | Properties |
|
||||
|------------|-------------|------------|
|
||||
| account_created | New account | source, plan |
|
||||
| account_upgraded | Plan upgrade | from_plan, to_plan |
|
||||
| account_churned | Account closed | reason, tenure, mrr_lost |
|
||||
| account_reactivated | Returned customer | previous_tenure, new_plan |
|
||||
|
||||
---
|
||||
|
||||
## Event Properties (Parameters)
|
||||
|
||||
### Standard Properties to Include
|
||||
|
||||
**User Context:**
|
||||
```
|
||||
user_id: "12345"
|
||||
user_type: "free" | "trial" | "paid"
|
||||
account_id: "acct_123"
|
||||
plan_type: "starter" | "pro" | "enterprise"
|
||||
```
|
||||
|
||||
**Session Context:**
|
||||
```
|
||||
session_id: "sess_abc"
|
||||
session_number: 5
|
||||
page: "/pricing"
|
||||
referrer: "https://google.com"
|
||||
```
|
||||
|
||||
**Campaign Context:**
|
||||
```
|
||||
source: "google"
|
||||
medium: "cpc"
|
||||
campaign: "spring_sale"
|
||||
content: "hero_cta"
|
||||
```
|
||||
|
||||
**Product Context (E-commerce):**
|
||||
```
|
||||
product_id: "SKU123"
|
||||
product_name: "Product Name"
|
||||
category: "Category"
|
||||
price: 99.99
|
||||
quantity: 1
|
||||
currency: "USD"
|
||||
```
|
||||
|
||||
**Timing:**
|
||||
```
|
||||
timestamp: "2024-01-15T10:30:00Z"
|
||||
time_on_page: 45
|
||||
session_duration: 300
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Funnel Event Sequences
|
||||
|
||||
### Signup Funnel
|
||||
1. signup_started
|
||||
2. signup_step_completed (email)
|
||||
3. signup_step_completed (password)
|
||||
4. signup_completed
|
||||
5. onboarding_started
|
||||
|
||||
### Purchase Funnel
|
||||
1. pricing_viewed
|
||||
2. plan_selected
|
||||
3. checkout_started
|
||||
4. payment_info_entered
|
||||
5. purchase_completed
|
||||
|
||||
### E-commerce Funnel
|
||||
1. product_viewed
|
||||
2. product_added_to_cart
|
||||
3. cart_viewed
|
||||
4. checkout_started
|
||||
5. shipping_info_entered
|
||||
6. payment_info_entered
|
||||
7. purchase_completed
|
||||
290
skills/analytics-tracking/references/ga4-implementation.md
Normal file
290
skills/analytics-tracking/references/ga4-implementation.md
Normal file
@@ -0,0 +1,290 @@
|
||||
# GA4 Implementation Reference
|
||||
|
||||
Detailed implementation guide for Google Analytics 4.
|
||||
|
||||
## Configuration
|
||||
|
||||
### Data Streams
|
||||
|
||||
- One stream per platform (web, iOS, Android)
|
||||
- Enable enhanced measurement for automatic tracking
|
||||
- Configure data retention (2 months default, 14 months max)
|
||||
- Enable Google Signals (for cross-device, if consented)
|
||||
|
||||
### Enhanced Measurement Events (Automatic)
|
||||
|
||||
| Event | Description | Configuration |
|
||||
|-------|-------------|---------------|
|
||||
| page_view | Page loads | Automatic |
|
||||
| scroll | 90% scroll depth | Toggle on/off |
|
||||
| outbound_click | Click to external domain | Automatic |
|
||||
| site_search | Search query used | Configure parameter |
|
||||
| video_engagement | YouTube video plays | Toggle on/off |
|
||||
| file_download | PDF, docs, etc. | Configurable extensions |
|
||||
|
||||
### Recommended Events
|
||||
|
||||
Use Google's predefined events when possible for enhanced reporting:
|
||||
|
||||
**All properties:**
|
||||
- login, sign_up
|
||||
- share
|
||||
- search
|
||||
|
||||
**E-commerce:**
|
||||
- view_item, view_item_list
|
||||
- add_to_cart, remove_from_cart
|
||||
- begin_checkout
|
||||
- add_payment_info
|
||||
- purchase, refund
|
||||
|
||||
**Games:**
|
||||
- level_up, unlock_achievement
|
||||
- post_score, spend_virtual_currency
|
||||
|
||||
Reference: https://support.google.com/analytics/answer/9267735
|
||||
|
||||
---
|
||||
|
||||
## Custom Events
|
||||
|
||||
### gtag.js Implementation
|
||||
|
||||
```javascript
|
||||
// Basic event
|
||||
gtag('event', 'signup_completed', {
|
||||
'method': 'email',
|
||||
'plan': 'free'
|
||||
});
|
||||
|
||||
// Event with value
|
||||
gtag('event', 'purchase', {
|
||||
'transaction_id': 'T12345',
|
||||
'value': 99.99,
|
||||
'currency': 'USD',
|
||||
'items': [{
|
||||
'item_id': 'SKU123',
|
||||
'item_name': 'Product Name',
|
||||
'price': 99.99
|
||||
}]
|
||||
});
|
||||
|
||||
// User properties
|
||||
gtag('set', 'user_properties', {
|
||||
'user_type': 'premium',
|
||||
'plan_name': 'pro'
|
||||
});
|
||||
|
||||
// User ID (for logged-in users)
|
||||
gtag('config', 'GA_MEASUREMENT_ID', {
|
||||
'user_id': 'USER_ID'
|
||||
});
|
||||
```
|
||||
|
||||
### Google Tag Manager (dataLayer)
|
||||
|
||||
```javascript
|
||||
// Custom event
|
||||
dataLayer.push({
|
||||
'event': 'signup_completed',
|
||||
'method': 'email',
|
||||
'plan': 'free'
|
||||
});
|
||||
|
||||
// Set user properties
|
||||
dataLayer.push({
|
||||
'user_id': '12345',
|
||||
'user_type': 'premium'
|
||||
});
|
||||
|
||||
// E-commerce purchase
|
||||
dataLayer.push({
|
||||
'event': 'purchase',
|
||||
'ecommerce': {
|
||||
'transaction_id': 'T12345',
|
||||
'value': 99.99,
|
||||
'currency': 'USD',
|
||||
'items': [{
|
||||
'item_id': 'SKU123',
|
||||
'item_name': 'Product Name',
|
||||
'price': 99.99,
|
||||
'quantity': 1
|
||||
}]
|
||||
}
|
||||
});
|
||||
|
||||
// Clear ecommerce before sending (best practice)
|
||||
dataLayer.push({ ecommerce: null });
|
||||
dataLayer.push({
|
||||
'event': 'view_item',
|
||||
'ecommerce': {
|
||||
// ...
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Conversions Setup
|
||||
|
||||
### Creating Conversions
|
||||
|
||||
1. **Collect the event** - Ensure event is firing in GA4
|
||||
2. **Mark as conversion** - Admin > Events > Mark as conversion
|
||||
3. **Set counting method**:
|
||||
- Once per session (leads, signups)
|
||||
- Every event (purchases)
|
||||
4. **Import to Google Ads** - For conversion-optimized bidding
|
||||
|
||||
### Conversion Values
|
||||
|
||||
```javascript
|
||||
// Event with conversion value
|
||||
gtag('event', 'purchase', {
|
||||
'value': 99.99,
|
||||
'currency': 'USD'
|
||||
});
|
||||
```
|
||||
|
||||
Or set default value in GA4 Admin when marking conversion.
|
||||
|
||||
---
|
||||
|
||||
## Custom Dimensions and Metrics
|
||||
|
||||
### When to Use
|
||||
|
||||
**Custom dimensions:**
|
||||
- Properties you want to segment/filter by
|
||||
- User attributes (plan type, industry)
|
||||
- Content attributes (author, category)
|
||||
|
||||
**Custom metrics:**
|
||||
- Numeric values to aggregate
|
||||
- Scores, counts, durations
|
||||
|
||||
### Setup Steps
|
||||
|
||||
1. Admin > Data display > Custom definitions
|
||||
2. Create dimension or metric
|
||||
3. Choose scope:
|
||||
- **Event**: Per event (content_type)
|
||||
- **User**: Per user (account_type)
|
||||
- **Item**: Per product (product_category)
|
||||
4. Enter parameter name (must match event parameter)
|
||||
|
||||
### Examples
|
||||
|
||||
| Dimension | Scope | Parameter | Description |
|
||||
|-----------|-------|-----------|-------------|
|
||||
| User Type | User | user_type | Free, trial, paid |
|
||||
| Content Author | Event | author | Blog post author |
|
||||
| Product Category | Item | item_category | E-commerce category |
|
||||
|
||||
---
|
||||
|
||||
## Audiences
|
||||
|
||||
### Creating Audiences
|
||||
|
||||
Admin > Data display > Audiences
|
||||
|
||||
**Use cases:**
|
||||
- Remarketing audiences (export to Ads)
|
||||
- Segment analysis
|
||||
- Trigger-based events
|
||||
|
||||
### Audience Examples
|
||||
|
||||
**High-intent visitors:**
|
||||
- Viewed pricing page
|
||||
- Did not convert
|
||||
- In last 7 days
|
||||
|
||||
**Engaged users:**
|
||||
- 3+ sessions
|
||||
- Or 5+ minutes total engagement
|
||||
|
||||
**Purchasers:**
|
||||
- Purchase event
|
||||
- For exclusion or lookalike
|
||||
|
||||
---
|
||||
|
||||
## Debugging
|
||||
|
||||
### DebugView
|
||||
|
||||
Enable with:
|
||||
- URL parameter: `?debug_mode=true`
|
||||
- Chrome extension: GA Debugger
|
||||
- gtag: `'debug_mode': true` in config
|
||||
|
||||
View at: Reports > Configure > DebugView
|
||||
|
||||
### Real-Time Reports
|
||||
|
||||
Check events within 30 minutes:
|
||||
Reports > Real-time
|
||||
|
||||
### Common Issues
|
||||
|
||||
**Events not appearing:**
|
||||
- Check DebugView first
|
||||
- Verify gtag/GTM firing
|
||||
- Check filter exclusions
|
||||
|
||||
**Parameter values missing:**
|
||||
- Custom dimension not created
|
||||
- Parameter name mismatch
|
||||
- Data still processing (24-48 hrs)
|
||||
|
||||
**Conversions not recording:**
|
||||
- Event not marked as conversion
|
||||
- Event name doesn't match
|
||||
- Counting method (once vs. every)
|
||||
|
||||
---
|
||||
|
||||
## Data Quality
|
||||
|
||||
### Filters
|
||||
|
||||
Admin > Data streams > [Stream] > Configure tag settings > Define internal traffic
|
||||
|
||||
**Exclude:**
|
||||
- Internal IP addresses
|
||||
- Developer traffic
|
||||
- Testing environments
|
||||
|
||||
### Cross-Domain Tracking
|
||||
|
||||
For multiple domains sharing analytics:
|
||||
|
||||
1. Admin > Data streams > [Stream] > Configure tag settings
|
||||
2. Configure your domains
|
||||
3. List all domains that should share sessions
|
||||
|
||||
### Session Settings
|
||||
|
||||
Admin > Data streams > [Stream] > Configure tag settings
|
||||
|
||||
- Session timeout (default 30 min)
|
||||
- Engaged session duration (10 sec default)
|
||||
|
||||
---
|
||||
|
||||
## Integration with Google Ads
|
||||
|
||||
### Linking
|
||||
|
||||
1. Admin > Product links > Google Ads links
|
||||
2. Enable auto-tagging in Google Ads
|
||||
3. Import conversions in Google Ads
|
||||
|
||||
### Audience Export
|
||||
|
||||
Audiences created in GA4 can be used in Google Ads for:
|
||||
- Remarketing campaigns
|
||||
- Customer match
|
||||
- Similar audiences
|
||||
380
skills/analytics-tracking/references/gtm-implementation.md
Normal file
380
skills/analytics-tracking/references/gtm-implementation.md
Normal file
@@ -0,0 +1,380 @@
|
||||
# Google Tag Manager Implementation Reference
|
||||
|
||||
Detailed guide for implementing tracking via Google Tag Manager.
|
||||
|
||||
## Container Structure
|
||||
|
||||
### Tags
|
||||
|
||||
Tags are code snippets that execute when triggered.
|
||||
|
||||
**Common tag types:**
|
||||
- GA4 Configuration (base setup)
|
||||
- GA4 Event (custom events)
|
||||
- Google Ads Conversion
|
||||
- Facebook Pixel
|
||||
- LinkedIn Insight Tag
|
||||
- Custom HTML (for other pixels)
|
||||
|
||||
### Triggers
|
||||
|
||||
Triggers define when tags fire.
|
||||
|
||||
**Built-in triggers:**
|
||||
- Page View: All Pages, DOM Ready, Window Loaded
|
||||
- Click: All Elements, Just Links
|
||||
- Form Submission
|
||||
- Scroll Depth
|
||||
- Timer
|
||||
- Element Visibility
|
||||
|
||||
**Custom triggers:**
|
||||
- Custom Event (from dataLayer)
|
||||
- Trigger Groups (multiple conditions)
|
||||
|
||||
### Variables
|
||||
|
||||
Variables capture dynamic values.
|
||||
|
||||
**Built-in (enable as needed):**
|
||||
- Click Text, Click URL, Click ID, Click Classes
|
||||
- Page Path, Page URL, Page Hostname
|
||||
- Referrer
|
||||
- Form Element, Form ID
|
||||
|
||||
**User-defined:**
|
||||
- Data Layer variables
|
||||
- JavaScript variables
|
||||
- Lookup tables
|
||||
- RegEx tables
|
||||
- Constants
|
||||
|
||||
---
|
||||
|
||||
## Naming Conventions
|
||||
|
||||
### Recommended Format
|
||||
|
||||
```
|
||||
[Type] - [Description] - [Detail]
|
||||
|
||||
Tags:
|
||||
GA4 - Event - Signup Completed
|
||||
GA4 - Config - Base Configuration
|
||||
FB - Pixel - Page View
|
||||
HTML - LiveChat Widget
|
||||
|
||||
Triggers:
|
||||
Click - CTA Button
|
||||
Submit - Contact Form
|
||||
View - Pricing Page
|
||||
Custom - signup_completed
|
||||
|
||||
Variables:
|
||||
DL - user_id
|
||||
JS - Current Timestamp
|
||||
LT - Campaign Source Map
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Data Layer Patterns
|
||||
|
||||
### Basic Structure
|
||||
|
||||
```javascript
|
||||
// Initialize (in <head> before GTM)
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
|
||||
// Push event
|
||||
dataLayer.push({
|
||||
'event': 'event_name',
|
||||
'property1': 'value1',
|
||||
'property2': 'value2'
|
||||
});
|
||||
```
|
||||
|
||||
### Page Load Data
|
||||
|
||||
```javascript
|
||||
// Set on page load (before GTM container)
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
dataLayer.push({
|
||||
'pageType': 'product',
|
||||
'contentGroup': 'products',
|
||||
'user': {
|
||||
'loggedIn': true,
|
||||
'userId': '12345',
|
||||
'userType': 'premium'
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
### Form Submission
|
||||
|
||||
```javascript
|
||||
document.querySelector('#contact-form').addEventListener('submit', function() {
|
||||
dataLayer.push({
|
||||
'event': 'form_submitted',
|
||||
'formName': 'contact',
|
||||
'formLocation': 'footer'
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
### Button Click
|
||||
|
||||
```javascript
|
||||
document.querySelector('.cta-button').addEventListener('click', function() {
|
||||
dataLayer.push({
|
||||
'event': 'cta_clicked',
|
||||
'ctaText': this.innerText,
|
||||
'ctaLocation': 'hero'
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
### E-commerce Events
|
||||
|
||||
```javascript
|
||||
// Product view
|
||||
dataLayer.push({ ecommerce: null }); // Clear previous
|
||||
dataLayer.push({
|
||||
'event': 'view_item',
|
||||
'ecommerce': {
|
||||
'items': [{
|
||||
'item_id': 'SKU123',
|
||||
'item_name': 'Product Name',
|
||||
'price': 99.99,
|
||||
'item_category': 'Category',
|
||||
'quantity': 1
|
||||
}]
|
||||
}
|
||||
});
|
||||
|
||||
// Add to cart
|
||||
dataLayer.push({ ecommerce: null });
|
||||
dataLayer.push({
|
||||
'event': 'add_to_cart',
|
||||
'ecommerce': {
|
||||
'items': [{
|
||||
'item_id': 'SKU123',
|
||||
'item_name': 'Product Name',
|
||||
'price': 99.99,
|
||||
'quantity': 1
|
||||
}]
|
||||
}
|
||||
});
|
||||
|
||||
// Purchase
|
||||
dataLayer.push({ ecommerce: null });
|
||||
dataLayer.push({
|
||||
'event': 'purchase',
|
||||
'ecommerce': {
|
||||
'transaction_id': 'T12345',
|
||||
'value': 99.99,
|
||||
'currency': 'USD',
|
||||
'tax': 5.00,
|
||||
'shipping': 10.00,
|
||||
'items': [{
|
||||
'item_id': 'SKU123',
|
||||
'item_name': 'Product Name',
|
||||
'price': 99.99,
|
||||
'quantity': 1
|
||||
}]
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Common Tag Configurations
|
||||
|
||||
### GA4 Configuration Tag
|
||||
|
||||
**Tag Type:** Google Analytics: GA4 Configuration
|
||||
|
||||
**Settings:**
|
||||
- Measurement ID: G-XXXXXXXX
|
||||
- Send page view: Checked (for pageviews)
|
||||
- User Properties: Add any user-level dimensions
|
||||
|
||||
**Trigger:** All Pages
|
||||
|
||||
### GA4 Event Tag
|
||||
|
||||
**Tag Type:** Google Analytics: GA4 Event
|
||||
|
||||
**Settings:**
|
||||
- Configuration Tag: Select your config tag
|
||||
- Event Name: {{DL - event_name}} or hardcode
|
||||
- Event Parameters: Add parameters from dataLayer
|
||||
|
||||
**Trigger:** Custom Event with event name match
|
||||
|
||||
### Facebook Pixel - Base
|
||||
|
||||
**Tag Type:** Custom HTML
|
||||
|
||||
```html
|
||||
<script>
|
||||
!function(f,b,e,v,n,t,s)
|
||||
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
|
||||
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
|
||||
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
|
||||
n.queue=[];t=b.createElement(e);t.async=!0;
|
||||
t.src=v;s=b.getElementsByTagName(e)[0];
|
||||
s.parentNode.insertBefore(t,s)}(window, document,'script',
|
||||
'https://connect.facebook.net/en_US/fbevents.js');
|
||||
fbq('init', 'YOUR_PIXEL_ID');
|
||||
fbq('track', 'PageView');
|
||||
</script>
|
||||
```
|
||||
|
||||
**Trigger:** All Pages
|
||||
|
||||
### Facebook Pixel - Event
|
||||
|
||||
**Tag Type:** Custom HTML
|
||||
|
||||
```html
|
||||
<script>
|
||||
fbq('track', 'Lead', {
|
||||
content_name: '{{DL - form_name}}'
|
||||
});
|
||||
</script>
|
||||
```
|
||||
|
||||
**Trigger:** Custom Event - form_submitted
|
||||
|
||||
---
|
||||
|
||||
## Preview and Debug
|
||||
|
||||
### Preview Mode
|
||||
|
||||
1. Click "Preview" in GTM
|
||||
2. Enter site URL
|
||||
3. GTM debug panel opens at bottom
|
||||
|
||||
**What to check:**
|
||||
- Tags fired on this event
|
||||
- Tags not fired (and why)
|
||||
- Variables and their values
|
||||
- Data layer contents
|
||||
|
||||
### Debug Tips
|
||||
|
||||
**Tag not firing:**
|
||||
- Check trigger conditions
|
||||
- Verify data layer push
|
||||
- Check tag sequencing
|
||||
|
||||
**Wrong variable value:**
|
||||
- Check data layer structure
|
||||
- Verify variable path (nested objects)
|
||||
- Check timing (data may not exist yet)
|
||||
|
||||
**Multiple firings:**
|
||||
- Check trigger uniqueness
|
||||
- Look for duplicate tags
|
||||
- Check tag firing options
|
||||
|
||||
---
|
||||
|
||||
## Workspaces and Versioning
|
||||
|
||||
### Workspaces
|
||||
|
||||
Use workspaces for team collaboration:
|
||||
- Default workspace for production
|
||||
- Separate workspaces for large changes
|
||||
- Merge when ready
|
||||
|
||||
### Version Management
|
||||
|
||||
**Best practices:**
|
||||
- Name every version descriptively
|
||||
- Add notes explaining changes
|
||||
- Review changes before publish
|
||||
- Keep production version noted
|
||||
|
||||
**Version notes example:**
|
||||
```
|
||||
v15: Added purchase conversion tracking
|
||||
- New tag: GA4 - Event - Purchase
|
||||
- New trigger: Custom Event - purchase
|
||||
- New variables: DL - transaction_id, DL - value
|
||||
- Tested: Chrome, Safari, Mobile
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Consent Management
|
||||
|
||||
### Consent Mode Integration
|
||||
|
||||
```javascript
|
||||
// Default state (before consent)
|
||||
gtag('consent', 'default', {
|
||||
'analytics_storage': 'denied',
|
||||
'ad_storage': 'denied'
|
||||
});
|
||||
|
||||
// Update on consent
|
||||
function grantConsent() {
|
||||
gtag('consent', 'update', {
|
||||
'analytics_storage': 'granted',
|
||||
'ad_storage': 'granted'
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
### GTM Consent Overview
|
||||
|
||||
1. Enable Consent Overview in Admin
|
||||
2. Configure consent for each tag
|
||||
3. Tags respect consent state automatically
|
||||
|
||||
---
|
||||
|
||||
## Advanced Patterns
|
||||
|
||||
### Tag Sequencing
|
||||
|
||||
**Setup tags to fire in order:**
|
||||
Tag Configuration > Advanced Settings > Tag Sequencing
|
||||
|
||||
**Use cases:**
|
||||
- Config tag before event tags
|
||||
- Pixel initialization before tracking
|
||||
- Cleanup after conversion
|
||||
|
||||
### Exception Handling
|
||||
|
||||
**Trigger exceptions** - Prevent tag from firing:
|
||||
- Exclude certain pages
|
||||
- Exclude internal traffic
|
||||
- Exclude during testing
|
||||
|
||||
### Custom JavaScript Variables
|
||||
|
||||
```javascript
|
||||
// Get URL parameter
|
||||
function() {
|
||||
var params = new URLSearchParams(window.location.search);
|
||||
return params.get('campaign') || '(not set)';
|
||||
}
|
||||
|
||||
// Get cookie value
|
||||
function() {
|
||||
var match = document.cookie.match('(^|;) ?user_id=([^;]*)(;|$)');
|
||||
return match ? match[2] : null;
|
||||
}
|
||||
|
||||
// Get data from page
|
||||
function() {
|
||||
var el = document.querySelector('.product-price');
|
||||
return el ? parseFloat(el.textContent.replace('$', '')) : 0;
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user