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

3.9 KiB

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:

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

    // 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

    if (location.pathname && !isAdminRoute(location.pathname)) {
      trackAnalyticsEvent({ ... });
    }
    
  3. Custom Events - Events triggered on admin pages are not sent to Umami

    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!