Common Issues and Solutions
No Data Appearing in Dashboard
Symptoms
- Dashboard shows zero pageviews
- Real-time visitors count is zero
- Events not appearing
Diagnostic Steps
1. Verify Script Installation
Check that the Umami script is correctly installed:
<!-- Umami Cloud -->
<script async src="https://cloud.umami.is/script.js"
data-website-id="your-website-id"></script>
<!-- Self-Hosted -->
<script async src="https://your-umami-instance.com/script.js"
data-website-id="your-website-id"></script>
2. Confirm Website ID
// Check in browser console
const script = document.querySelector('script[data-website-id]');
console.log('Website ID:', script?.getAttribute('data-website-id'));
// Should match ID in Umami dashboard
3. Check if Umami is Loaded
// Verify umami object exists
console.log(typeof umami);
// Should output 'object'
// Test tracking
umami.track('test-event');
console.log('Test event sent');
4. Verify Network Requests
- Open browser DevTools (F12)
- Go to Network tab
- Look for POST request to
/api/send - Check response status (should be 200)
5. Check for Errors
Common issues:
- 404: Script URL is incorrect
- 403/401: Website ID doesn't exist or is disabled
- CORS errors: Self-hosted configuration issue
- Ad blockers: May block Umami script
Quick Fixes
// Diagnostic script
console.log('=== Umami Diagnostics ===');
console.log('Loaded:', typeof umami !== 'undefined');
const script = document.querySelector('script[data-website-id]');
console.log('Script URL:', script?.src);
console.log('Website ID:', script?.getAttribute('data-website-id'));
console.log('Domain:', window.location.hostname);
// Test tracking
if (typeof umami !== 'undefined') {
umami.track('diagnostic-test', {
test: true,
timestamp: new Date().toISOString()
});
console.log('Test event sent successfully');
} else {
console.error('Umami not loaded');
}
Events Not Recording
Troubleshooting Event Tracking
1. Verify Event Syntax
// Correct syntax
umami.track('event_name');
umami.track('event_name', { property: 'value' });
// Common mistakes
umami.track(); // Missing event name
umami.track('event name'); // Spaces in name (use underscores)
umami.track('event', 'value'); // Properties must be object
2. Check Events Appear in Dashboard
- Navigate to Events tab in Umami
- Filter by event name
- Check date range includes today
- Verify events appear within 1-2 minutes
3. Debug Event Tracking
// Test event with logging
function testEvent(name, data) {
console.log('Tracking event:', name, data);
umami.track(name, data);
console.log('Event sent');
}
testEvent('test_event', { test: true });
// Check browser network tab for POST to /api/send
4. Data Attribute Events Not Working
<!-- Verify data attribute syntax -->
<button data-umami-event="button_clicked">Correct</button>
<!-- Common mistakes -->
<button data-umami="button_clicked">Wrong - missing '-event'</button>
<button umami-event="button_clicked">Wrong - missing 'data-'</button>
Self-Hosting Issues
Database Connection Problems
1. Check Database Connection
# Test database connectivity
psql -h localhost -U umami -d umami
# Or for MySQL
mysql -h localhost -u umami -p umami
2. Verify Environment Variables
# .env file should contain:
DATABASE_URL=postgresql://user:password@localhost:5432/umami
# or
DATABASE_URL=mysql://user:password@localhost:3306/umami
HASH_SALT=your-random-salt-string
3. Check Database Migrations
# Run migrations
npm run build-db
# Check migration status
npm run check-db
Server Not Starting
1. Check Server Logs
# View logs
npm run start
# Check for errors
journalctl -u umami # if using systemd
docker logs umami # if using Docker
2. Common Startup Errors
# Database connection failed
Error: connect ECONNREFUSED 127.0.0.1:5432
Solution: Check DATABASE_URL and database is running
# Port already in use
Error: listen EADDRINUSE: address already in use :::3000
Solution: Change PORT in .env or stop other service
# Missing dependencies
Error: Cannot find module 'next'
Solution: Run npm install
3. Docker Issues
# Check Docker container status
docker ps -a | grep umami
# View container logs
docker logs umami
# Restart container
docker restart umami
# Check Docker Compose configuration
docker-compose config
# Rebuild and restart
docker-compose down
docker-compose up -d --build
CORS Errors (Self-Hosted)
1. Configure CORS Headers
For Nginx:
location /api/ {
proxy_pass http://localhost:3000;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
add_header Access-Control-Allow-Headers "Content-Type";
}
For Apache:
<Location /api/>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type"
</Location>
2. Environment Configuration
# .env file
CORS_MAX_AGE=86400
ALLOWED_ORIGINS=https://yoursite.com,https://www.yoursite.com
Performance Issues
Dashboard Loading Slowly
1. Database Optimization
-- PostgreSQL: Vacuum and analyze
VACUUM ANALYZE;
-- Check table sizes
SELECT relname, pg_size_pretty(pg_total_relation_size(relid))
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;
2. Index Optimization
# Check if indexes exist
npm run check-db
# Rebuild indexes if needed
npm run build-db
// Configure data retention in database
// Delete old data to improve performance
DELETE FROM event WHERE created_at < NOW() - INTERVAL '90 days';
DELETE FROM pageview WHERE created_at < NOW() - INTERVAL '90 days';
High Server Load
1. Optimize Configuration
# Increase Node.js memory limit
NODE_OPTIONS="--max-old-space-size=4096" npm start
# Use process manager like PM2
pm2 start npm --name umami -- start
pm2 scale umami 4 # Run 4 instances
2. Use CDN for Script
<!-- Serve script.js through CDN -->
<script async src="https://cdn.yoursite.com/script.js"
data-website-id="your-id"></script>
3. Database Connection Pooling
// Increase connection pool size
// DATABASE_URL with pool parameters
postgresql://user:pass@localhost/umami?pool_max=20
Website Not Showing in Dashboard
Troubleshooting
1. Verify Website is Added
- Login to Umami dashboard
- Check Settings > Websites
- Ensure website is not disabled
- Verify domain matches exactly
2. Create Website if Missing
# Using Umami API
curl -X POST https://your-umami.com/api/websites \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"My Website","domain":"example.com"}'
3. Check Website ID Matches
The data-website-id in your script must match the ID shown in dashboard.
Real-Time Data Not Updating
Solutions
1. Clear Browser Cache
// Force refresh dashboard
location.reload(true);
// Clear service worker cache
navigator.serviceWorker.getRegistrations().then(registrations => {
registrations.forEach(registration => registration.unregister());
});
2. Check WebSocket Connection (if using real-time)
// Verify WebSocket connection
console.log('WebSocket:', window.WebSocket);
3. Verify Server Time
# Check server time is correct
date
# Sync time if needed
ntpdate pool.ntp.org
Privacy and Ad Blocker Issues
Ad Blockers Blocking Umami
1. Use Custom Domain
<!-- Instead of: -->
<script src="https://umami-instance.com/script.js"></script>
<!-- Use subdomain: -->
<script src="https://analytics.yoursite.com/script.js"></script>
2. Proxy Through Your Domain
Nginx configuration:
location /stats/ {
proxy_pass https://your-umami.com/;
proxy_set_header Host $host;
}
Update script:
<script async src="/stats/script.js"
data-website-id="your-id"></script>
3. Rename Script File
# Copy and rename script.js
cp public/script.js public/analytics.js
# Update your tracking code
<script async src="https://your-umami.com/analytics.js"
data-website-id="your-id"></script>
Debugging Tools
Enable Debug Mode
// Add debug parameter to script
<script async src="https://cloud.umami.is/script.js"
data-website-id="your-id"
data-auto-track="false"
data-cache="false"></script>
// Manual tracking with logging
umami.track('test', { debug: true });
console.log('Tracking test event');
Browser Console Diagnostics
// Comprehensive diagnostic check
console.log('=== Umami Diagnostics ===');
console.log('Script loaded:', typeof umami !== 'undefined');
console.log('Website ID:', document.querySelector('[data-website-id]')?.getAttribute('data-website-id'));
console.log('Current URL:', window.location.href);
console.log('Hostname:', window.location.hostname);
console.log('User Agent:', navigator.userAgent);
// Test tracking
if (typeof umami !== 'undefined') {
umami.track('diagnostic_test', {
test: true,
url: window.location.href,
timestamp: new Date().toISOString()
});
console.log('✓ Test event sent');
} else {
console.error('✗ Umami not loaded');
}
Getting Additional Help
Support Resources
- Documentation: umami.is/docs
- GitHub Issues: github.com/umami-software/umami/issues
- Discord Community: discord.gg/4dz4zcXYrQ
- Discussions: github.com/umami-software/umami/discussions
Before Requesting Help
Gather this information:
- Umami version (check package.json or dashboard footer)
- Self-hosted or Umami Cloud
- Database type and version (PostgreSQL/MySQL)
- Node.js version
- Browser and version
- Console errors (screenshots)
- Steps to reproduce
- Server logs (if self-hosted)
Escalation Path
- Search existing GitHub issues
- Check documentation and discussions
- Ask in Discord community
- Open GitHub issue with details
- For Umami Cloud: Email support@umami.is (paid plans)