Files
MyClub/DOCS/UMAMI_ADMIN_EXCLUSION.md
Tomáš Dvořák 12cba639b9 upload
2025-10-16 13:32:05 +02:00

159 lines
3.9 KiB
Markdown

# Umami Admin Pages Exclusion
## Changes Made
Updated the Umami tracking hook to **completely exclude all admin pages** from tracking.
### What's Excluded
The following routes are excluded from Umami tracking:
- `/admin` - Admin dashboard
- `/admin/*` - All admin sub-pages (articles, matches, settings, analytics, etc.)
- `/login` - Login page
- `/setup` - Initial setup page
### Implementation
**File: `frontend/src/hooks/useUmami.ts`**
Added `isAdminRoute()` helper function:
```typescript
const isAdminRoute = (pathname: string) => {
return pathname.startsWith('/admin') ||
pathname === '/login' ||
pathname === '/setup';
};
```
**Three levels of exclusion:**
1. **Script Loading** - Umami script is not loaded on admin pages
```typescript
// Don't load Umami for admin pages
if (isAdminRoute(location.pathname)) {
console.log('Umami tracking disabled for admin pages');
return;
}
```
2. **Page View Tracking** - Admin page views are not sent to Umami
```typescript
if (location.pathname && !isAdminRoute(location.pathname)) {
trackAnalyticsEvent({ ... });
}
```
3. **Custom Events** - Events triggered on admin pages are not sent to Umami
```typescript
if (isAdminRoute(location.pathname)) {
return; // Skip tracking
}
```
### Why This Matters
**Benefits:**
- ✅ **Clean analytics** - Only public-facing pages in Umami dashboard
- ✅ **Better performance** - No tracking overhead in admin panel
- ✅ **Privacy** - Admin activity not tracked
- ✅ **Accurate metrics** - Real visitor data without admin noise
**What still tracks admin pages:**
- Local analytics database (powers `/admin` dashboard widgets)
- This is intentional - you want to see which admins are active
### Testing
**Before (admin pages were tracked):**
```
Umami Dashboard:
/admin - 5 views
/admin/articles - 3 views
/admin/settings - 2 views
/ - 10 views
```
**After (only public pages tracked):**
```
Umami Dashboard:
/ - 10 views
/articles - 8 views
/zapasy - 6 views
(no /admin routes)
```
### How to Verify
1. **Open browser console**
2. **Visit a public page** (e.g., `/`)
- Console shows: `Umami tracking loaded`
- Script tag exists: `<script data-website-id="..."></script>`
3. **Visit admin page** (e.g., `/admin`)
- Console shows: `Umami tracking disabled for admin pages`
- No Umami script in `<head>`
- No tracking requests to Umami server
4. **Check Umami dashboard**
- No `/admin` routes in "Top Pages"
- Only public pages visible
### Local Analytics Still Work
The local analytics database (`visitor_events` table) continues to track **all pages** including admin:
- Powers the widgets on `/admin` dashboard
- Used for internal monitoring
- Not sent to Umami
**This is intentional!** You have:
- **Public analytics** → Umami (for website visitors)
- **Internal analytics** → Local DB (for admin monitoring)
### Console Output
**Public page (`/`):**
```
Umami tracking loaded
```
**Admin page (`/admin`):**
```
Umami tracking disabled for admin pages
```
**Switching from admin to public:**
```
// On /admin
Umami tracking disabled for admin pages
// Navigate to /
Umami tracking loaded
```
### Edge Cases Handled
1. **Direct navigation to admin** - Script never loads
2. **Navigation from public to admin** - Tracking stops
3. **Navigation from admin to public** - Script loads on public page
4. **Custom events in admin** - Silently ignored (not sent to Umami)
### Production Deployment
No special configuration needed! The exclusion works automatically based on URL paths.
With Cloudflare Tunnel:
- `https://fotbalklub.cz/` → Tracked ✅
- `https://fotbalklub.cz/admin` → Not tracked ❌
- `https://fotbalklub.cz/zapasy` → Tracked ✅
Perfect! 🎉
## Summary
Admin pages are now **completely excluded** from Umami tracking at all levels:
- No script loading
- No page view tracking
- No event tracking
Your Umami analytics will show **only real visitor activity** on public pages!