Deploy to Production / Build & Verify (push) Failing after 5m56s
Ping Search Engines / Notify Search Engines (push) Successful in 2s
Deploy to Production / Pre-Deploy Tests (push) Has been skipped
Deploy to Production / Deploy to Railway (push) Has been skipped
Deploy to Production / Deploy to Render (push) Has been skipped
Deploy to Production / Deploy to VPS (PM2) (push) Has been skipped
Deploy to Production / Deploy to Fly.io (push) Has been skipped
Deploy to Production / Post-Deploy Verification (push) Has been skipped
Deploy to Production / Notify on Failure (push) Successful in 2s
E2E Test Suite / Critical User Journeys (push) Has been skipped
E2E Test Suite / API Integration Tests (push) Has been skipped
E2E Test Suite / Smoke Tests (P0) (push) Failing after 11m26s
E2E Test Suite / Form Interaction Tests (push) Failing after 11m42s
E2E Test Suite / Destructive & Chaos Tests (push) Failing after 12m2s
E2E Test Suite / Cross-Browser Regression (chromium) (push) Failing after 16m14s
E2E Test Suite / Cross-Browser Regression (webkit) (push) Failing after 17m45s
E2E Test Suite / Cross-Browser Regression (firefox) (push) Failing after 25m23s
E2E Test Suite / Security Header Tests (push) Failing after 7m55s
E2E Test Suite / Test Report Summary (push) Failing after 20s
E2E Test Suite / Mobile Device Tests (push) Failing after 2h49m9s
Uptime Monitor / Health & Response Time (push) Failing after 2s
Uptime Monitor / SSL Certificate (push) Successful in 2s
Uptime Monitor / Send Alerts (push) Failing after 3s
Uptime Monitor / Record Uptime Success (push) Has been skipped
179 lines
6.0 KiB
Markdown
179 lines
6.0 KiB
Markdown
# Analytics & Tracking Setup
|
|
|
|
**Agent:** seo-specialist
|
|
**Date:** 2026-03-21
|
|
**Status:** Complete
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
This document describes the analytics and event tracking implementation for the WorkRoot IT Solutions website. The setup supports both **Google Analytics 4 (GA4)** and **Plausible Analytics** (privacy-focused alternative), configurable via environment variables.
|
|
|
|
---
|
|
|
|
## Files Created / Modified
|
|
|
|
| File | Action | Purpose |
|
|
|------|--------|---------|
|
|
| `src/components/Analytics.astro` | Created | Injects GA4 or Plausible scripts based on env vars |
|
|
| `src/utils/analytics.ts` | Created | Client-side event tracking utilities |
|
|
| `src/layouts/BaseLayout.astro` | Modified | Imports and renders Analytics component; adds global external link tracking |
|
|
| `src/pages/contact.astro` | Modified | Added form submission event tracking |
|
|
| `src/components/Footer.astro` | Modified | Added newsletter signup event tracking |
|
|
| `src/pages/portfolio.astro` | Modified | Added portfolio filter and case study view tracking |
|
|
| `src/middleware.ts` | Modified | Updated CSP to allow GA4 and Plausible domains |
|
|
| `.env.example` | Modified | Added GA4 (G-XXXXXXXXXX format) and Plausible vars |
|
|
|
|
---
|
|
|
|
## Configuration
|
|
|
|
### Option A: Google Analytics 4
|
|
|
|
```env
|
|
# .env
|
|
GOOGLE_ANALYTICS_ID=G-XXXXXXXXXX
|
|
```
|
|
|
|
Get your Measurement ID: **Google Analytics → Admin → Data Streams → Web → Measurement ID**
|
|
|
|
> **Important:** Use the new GA4 format `G-XXXXXXXXXX`, NOT the old Universal Analytics format `UA-XXXXXXXXX-X`.
|
|
|
|
### Option B: Plausible Analytics (privacy-focused)
|
|
|
|
```env
|
|
# .env
|
|
PLAUSIBLE_DOMAIN=workroot.in
|
|
```
|
|
|
|
Sign up at [plausible.io](https://plausible.io). Add your domain, then set `PLAUSIBLE_DOMAIN` to your site's hostname (without `https://`).
|
|
|
|
### Both simultaneously
|
|
|
|
Both variables can be set at the same time — events will be sent to both platforms.
|
|
|
|
---
|
|
|
|
## Event Tracking Reference
|
|
|
|
All events are fired via `src/utils/analytics.ts`. The helper functions work silently if analytics is not configured.
|
|
|
|
| Event Name | Trigger | Parameters |
|
|
|-----------|---------|-----------|
|
|
| `form_submit_success` | Contact form submitted successfully | `form_name: 'contact'` |
|
|
| `form_submit_error` | Contact form submission failed | `form_name: 'contact'` |
|
|
| `contact_form_submit` | Contact form success (detailed) | `subject_category: <value>` |
|
|
| `newsletter_signup_success` | Newsletter subscribed successfully | `form_name: 'newsletter'` |
|
|
| `newsletter_signup_error` | Newsletter subscription failed | `form_name: 'newsletter'` |
|
|
| `portfolio_filter` | Portfolio category filter clicked | `filter_category: all\|web\|mobile\|ai` |
|
|
| `case_study_view` | Portfolio case study modal opened | `project_id`, `project_title` |
|
|
| `external_link_click` | Any external link clicked (auto-tracked) | `link_url`, `link_label`, `outbound: true` |
|
|
|
|
---
|
|
|
|
## Privacy & Compliance
|
|
|
|
### Do Not Track (DNT)
|
|
The implementation respects the browser's **Do Not Track** setting. If `navigator.doNotTrack === '1'`, no events are sent.
|
|
|
|
### GA4 Privacy Settings
|
|
GA4 is configured with:
|
|
- `anonymize_ip: true` — anonymizes the last octet of IP addresses (GDPR compliance)
|
|
- `allow_google_signals: false` — disables demographic reporting
|
|
- `allow_ad_personalization_signals: false` — disables ad personalization
|
|
|
|
### Plausible
|
|
Plausible is inherently privacy-focused: no cookies, no personal data, GDPR/CCPA compliant by design. This is the recommended option for privacy-first deployments.
|
|
|
|
---
|
|
|
|
## Content Security Policy
|
|
|
|
The following domains were added to `src/middleware.ts`:
|
|
|
|
```
|
|
script-src: https://www.googletagmanager.com https://www.google-analytics.com https://plausible.io
|
|
img-src: https://www.google-analytics.com https://www.googletagmanager.com
|
|
connect-src: https://www.google-analytics.com https://analytics.google.com https://stats.g.doubleclick.net https://plausible.io
|
|
```
|
|
|
|
---
|
|
|
|
## Using the Analytics Utility
|
|
|
|
```typescript
|
|
import {
|
|
trackEvent,
|
|
trackExternalLink,
|
|
trackFormSubmit,
|
|
trackNewsletterSignup,
|
|
trackPortfolioFilter,
|
|
trackCaseStudyView,
|
|
bindExternalLinkTracking,
|
|
} from '../utils/analytics';
|
|
|
|
// Generic event
|
|
trackEvent('button_click', { button_id: 'hero-cta' });
|
|
|
|
// Form tracking
|
|
trackFormSubmit('contact', true); // success
|
|
trackFormSubmit('contact', false); // failure
|
|
|
|
// Newsletter
|
|
trackNewsletterSignup(true);
|
|
|
|
// Portfolio
|
|
trackPortfolioFilter('web');
|
|
trackCaseStudyView('ecommerce-platform', 'E-Commerce Platform');
|
|
|
|
// External links (auto-bound in BaseLayout, or call manually)
|
|
trackExternalLink('https://github.com/workroot', 'GitHub');
|
|
```
|
|
|
|
---
|
|
|
|
## Recommended GA4 Configuration
|
|
|
|
After setting up GA4, configure these in the Google Analytics dashboard:
|
|
|
|
### Conversions (Mark as Key Events)
|
|
- `form_submit_success` → "Contact Form Lead"
|
|
- `newsletter_signup_success` → "Newsletter Signup"
|
|
|
|
### Custom Dimensions
|
|
| Dimension | Scope | Parameter |
|
|
|-----------|-------|-----------|
|
|
| Subject Category | Event | `subject_category` |
|
|
| Filter Category | Event | `filter_category` |
|
|
| Project ID | Event | `project_id` |
|
|
|
|
### Goals / Funnels
|
|
- **Lead funnel:** Page view → Contact page view → Form start → `form_submit_success`
|
|
- **Content funnel:** Portfolio filter → Case study view → Contact CTA click
|
|
|
|
---
|
|
|
|
## Verification
|
|
|
|
### GA4
|
|
1. Install [Google Analytics Debugger](https://chrome.google.com/webstore/detail/google-analytics-debugger/) Chrome extension
|
|
2. Open DevTools → Console → look for `Firing event: <event_name>`
|
|
3. Check **GA4 → Realtime** report for live event data
|
|
|
|
### Plausible
|
|
1. Open Plausible dashboard for your domain
|
|
2. Navigate to site and check the **Realtime** tab
|
|
3. Trigger events (form submit, filter click) and verify they appear under **Goals**
|
|
|
|
---
|
|
|
|
## Future Improvements
|
|
|
|
- [ ] Add cookie consent banner before initializing GA4 (GDPR strict mode)
|
|
- [ ] Track blog post read depth with scroll depth events
|
|
- [ ] Add `page_scroll` events at 25%, 50%, 75%, 100% thresholds
|
|
- [ ] Track CTA button clicks site-wide (hero, services, about sections)
|
|
- [ ] Set up Google Search Console integration with GA4
|
|
- [ ] Create GA4 Looker Studio dashboard for reporting
|