Session-Recording
Sehen Sie Ihre Site mit den Augen Ihrer Besucher. Mausbewegungen, Klicks, Scrolls und DOM-Änderungen werden als platzsparende rrweb-Events aufgezeichnet und in einem Player wieder abgespielt — vollständig ohne Cookies, mit automatischer Privacy-Maskierung sensibler Felder. Ab Business-Plan (29 EUR/Monat, monatlich kündbar).
# So aktivieren Sie Recording
Override per HTML-Attribut (Fallback)
Wenn Sie die Tracker-Konfiguration lieber im HTML pinnen wollen (z. B. weil mehrere Sub-Domains dieselbe Site-ID nutzen, aber nur eine recorden soll), übersteuert das Attribut data-record="1" am script-Tag die Server-Config:
<script defer src="https://api.xictraq.com/t.js"
data-site="YOUR_SITE_ID"
data-record="1"></script>
<noscript><img src="https://api.xictraq.com/api/px?s=YOUR_SITE_ID" alt="" width="1" height="1" style="position:absolute;left:-9999px" referrerpolicy="no-referrer-when-downgrade"></noscript> Wir empfehlen die Server-Konfiguration als Standard — sie ist live anpassbar und greift sofort. Es gibt keine JavaScript-Variable wie cfg.rec — die Konfiguration läuft ausschließlich über das Settings-Tab oder data-* Attribute.
# Recording-Player
# Funktionen
rrweb-basiert (Open Source)
Statt einzelne Bilder pro Sekunde zu speichern (groß, datenschutz-fragwürdig), zeichnet rrweb DOM-Mutationen + Maus-Events auf — typischer Recording-Speicherbedarf: 2–8 KB pro Sekunde. Das gesamte Recording wird im Browser nachgespielt, der echte HTML/CSS-Stack der Site ist sichtbar.
Privacy by Default
Die Maskierung greift in drei Stufen, alle am Tracker — sensible Daten verlassen den Browser des Besuchers gar nicht erst im Klartext:
maskAllInputs— alle Eingabefelder werden standardmäßig maskiert; getippte Werte landen nie in der Aufzeichnung.- Auto-Redaction in Textknoten: Kreditkartennummern (13–19 Ziffern, Luhn-geprüft) und IBANs werden automatisch durch • ersetzt — auch wenn sie als reiner Text auf Bestätigungs- oder Kontoseiten stehen. Bewusst konservativ, damit normale Zahlen/IDs erhalten bleiben.
- Opt-in-Maskierung: Bereiche mit dem Attribut data-xictraq-mask oder eigenen CSS-Selektoren (Tracker-Einstellungen) werden voll maskiert. Mit data-xictraq-block wird ein Element komplett von der Aufzeichnung ausgenommen (blockSelector).
Auto-Tagging: Frust-Klicks, Dead-Clicks, Errors
Ein Cron-Job (/cron/tag-recordings) analysiert jede abgeschlossene Aufzeichnung per Heuristik und hängt Tags an (Spalte session_recordings.tags, JSON-Array):
rage_click— 3+ Klicks innerhalb 2 s im Umkreis von 30 px zum ersten Klickdead_click— Klick ohne DOM-Mutation und ohne Seitenwechsel innerhalb 1,5 s (kaputte Buttons / kaputtes onclick)error— window.onerror oder unhandledrejection während der Session — Tracker schreibt das als rrweb-Custom-Event in den Recording-Stream, sodass der Cron es findet
Tags erscheinen als Badges in der Recordings-Liste unter Analytics → Aufnahmen & Tests.
Verknüpfung mit Form-Events
Formular-Ereignisse und Aufzeichnungen tragen dieselbe Tageskennung des Besuchs (session_hash); darüber lassen sie sich einander zuordnen. Eine gemeinsame Recording-ID gibt es nicht: Die Kennung der Aufzeichnung geht nur mit den Aufzeichnungspaketen an /api/p/r. In der Recordings-Liste sehen Sie über die erkannten Tags direkt problematische Sessions. Frei konfigurierbare SQL-ähnliche Filter („Sessions mit Form-View ohne Submit“ etc.) sind noch nicht Self-Service — auf Anfrage richten wir Custom-Queries gerne ein.
First-Party-Hosting (kein Drittanbieter-CDN)
rrweb-Engine und Player-CSS werden NICHT vom rrweb-CDN nachgeladen, sondern vom API-Origin (api.xictraq.com bzw. Ihrem First-Party-Proxy) mit obfuskierten Dateinamen (rx.js, rxp.js, rxp.css). Standard-EasyPrivacy-Filterlisten würden „rrweb.min.js“ am Dateinamen blocken — unsere Variante wird nicht erkannt.
Consent-gesteuerter Start (kein Auto-Recording)
Selbst wenn Recording in den Einstellungen aktiv ist, startet die Aufzeichnung NICHT automatisch beim Laden. Sie wartet auf das Einwilligungs-Signal Ihrer Seite oder Ihres Consent-Tools:
xictraq.consent('granted'); // startet Recording (wenn aktiviert)
xictraq.consent('denied'); // stoppt Recording
xictraq.record('start'); // Recording gezielt ein-/ausschalten
xictraq.record('stop'); Erst wenn Aktivierung UND Einwilligung vorliegen, wird die rrweb-Engine (rx.js) nachgeladen und die Aufzeichnung beginnt. Die Recording-ID liegt im sessionStorage des Tabs und gilt je Aufzeichnung: Nach 30 Minuten ohne aufgezeichnetes Ereignis (auch Änderungen der Seite zählen) und mit dem ersten Laden einer Seite nach Mitternacht (UTC) beginnt eine neue Aufzeichnung mit neuer Recording-ID (ab Tracker-Fassung 61). Kein Cookie; der sessionStorage ist an Tab und Website gebunden.
Chunk-Transport & abbruchsicheres Flushen
rrweb-Events werden gepuffert und in Chunks an /api/p/r gesendet — gedrosselt, damit auch lange Sessions schlank bleiben:
- Flush, sobald 60 Events im Puffer liegen, zusätzlich alle 10 Sekunden, sowie bei pagehide (finaler Chunk; nach mehr als 30 Minuten ohne aufgezeichnetes Ereignis entfällt er) und beim Wechsel in einen Hintergrund-Tab.
- Sampling: Mausbewegung alle 100 ms, Scroll alle 150 ms, Eingaben nur als Endwert — reduziert Volumen ohne den Wiedergabe-Eindruck zu verlieren.
- Server-seitige Obergrenze: eine einzelne Aufzeichnungs-Datei wird bei 10 MB gekappt, damit Ausreißer keine Platte fluten. Ist die Grenze erreicht, beginnt in diesem Tab keine weitere Aufzeichnung, auch nicht nach einer Pause oder einem Tageswechsel.
- Externe Stylesheets werden beim Ingest in den rrweb-Snapshot inline kopiert (nur same-host, SSRF-sicher) — so bleibt die Wiedergabe optisch korrekt, auch nachdem die Seite mit neu gehashten Asset-URLs deployt wurde.
Storage & Retention
Sessions ohne neuen Chunk seit 30 Minuten markiert /cron/compress-recordings als abgeschlossen (fängt Browser-Crashes, abrupte Tab-Schließungen und Aufzeichnungen nach dem Leerlauf ab, für die kein pagehide-Flush ankommt). Abgeschlossene Sessions, die älter als eine Stunde sind, werden vom selben Cron zu .ndjson.gz komprimiert (~70 % Platz-Ersparnis, max. 200 pro Lauf). Sample-Rate konfigurieren Sie selbst im Tab Analytics → Einstellungen (1–100 %, betrifft alle Tracker-Features). Recordings haben aus Datenschutzgründen (Art. 5 Abs. 1 lit. e DSGVO, Speicherbegrenzung) eine feste Obergrenze von 90 Tagen — unabhängig vom Plan und entkoppelt von der sonst unbegrenzten Aggregat-Analytics-Aufbewahrung. Greift Ihre Tarif-Analytics-Retention früher als 90 Tage, gilt diese kürzere Frist. Das Add-On „Erweiterte Datenaufbewahrung“ verlängert die Aggregat-Analytics-Retention, hebt aber die 90-Tage-Grenze für Recordings nicht auf.