Nutzer-Identifikation
Verknüpft den aktuellen Browser mit einem bekannten Nutzer (ähnlich wie PostHog identify). Einmal nach Login oder Registrierung aufrufen — jedes spätere push() enthält automatisch den Person-Kontext.
Bevorzuge usertrax.identify() als einzigen Aufruf: Wenn das Feedback-Widget auf derselben Seite läuft, setzt derselbe Call die Identität dort ebenfalls (E-Mail-Feld ausblenden, Metadaten). Die Identität liegt in localStorage (usertrax_identify) — das Widget übernimmt sie auch, wenn es nach dem Tracker lädt.
Web (Script-Tag)
Section titled “Web (Script-Tag)”// Nach dem Loginusertrax.identify("user_xyz", { email: "jane@example.com", plan: "team", seats: 5,});
// Spätere Conversions erben user_data + Meta-Snapshotusertrax.push({ event: "purchase", total: 49.99, currency: "EUR" });NPM (ESM)
Section titled “NPM (ESM)”tracker.identify("user_xyz", { email: "jane@example.com", plan: "team",});Funktionsweise
Section titled “Funktionsweise”- Persistenz — Wird in
localStorage(usertrax_identify) gespeichert und über Seitenaufrufe und Sessions hinweg wiederverwendet. user_data-Merge — Kanonische Trait-Schlüssel (email,phone,phone_number,first_name,last_name,name,customer_id,address) werden inuser_datajeder Conversion gemerged. Die Distinct-ID wird zucustomer_id, wenn du keine explizit setzt. Felder in einem einzelnenpush({ user_data: … })überschreiben Traits ausidentify.- Vollständiger Trait-Snapshot — Alle Traits (inkl. benutzerdefinierter Keys wie
planoderseats) gehen bei jeder Conversion untermeta_data.$usertrax_identifymit:
{ "distinct_id": "user_xyz", "traits": { "email": "jane@example.com", "plan": "team", "seats": 5 }}- PostHog — Wenn PostHog geladen ist und
usertraxConfig.posthognichtfalseist, ruftidentifyzusätzlichposthog.identify(distinctId, traits)auf. - Feedback-Widget — Feuert
usertrax:identify, damit ein geladenes Feedback-Widget dieselbe Identität übernimmt (hydriert beim Start auch auslocalStorage).
Unterstützte Trait-Schlüssel für user_data
Section titled “Unterstützte Trait-Schlüssel für user_data”| Trait-Schlüssel | In user_data |
|---|---|
email | Ja |
phone | Ja |
phone_number | Ja |
first_name | Ja |
last_name | Ja |
name | Ja |
customer_id | Ja |
address | Ja |
| Alle anderen | nur meta_data |
Nutze setUserData(), wenn du nur Google Enhanced Conversions mit Hashing brauchst, ohne stabile Distinct-ID — siehe Ads & Enhanced Conversions. Nutze identify(), wenn eine persistente Person-ID und Traits auf allen Events mitgehen sollen.
Visitor-Profile (uxv_id)
Section titled “Visitor-Profile (uxv_id)”Der Tracker speichert zusätzlich eine dauerhafte Visitor-ID in localStorage unter uxv_id (unabhängig von Session-Timeout / uxs_id) und sendet sie als visitor_id bei Session- und Conversion-Events. So können wiederkehrende Besucher und identifizierte Nutzer im Dashboard als ein Profil erscheinen.
Profile entstehen erst bei Identifikation
Section titled “Profile entstehen erst bei Identifikation”Eine visitor_id allein legt kein Profil an. Erst wenn über identify() eine email oder customer_id mitkommt, wird ein Profil erzeugt. Anonyme Besucher erscheinen also nicht in der Profil-Liste.
Die Vorgeschichte geht dabei nicht verloren: Die visitor_id wird auf jeder Session gespeichert, und sobald sich jemand identifiziert, werden dessen frühere anonyme Sessions und Conversions dem neuen Profil nachträglich zugeordnet.
Der Hintergrund: Ohne diese Regel bekäme jeder Browser ein Profil — und dort, wo localStorage blockiert ist, sogar eines pro Seitenaufruf. Das wären massenhaft Profile mit genau einer Session und ohne jede Identität. Für die reine Session-Auswertung ist die Sessions-Ansicht der richtige Ort.
Opt-out / Opt-in
Section titled “Opt-out / Opt-in”// Profil-Verknüpfung beenden: löscht uxv_id + usertrax_identifyusertrax.optOut();// Folgende Events senden profile_opt_out: true (ohne visitor_id)
// Wieder aktivieren / Einwilligung erteilen: neue uxv_idusertrax.optIn();Consent-Modus
Section titled “Consent-Modus”Standard ist Opt-out (profilesRequireConsent: false): uxv_id wird automatisch angelegt. Für Einwilligungs-Banner (z. B. TTDSG / ePrivacy) setze:
window.usertraxConfig = { profilesRequireConsent: true, // kein uxv_id bis optIn()};Solange die Einwilligung aussteht, senden Session- und Conversion-Events profile_opt_out: true. Das ist wichtig: identify() legt email / customer_id in user_data ab, und ohne dieses Flag würde die API daraus ein Profil bilden, bevor je eingewilligt wurde. Sessions und Conversions werden weiterhin normal getrackt — nur die Profil-Verknüpfung unterbleibt.
Mit profiles: false wird nie eine Visitor-ID erzeugt oder gesendet.
Siehe auch Konfiguration & API.
Einschränkungen
Section titled “Einschränkungen”- Safari / ITP: Script-geschriebenes
localStoragekann nach ca. 7 Tagen Inaktivität verfallen.uxv_idist auf Safari daher nicht monatelang zuverlässig — „Returning Visitor über Monate“ gilt nicht für einen relevanten Traffic-Anteil. - Cross-Domain:
uxv_idwird nicht über Domains propagiert (nur die Session-ID viauxs-Parameter). Teams mit mehreren Domains erhalten ohne starke ID (email/customer_id) ein Profil pro Domain.