Matomo (ehemals Piwik) ist eine Open-Source Web-Analyse-Plattform. Als selbst gehostete Alternative zu Google Analytics ermöglicht sie DSGVO-konforme Besucherstatistiken.
Warum Matomo?
Vorteile
- 100% Datenhoheit
- DSGVO-konform möglich
- Kein Cookie-Banner nötig (bei cookieloser Nutzung)
- Echtzeit-Statistiken
- Heatmaps, Session Recording
- E-Commerce-Tracking
- Custom Reports
- API-ZugriffMatomo vs Google Analytics
| Aspekt | Matomo | Google Analytics | |--------|--------|------------------| | Hosting | Selbst | Google | | Datenhoheit | 100% | Bei Google | | DSGVO | Konform | Problematisch | | Cookie-Banner | Optional | Erforderlich | | Kosten | Free/Premium | Free/Premium |
Voraussetzungen
Systemanforderungen
- PHP 7.4+ (8.x empfohlen)
- MySQL 5.7+ / MariaDB 10.2+
- 128 MB RAM (256+ empfohlen)
- Apache/NginxPHP-Erweiterungen
apt install php8.2-fpm php8.2-mysql php8.2-xml php8.2-curl php8.2-gd php8.2-mbstring php8.2-cliInstallation
Datenbank erstellen
CREATE DATABASE matomo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'matomo'@'localhost' IDENTIFIED BY 'sicheres_passwort';
GRANT ALL ON matomo.* TO 'matomo'@'localhost';
FLUSH PRIVILEGES;Matomo herunterladen
cd /var/www
wget https://builds.matomo.org/matomo-latest.zip
unzip matomo-latest.zip
chown -R www-data:www-data matomo
chmod -R 755 matomoNginx-Konfiguration
# /etc/nginx/sites-available/matomo
server {
listen 80;
server_name analytics.example.de;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name analytics.example.de;
ssl_certificate /etc/letsencrypt/live/analytics.example.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/analytics.example.de/privkey.pem;
root /var/www/matomo;
index index.php;
# Logging
access_log /var/log/nginx/matomo.access.log;
error_log /var/log/nginx/matomo.error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
# PHP
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# Matomo-spezifische Regeln
location ~ ^/(config|tmp|core|lang) {
deny all;
return 403;
}
location ~ /\.ht {
deny all;
return 403;
}
location ~ js/container_.*_preview\.js$ {
expires off;
add_header Cache-Control 'private, no-cache, no-store';
}
location ~ \.(gif|ico|jpg|png|svg|js|css|htm|html|mp3|mp4|wav|ogg|avi|ttf|eot|woff|woff2)$ {
allow all;
expires 1y;
add_header Pragma public;
add_header Cache-Control "public";
}
}Web-Installation
1. https://analytics.example.de aufrufen
2. Systemcheck durchführen
3. Datenbank-Verbindung:
- Host: localhost
- User: matomo
- Password: sicheres_passwort
- Database: matomo
4. Super-User erstellen
5. Erste Website hinzufügen
6. Tracking-Code erhaltenTracking-Code
Standard JavaScript
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.example.de/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->Cookieless Tracking (DSGVO)
<script>
var _paq = window._paq = window._paq || [];
// Keine Cookies setzen
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.example.de/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>PHP Tracking (serverseitig)
<?php
require_once '/var/www/matomo/MatomoTracker.php';
$matomoTracker = new MatomoTracker(1, 'https://analytics.example.de/');
$matomoTracker->setUrl($_SERVER['REQUEST_URI']);
$matomoTracker->doTrackPageView($_SERVER['REQUEST_URI']);DSGVO-Konfiguration
IP-Anonymisierung
Administration → Privatsphäre → Daten anonymisieren
- IP-Adressen anonymisieren: Ja
- Anzahl Bytes: 2 (empfohlen)Daten löschen
Administration → Privatsphäre → Daten löschen
- Alte Logs regelmäßig löschen: Ja
- Logs löschen älter als: 180 Tage
- Alte Reports löschen: OptionalOpt-Out iFrame
<iframe
style="border: 0; height: 200px; width: 600px;"
src="https://analytics.example.de/index.php?module=CoreAdminHome&action=optOut&language=de">
</iframe>Do Not Track
Administration → Privatsphäre → Benutzer-Privatsphäre
- Do Not Track respektieren: JaCron-Archivierung
Einrichten
# Tracking-Archivierung per Cron (nicht Browser)
# /etc/cron.d/matomo
5 * * * * www-data /usr/bin/php /var/www/matomo/console core:archive --url=https://analytics.example.de/ > /dev/nullBrowser-Archivierung deaktivieren
Administration → System → Allgemeine Einstellungen
- Archivierung bei Browseranfrage: NeinPlugins
Installation
Administration → Plattform → Marketplace
Oder manuell in /var/www/matomo/plugins/Empfohlene Plugins
# Kostenlos
CustomDimensions # Benutzerdefinierte Dimensionen
TagManager # Tag-Management
LogViewer # Echtzeit-Logs
SecurityInfo # Sicherheitsprüfung
# Premium
HeatmapSessionRecording # Heatmaps
FormAnalytics # Formular-Analyse
MediaAnalytics # Video/Audio TrackingTag Manager
Aktivieren
Administration → Plattform → Marketplace → Tag ManagerContainer erstellen
Tag Manager → Neuer Container
Container-Code in Website einfügenTags und Trigger
Tag Manager → Tags → Neuer Tag
Trigger:
- Pageview
- Click
- Form Submit
- Custom EventBenutzerrollen
Rollen
| Rolle | Rechte | |-------|--------| | View | Nur Ansicht | | Write | Ziele bearbeiten | | Admin | Website-Einstellungen | | Super User | Voller Zugriff |
Benutzer hinzufügen
Administration → System → Benutzer → Benutzer hinzufügenAPI-Zugriff
Token erstellen
Administration → Plattform → API → Token generierenAPI-Abfragen
# Besucher heute
curl "https://analytics.example.de/index.php?module=API&method=VisitsSummary.getVisits&idSite=1&period=day&date=today&format=JSON&token_auth=YOUR_TOKEN"
# Live-Besucher
curl "https://analytics.example.de/index.php?module=API&method=Live.getCounters&idSite=1&lastMinutes=30&format=JSON&token_auth=YOUR_TOKEN"PHP-Client
<?php
$matomoUrl = 'https://analytics.example.de/';
$token = 'YOUR_TOKEN';
$siteId = 1;
$url = $matomoUrl . '?module=API'
. '&method=VisitsSummary.get'
. '&idSite=' . $siteId
. '&period=day&date=today'
. '&format=JSON'
. '&token_auth=' . $token;
$data = json_decode(file_get_contents($url), true);
echo "Besucher heute: " . $data['nb_visits'];Performance
GeoIP2
# GeoIP-Datenbank
cd /var/www/matomo/misc
wget https://download.db-ip.com/free/dbip-city-lite-2026-01.mmdb.gz
gunzip dbip-city-lite-2026-01.mmdb.gz
mv dbip-city-lite-2026-01.mmdb DBIP-City.mmdbAdministration → System → Geolocation
Provider: DBIP / GeoIP 2QueuedTracking
Marketplace → QueuedTracking installieren
Verarbeitet Tracking-Requests über Queue (Redis/MySQL)MySQL-Optimierung
-- Für große Installationen
SET GLOBAL innodb_buffer_pool_size = 1073741824; -- 1GB
SET GLOBAL innodb_log_file_size = 268435456; -- 256MBUpdates
Automatisch (Empfohlen)
Administration → System → Allgemeine Einstellungen
- Automatische Updates: AktiviertManuell
cd /var/www/matomo
php console core:updatePer Download
cd /var/www
wget https://builds.matomo.org/matomo-latest.zip
unzip -o matomo-latest.zip
chown -R www-data:www-data matomoBackup
Datenbank
mysqldump -u matomo -p matomo > matomo-backup-$(date +%Y-%m-%d).sqlKonfiguration
cp /var/www/matomo/config/config.ini.php ~/matomo-config-backup.phpVollständig
tar -czf matomo-backup-$(date +%Y-%m-%d).tar.gz /var/www/matomoTroubleshooting
Keine Daten
# Tracking-Log prüfen
tail -f /var/www/matomo/tmp/logs/matomo.log
# Cron-Archivierung prüfen
/usr/bin/php /var/www/matomo/console core:archive --url=https://analytics.example.de/Langsame Reports
- Cron-Archivierung einrichten
- Browser-Archivierung deaktivieren
- QueuedTracking verwenden
- MySQL optimierenBerechtigungsfehler
chown -R www-data:www-data /var/www/matomo
chmod -R 755 /var/www/matomo
chmod -R 777 /var/www/matomo/tmpZusammenfassung
| Einstellung | DSGVO-Empfehlung | |-------------|------------------| | Cookies | Deaktiviert | | IP-Anonymisierung | 2 Bytes | | Daten löschen | 180 Tage | | Do Not Track | Respektieren | | Opt-Out | Bereitstellen |
| Datei | Funktion | |-------|----------| | config/config.ini.php | Konfiguration | | matomo.php | Tracking-Endpoint | | console | CLI-Tool |
| API-Methode | Beschreibung | |-------------|--------------| | VisitsSummary.get | Besucherübersicht | | Live.getCounters | Live-Statistiken | | Actions.getPageUrls | Seitenaufrufe | | Referrers.getAll | Referrer |
Fazit
Matomo ist die beste selbst gehostete Alternative zu Google Analytics. Mit der richtigen Konfiguration ist DSGVO-Konformität ohne Cookie-Banner möglich. Die Cron-Archivierung ist essentiell für gute Performance. Der Tag Manager bietet Flexibilität ohne zusätzliche externe Dienste. Für datenschutzbewusste Website-Betreiber ist Matomo die klare Empfehlung.