Files
2025-11-29 18:32:40 +08:00

807 lines
21 KiB
JavaScript

/**
* GA4 Event Structure Examples
*
* Comprehensive code examples for all four event categories:
* 1. Automatically Collected Events
* 2. Enhanced Measurement Events
* 3. Recommended Events
* 4. Custom Events
*
* Note: These examples assume gtag.js is already installed on the page.
*/
// ============================================================================
// CATEGORY 1: AUTOMATICALLY COLLECTED EVENTS
// ============================================================================
// These fire automatically when GA4 is installed - no code needed
// Listed here for reference only
/*
Automatic Events (No implementation needed):
- session_start
- first_visit
- user_engagement
- page_view (when enhanced measurement enabled)
*/
// ============================================================================
// CATEGORY 2: ENHANCED MEASUREMENT EVENTS
// ============================================================================
// These are configured in GA4 Admin (Data Streams → Enhanced measurement)
// Toggle on/off for automatic collection
/*
Enhanced Measurement Events (Configured in GA4 Admin):
- page_view
- scroll
- click (outbound links)
- file_download
- video_start, video_progress, video_complete
- view_search_results
- form_start, form_submit
Enable in: Admin → Data Streams → Web Stream → Enhanced measurement (gear icon)
*/
// ============================================================================
// CATEGORY 3: RECOMMENDED EVENTS
// ============================================================================
// ----------------------------------------------------------------------------
// Engagement Events
// ----------------------------------------------------------------------------
// Login Event
gtag('event', 'login', {
'method': 'google' // or 'email', 'facebook', 'phone'
});
// Sign Up Event
gtag('event', 'sign_up', {
'method': 'email' // or 'google', 'facebook'
});
// Search Event
gtag('event', 'search', {
'search_term': 'blue widgets'
});
// Select Content
gtag('event', 'select_content', {
'content_type': 'article',
'item_id': 'A123'
});
// Share Event
gtag('event', 'share', {
'method': 'twitter',
'content_type': 'article',
'item_id': 'A123'
});
// ----------------------------------------------------------------------------
// Ecommerce Recommended Events
// ----------------------------------------------------------------------------
// View Item (Product Page)
gtag('event', 'view_item', {
'items': [
{
'item_id': 'SKU_12345',
'item_name': 'Stan and Friends Tee',
'affiliation': 'Google Merchandise Store',
'coupon': 'SUMMER_FUN',
'discount': 2.22,
'index': 0,
'item_brand': 'Google',
'item_category': 'Apparel',
'item_category2': 'Adult',
'item_category3': 'Shirts',
'item_category4': 'Crew',
'item_category5': 'Short sleeve',
'item_list_id': 'related_products',
'item_list_name': 'Related Products',
'item_variant': 'green',
'location_id': 'ChIJIQBpAG2ahYAR_6128GcTUEo',
'price': 10.01,
'quantity': 3
}
],
'currency': 'USD',
'value': 30.03
});
// View Item List (Product Listing Page)
gtag('event', 'view_item_list', {
'item_list_id': 'related_products',
'item_list_name': 'Related products',
'items': [
{
'item_id': 'SKU_12345',
'item_name': 'Stan and Friends Tee',
'affiliation': 'Google Merchandise Store',
'coupon': 'SUMMER_FUN',
'discount': 2.22,
'index': 0,
'item_brand': 'Google',
'item_category': 'Apparel',
'item_list_id': 'related_products',
'item_list_name': 'Related Products',
'item_variant': 'green',
'location_id': 'ChIJIQBpAG2ahYAR_6128GcTUEo',
'price': 10.01,
'quantity': 3
}
]
});
// Select Item (Item Clicked from List)
gtag('event', 'select_item', {
'item_list_id': 'related_products',
'item_list_name': 'Related products',
'items': [
{
'item_id': 'SKU_12345',
'item_name': 'Stan and Friends Tee',
'item_brand': 'Google',
'item_category': 'Apparel',
'item_variant': 'green',
'price': 10.01,
'index': 0
}
]
});
// Add to Wishlist
gtag('event', 'add_to_wishlist', {
'currency': 'USD',
'value': 30.03,
'items': [
{
'item_id': 'SKU_12345',
'item_name': 'Stan and Friends Tee',
'item_brand': 'Google',
'item_category': 'Apparel',
'item_variant': 'green',
'price': 10.01,
'quantity': 3
}
]
});
// Add to Cart
gtag('event', 'add_to_cart', {
'currency': 'USD',
'value': 30.03,
'items': [
{
'item_id': 'SKU_12345',
'item_name': 'Stan and Friends Tee',
'item_brand': 'Google',
'item_category': 'Apparel',
'item_variant': 'green',
'price': 10.01,
'quantity': 3
}
]
});
// Remove from Cart
gtag('event', 'remove_from_cart', {
'currency': 'USD',
'value': 10.01,
'items': [
{
'item_id': 'SKU_12345',
'item_name': 'Stan and Friends Tee',
'item_brand': 'Google',
'item_category': 'Apparel',
'item_variant': 'green',
'price': 10.01,
'quantity': 1
}
]
});
// View Cart
gtag('event', 'view_cart', {
'currency': 'USD',
'value': 30.03,
'items': [
{
'item_id': 'SKU_12345',
'item_name': 'Stan and Friends Tee',
'item_brand': 'Google',
'item_category': 'Apparel',
'item_variant': 'green',
'price': 10.01,
'quantity': 3
}
]
});
// Begin Checkout
gtag('event', 'begin_checkout', {
'currency': 'USD',
'value': 30.03,
'coupon': 'SUMMER_FUN',
'items': [
{
'item_id': 'SKU_12345',
'item_name': 'Stan and Friends Tee',
'item_brand': 'Google',
'item_category': 'Apparel',
'item_variant': 'green',
'price': 10.01,
'quantity': 3
}
]
});
// Add Shipping Info
gtag('event', 'add_shipping_info', {
'currency': 'USD',
'value': 30.03,
'coupon': 'SUMMER_FUN',
'shipping_tier': 'Ground',
'items': [
{
'item_id': 'SKU_12345',
'item_name': 'Stan and Friends Tee',
'item_brand': 'Google',
'item_category': 'Apparel',
'item_variant': 'green',
'price': 10.01,
'quantity': 3
}
]
});
// Add Payment Info
gtag('event', 'add_payment_info', {
'currency': 'USD',
'value': 30.03,
'coupon': 'SUMMER_FUN',
'payment_type': 'Credit Card',
'items': [
{
'item_id': 'SKU_12345',
'item_name': 'Stan and Friends Tee',
'item_brand': 'Google',
'item_category': 'Apparel',
'item_variant': 'green',
'price': 10.01,
'quantity': 3
}
]
});
// Purchase (MOST IMPORTANT)
gtag('event', 'purchase', {
'transaction_id': 'T_12345',
'affiliation': 'Google Merchandise Store',
'value': 142.52,
'tax': 10.00,
'shipping': 5.00,
'currency': 'USD',
'coupon': 'SUMMER_SALE',
'items': [
{
'item_id': 'SKU_12345',
'item_name': 'Stan and Friends Tee',
'affiliation': 'Google Merchandise Store',
'coupon': 'SUMMER_FUN',
'discount': 2.22,
'index': 0,
'item_brand': 'Google',
'item_category': 'Apparel',
'item_category2': 'Adult',
'item_category3': 'Shirts',
'item_category4': 'Crew',
'item_category5': 'Short sleeve',
'item_list_id': 'related_products',
'item_list_name': 'Related Products',
'item_variant': 'green',
'location_id': 'ChIJIQBpAG2ahYAR_6128GcTUEo',
'price': 10.01,
'quantity': 3
},
{
'item_id': 'SKU_12346',
'item_name': 'Google Grey Women\'s Tee',
'affiliation': 'Google Merchandise Store',
'coupon': 'SUMMER_FUN',
'discount': 3.33,
'index': 1,
'item_brand': 'Google',
'item_category': 'Apparel',
'item_category2': 'Adult',
'item_category3': 'Shirts',
'item_category4': 'Crew',
'item_category5': 'Short sleeve',
'item_list_id': 'related_products',
'item_list_name': 'Related Products',
'item_variant': 'gray',
'location_id': 'ChIJIQBpAG2ahYAR_6128GcTUEo',
'price': 20.99,
'quantity': 2
}
]
});
// Refund
gtag('event', 'refund', {
'transaction_id': 'T_12345',
'value': 30.03,
'tax': 4.90,
'shipping': 5.99,
'currency': 'USD',
'items': [
{
'item_id': 'SKU_12345',
'item_name': 'Stan and Friends Tee',
'affiliation': 'Google Merchandise Store',
'coupon': 'SUMMER_FUN',
'discount': 2.22,
'index': 0,
'item_brand': 'Google',
'item_category': 'Apparel',
'item_variant': 'green',
'price': 10.01,
'quantity': 3
}
]
});
// ----------------------------------------------------------------------------
// Promotion Events
// ----------------------------------------------------------------------------
// View Promotion
gtag('event', 'view_promotion', {
'creative_name': 'Summer Banner',
'creative_slot': 'featured_app_1',
'promotion_id': 'P_12345',
'promotion_name': 'Summer Sale',
'items': [
{
'item_id': 'SKU_12345',
'item_name': 'Stan and Friends Tee',
'affiliation': 'Google Merchandise Store',
'coupon': 'SUMMER_FUN',
'discount': 2.22,
'index': 0,
'item_brand': 'Google',
'item_category': 'Apparel',
'item_variant': 'green',
'price': 10.01,
'quantity': 3
}
]
});
// Select Promotion
gtag('event', 'select_promotion', {
'creative_name': 'Summer Banner',
'creative_slot': 'featured_app_1',
'promotion_id': 'P_12345',
'promotion_name': 'Summer Sale',
'items': [
{
'item_id': 'SKU_12345',
'item_name': 'Stan and Friends Tee',
'affiliation': 'Google Merchandise Store',
'coupon': 'SUMMER_FUN',
'discount': 2.22,
'index': 0,
'item_brand': 'Google',
'item_category': 'Apparel',
'item_variant': 'green',
'price': 10.01,
'quantity': 3
}
]
});
// ----------------------------------------------------------------------------
// Other Recommended Events
// ----------------------------------------------------------------------------
// Generate Lead
gtag('event', 'generate_lead', {
'value': 99.99,
'currency': 'USD'
});
// ============================================================================
// CATEGORY 4: CUSTOM EVENTS
// ============================================================================
// ----------------------------------------------------------------------------
// SaaS / Software Examples
// ----------------------------------------------------------------------------
// Feature Activation
gtag('event', 'feature_activated', {
'feature_name': 'advanced_analytics',
'feature_tier': 'enterprise',
'activation_source': 'settings_page',
'first_time_use': true
});
// Product Tour Completion
gtag('event', 'product_tour_completed', {
'tour_name': 'onboarding_v2',
'tour_version': '2.1',
'completion_time_seconds': 180,
'steps_completed': 7,
'steps_skipped': 2
});
// Trial Signup
gtag('event', 'trial_started', {
'plan_type': 'professional',
'trial_duration_days': 14,
'source': 'landing_page',
'variation': 'b'
});
// Account Upgrade
gtag('event', 'account_upgraded', {
'previous_tier': 'basic',
'new_tier': 'premium',
'upgrade_value': 99.99,
'currency': 'USD',
'billing_frequency': 'monthly'
});
// ----------------------------------------------------------------------------
// E-Learning Examples
// ----------------------------------------------------------------------------
// Course Enrollment
gtag('event', 'course_enrollment', {
'course_id': 'GA4_101',
'course_name': 'GA4 Fundamentals',
'instructor': 'John Doe',
'price': 99.99,
'currency': 'USD',
'level': 'beginner',
'enrollment_method': 'direct'
});
// Lesson Completion
gtag('event', 'lesson_completed', {
'course_id': 'GA4_101',
'lesson_id': 'lesson_3',
'lesson_title': 'Event Tracking Basics',
'time_spent_minutes': 15,
'quiz_score': 85,
'attempts': 1
});
// Certificate Earned
gtag('event', 'certificate_earned', {
'course_id': 'GA4_101',
'course_name': 'GA4 Fundamentals',
'completion_date': '2025-11-10',
'final_score': 92,
'certificate_id': 'CERT_12345'
});
// ----------------------------------------------------------------------------
// Media / Publishing Examples
// ----------------------------------------------------------------------------
// Article Read Complete
gtag('event', 'article_read_complete', {
'article_id': 'A123',
'article_title': 'Complete GA4 Guide',
'category': 'analytics',
'author': 'Jane Smith',
'word_count': 2500,
'time_to_read_minutes': 10,
'scroll_depth_percent': 100
});
// Content Shared
gtag('event', 'content_shared', {
'content_type': 'article',
'content_id': 'A123',
'content_title': 'Complete GA4 Guide',
'share_method': 'twitter',
'share_location': 'article_footer'
});
// Newsletter Subscription
gtag('event', 'newsletter_subscribed', {
'newsletter_type': 'weekly',
'subscription_source': 'article_inline',
'article_id': 'A123',
'email_domain': 'gmail.com'
});
// ----------------------------------------------------------------------------
// E-Commerce Examples (Custom Beyond Recommended)
// ----------------------------------------------------------------------------
// Product Comparison
gtag('event', 'product_comparison_viewed', {
'comparison_type': 'feature_matrix',
'products_compared': 3,
'product_ids': 'SKU_123,SKU_124,SKU_125',
'category': 'electronics'
});
// Wishlist Shared
gtag('event', 'wishlist_shared', {
'wishlist_id': 'WL_123',
'item_count': 5,
'share_method': 'email',
'total_value': 499.95,
'currency': 'USD'
});
// Size Chart Viewed
gtag('event', 'size_chart_viewed', {
'product_id': 'SKU_123',
'product_name': 'Blue T-Shirt',
'category': 'apparel',
'view_location': 'product_page'
});
// ----------------------------------------------------------------------------
// Video Tracking Examples (Custom)
// ----------------------------------------------------------------------------
// Video Tutorial Watched
gtag('event', 'video_tutorial_watched', {
'video_id': 'VID_123',
'video_title': 'GA4 Event Tracking',
'video_duration': 1200,
'completion_percent': 100,
'difficulty_level': 'beginner',
'category': 'analytics',
'language': 'en',
'watch_time_seconds': 1180
});
// Video Quality Changed
gtag('event', 'video_quality_changed', {
'video_id': 'VID_123',
'previous_quality': 'sd',
'new_quality': 'hd',
'auto_switched': false,
'playback_time_seconds': 120
});
// ----------------------------------------------------------------------------
// Form Tracking Examples (Custom)
// ----------------------------------------------------------------------------
// Multi-Step Form Progress
gtag('event', 'form_step_completed', {
'form_id': 'registration_form',
'form_name': 'Account Registration',
'step_number': 2,
'step_name': 'contact_information',
'total_steps': 4,
'time_on_step_seconds': 45
});
// Form Field Interaction
gtag('event', 'form_field_focused', {
'form_id': 'contact_form',
'field_name': 'email',
'field_type': 'email',
'field_required': true,
'field_position': 2
});
// Form Validation Error
gtag('event', 'form_validation_error', {
'form_id': 'contact_form',
'error_field': 'email',
'error_type': 'invalid_format',
'error_message': 'Please enter a valid email address'
});
// ----------------------------------------------------------------------------
// Calculator / Tool Examples
// ----------------------------------------------------------------------------
// Calculator Used
gtag('event', 'calculator_used', {
'calculator_type': 'roi',
'calculator_name': 'ROI Calculator',
'inputs_entered': 5,
'calculation_performed': true,
'result_value': 15000
});
// Pricing Calculator
gtag('event', 'pricing_calculator_used', {
'plan_selected': 'enterprise',
'users_count': 50,
'billing_frequency': 'annual',
'calculated_price': 4999.99,
'currency': 'USD'
});
// ----------------------------------------------------------------------------
// Error Tracking Examples
// ----------------------------------------------------------------------------
// Error Encountered
gtag('event', 'error_encountered', {
'error_type': 'api_error',
'error_code': '500',
'error_message': 'Internal Server Error',
'error_page': '/checkout',
'user_action': 'submit_payment'
});
// Payment Failed
gtag('event', 'payment_failed', {
'payment_method': 'credit_card',
'failure_reason': 'insufficient_funds',
'transaction_value': 99.99,
'currency': 'USD',
'retry_available': true
});
// ============================================================================
// ADVANCED PATTERNS
// ============================================================================
// ----------------------------------------------------------------------------
// Dynamic Parameter Population
// ----------------------------------------------------------------------------
// Get product data from page
function trackProductView() {
const productId = document.querySelector('[data-product-id]').textContent;
const productName = document.querySelector('.product-title').textContent;
const productPrice = parseFloat(document.querySelector('.product-price').textContent);
gtag('event', 'view_item', {
'items': [{
'item_id': productId,
'item_name': productName,
'price': productPrice,
'item_category': 'Electronics',
'quantity': 1
}],
'value': productPrice,
'currency': 'USD'
});
}
// ----------------------------------------------------------------------------
// Event with Conditional Parameters
// ----------------------------------------------------------------------------
function trackCheckout(userTier, couponCode) {
const eventParams = {
'items': getCartItems(),
'value': getCartTotal(),
'currency': 'USD'
};
// Add optional parameters if they exist
if (userTier) {
eventParams.user_tier = userTier;
}
if (couponCode) {
eventParams.coupon = couponCode;
}
gtag('event', 'begin_checkout', eventParams);
}
// ----------------------------------------------------------------------------
// Event with Calculated Parameters
// ----------------------------------------------------------------------------
function trackVideoComplete(videoElement) {
const duration = videoElement.duration;
const watchedTime = videoElement.currentTime;
const completionPercent = Math.round((watchedTime / duration) * 100);
gtag('event', 'video_complete', {
'video_id': videoElement.id,
'video_duration': Math.round(duration),
'watch_time_seconds': Math.round(watchedTime),
'completion_percent': completionPercent,
'engagement_rate': completionPercent
});
}
// ----------------------------------------------------------------------------
// User Property Setting
// ----------------------------------------------------------------------------
// Set user properties (user-scoped)
function setUserProperties(userId, userTier, accountAge) {
gtag('set', {
'user_id': userId,
'subscription_tier': userTier,
'account_age_days': accountAge,
'account_status': 'active'
});
}
// Clear user properties on logout
function clearUserProperties() {
gtag('set', {
'user_id': null // MUST be null, not empty string
});
}
// ----------------------------------------------------------------------------
// Event Callback (for SPAs)
// ----------------------------------------------------------------------------
function trackFormSubmitAndNavigate(destination) {
gtag('event', 'form_submit', {
'form_id': 'contact-form',
'form_destination': destination,
'eventCallback': function() {
// Navigate after event is sent
window.location.href = destination;
},
'eventTimeout': 2000 // Timeout fallback
});
}
// ============================================================================
// DEBUGGING EXAMPLES
// ============================================================================
// Enable debug mode for testing
gtag('config', 'G-XXXXXXXXXX', {
'debug_mode': true
});
// Or for specific events
gtag('event', 'test_event', {
'test_parameter': 'test_value',
'debug_mode': true
});
// ============================================================================
// NOTES & BEST PRACTICES
// ============================================================================
/*
Best Practices:
1. Use snake_case for event and parameter names
2. Keep event names under 40 characters
3. Keep parameter names under 40 characters
4. Keep parameter values under 100 characters (exceptions noted)
5. Maximum 25 parameters per event
6. Use ISO currency codes (USD, EUR, GBP) not symbols ($)
7. Send numeric values as numbers, not strings
8. Test in DebugView before deploying to production
9. Register custom parameters as custom dimensions in GA4 Admin
10. Document all custom events in tracking plan
Common Mistakes to Avoid:
1. Missing currency parameter on value events
2. Using $ instead of USD for currency
3. Exceeding 25 parameters per event
4. Sending PII (personally identifiable information)
5. Using generic event names (click, event, data)
6. Not testing in DebugView
7. Forgetting to register custom dimensions
Character Limits:
- Event name: 40 characters
- Parameter name: 40 characters
- Parameter value: 100 characters (standard)
- page_title: 300 characters
- page_referrer: 420 characters
- page_location: 1000 characters
*/