A/B-Experimente
Pro FeatureDefinieren Sie ein Experiment im Dashboard, binden Sie eine Zeile JavaScript auf Ihrer Website ein, und Zenovay weist jedem Besucher deterministisch eine Variante zu und meldet die Conversion-Raten pro Variante sowie ein 95-%-Konfidenzintervall für den Hub gegenüber der Kontrolle.
A/B-Experimente sind in den Plänen Pro, Scale und Enterprise verfügbar. Aktualisieren Sie Ihren Plan, um diese Funktion zu aktivieren.
So funktioniert es
Die Zuweisung eines Besuchers wird lokal vom Tracker über einen deterministischen Hash der Besucher-ID berechnet, sodass derselbe Besucher immer dieselbe Variante sieht — auch über Seitenaktualisierungen hinweg und (sofern Cookies aktiviert sind) sitzungsübergreifend. Im Cookieless-Modus (Standard für Sites, die den Tracker mit data-cookieless="true" laden) ist die Zuweisung Fenster-scoped und wird beim Schließen des Tabs zurückgesetzt.
Ein Experiment einrichten
- Öffnen Sie im Dashboard Ihre Website → Tab Experiments → New experiment.
- Benennen Sie das Experiment, beschreiben Sie optional eine Hypothese, und wählen Sie ein Zielereignis aus Ihren bestehenden benutzerdefinierten Zielen aus.
- Fügen Sie 2–N Varianten hinzu, markieren Sie eine als Kontrolle, und legen Sie pro Variante einen Traffic-Split-Prozentsatz fest.
- Speichern Sie als Entwurf und klicken Sie auf Launch, sobald Sie bereit sind.
Code einbinden
const variant = window.zenovay('experiment', 'checkout-cta-color', ['control', 'green', 'orange']);
if (variant === 'green') document.querySelector('.cta').style.background = '#22c55e';
if (variant === 'orange') document.querySelector('.cta').style.background = '#f97316';
Das ist die gesamte clientseitige Integration. Der Tracker übernimmt automatisch Zuweisung, Exposure-Logging und Conversion-Attribution — wenn der Besucher später das Zielereignis auslöst (über Ihren bestehenden Goal-Tracking-Aufruf), schreibt Zenovay die Conversion der zugewiesenen Variante zu.
Der Aufruf window.zenovay('experiment', …) ist idempotent — mehrfache Aufrufe auf derselben Seite liefern dieselbe Variante zurück und protokollieren höchstens eine Exposure pro Besucher, pro Experiment und pro Session. Übergeben Sie auf allen Seiten stets dieselbe variants-Liste in derselben Reihenfolge; die Reihenfolge ist Teil des deterministischen Hashes.
Framework-Beispiele
Der Snippet oben ist reines JavaScript und läuft in jeder Browser-Umgebung. Nachfolgend Patterns für die gängigsten Stacks.
Reines HTML
Platzieren Sie dies an einer beliebigen Stelle unterhalb des Zenovay-Tracker-<script>-Tags:
<button class="cta">Buy now</button>
<script>
// Wait for the tracker to load (it sets window.zenovay on init).
function applyVariant() {
if (!window.zenovay) { setTimeout(applyVariant, 50); return; }
var variant = window.zenovay('experiment', 'checkout-cta-color', ['control', 'green', 'orange']);
var cta = document.querySelector('.cta');
if (variant === 'green') cta.style.background = '#22c55e';
if (variant === 'orange') cta.style.background = '#f97316';
}
applyVariant();
</script>
React / Next.js (Client Component)
Markieren Sie die Komponente im Next.js App Router mit 'use client' und rufen Sie die Funktion in useEffect auf, damit die Zuweisung nach der Hydration erfolgt:
'use client';
import { useEffect, useState } from 'react';
export default function CheckoutCTA() {
const [variant, setVariant] = useState('control');
useEffect(() => {
if (typeof window === 'undefined' || !window.zenovay) return;
const v = window.zenovay('experiment', 'checkout-cta-color', ['control', 'green', 'orange']);
setVariant(v);
}, []);
const bg = variant === 'green' ? '#22c55e' : variant === 'orange' ? '#f97316' : undefined;
return <button className="cta" style={{ background: bg }}>Buy now</button>;
}
Um ein kurzes Aufblitzen der Kontrollvariante beim ersten Paint zu vermeiden, rendern Sie standardmäßig die Kontrolle und lassen Sie useEffect nach dem Mount auf die Treatment-Variante umschalten. Die Exposure wird beim ersten Aufruf von window.zenovay('experiment', …) protokolliert.
Vue / Nuxt
Rufen Sie in einer <script setup>-Komponente die Funktion aus onMounted auf:
<script setup>
import { ref, onMounted } from 'vue';
const variant = ref('control');
onMounted(() => {
if (!window.zenovay) return;
variant.value = window.zenovay('experiment', 'checkout-cta-color', ['control', 'green', 'orange']);
});
</script>
<template>
<button
class="cta"
:style="{ background: variant === 'green' ? '#22c55e' : variant === 'orange' ? '#f97316' : null }"
>
Buy now
</button>
</template>
Server-Side Rendering (Next.js, Remix, Nuxt SSR)
Die Variantenzuweisung ist Fenster-scoped — der Tracker existiert nur im Browser, sodass jeder serverseitige Aufruf undefined zurückgibt und beim ersten SSR-Durchlauf die Kontrollvariante gerendert wird. Anschließend sieht der Besucher kurz die Treatment-Variante, sobald das clientseitige useEffect ausgeführt wird.
Zwei praktische Patterns:
- Das kurze Aufblitzen akzeptieren. Für visuelle Änderungen (Farbe, Text) ist das normalerweise unproblematisch — bei üblicher Hydration-Geschwindigkeit ist der Wechsel unsichtbar.
- Die Treatment-Variante nur clientseitig rendern. Verpacken Sie den Experimentalblock in eine Client-Only-Boundary, sodass SSR nichts ausgibt und die Treatment-Variante erst nach der Hydration einmalig gerendert wird. Das unterdrückt das Aufblitzen, kann aber Layout-Verschiebungen verursachen.
'use client';
import dynamic from 'next/dynamic';
const ExperimentalCTA = dynamic(() => import('./CheckoutCTA'), { ssr: false });
export default function Page() {
return <ExperimentalCTA />;
}
In V1 gibt es keinen Edge- oder serverseitigen Zuweisungs-Endpoint.
Google Tag Manager (GTM)
Verpacken Sie den Aufruf in einem Custom-HTML-Tag, der nach Ihrem Zenovay-Tracker-Tag feuert, und pushen Sie die Variante in den dataLayer, damit andere GTM-Tags sie lesen können:
<script>
(function () {
if (!window.zenovay) return;
var variant = window.zenovay('experiment', 'checkout-cta-color', ['control', 'green', 'orange']);
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ event: 'zenovay_experiment', experiment_id: 'checkout-cta-color', variant: variant });
})();
</script>
Andere GTM-Tags (z. B. ein CSS-Rewrite-Tag) können dann auf das Event zenovay_experiment triggern und über {{ DLV - variant }} die visuelle Änderung anwenden.
Wie die Signifikanz berechnet wird
Conversion-Raten pro Variante werden serverseitig aggregiert. Das Dashboard zeigt für jede Treatment-Variante gegenüber der Kontrolle einen zweiseitigen Zwei-Stichproben-z-Test mit Bonferroni-Korrektur über alle Vergleiche im Experiment. Ein "Winner"-Badge erscheint, sobald alle der folgenden Bedingungen erfüllt sind:
- Bonferroni-korrigierter p-Wert < 0,05
- Beide Varianten haben mindestens die konfigurierte Mindeststichprobengröße erreicht (Standard: 100 Besucher pro Variante)
- Der Lift der Treatment-Variante gegenüber der Kontrolle ist positiv
Das ist ein frequentistischer Test mit fester Stichprobengröße. Es ist kein sequentieller Test — ein vorzeitiges Hineinschauen in die Ergebnisse vor Ende des Experiments erhöht den Fehler 1. Art.
Das Dashboard lesen
Das Experiments-Dashboard zeigt pro Variante eine einzeilige Zusammenfassung:
| Spalte | Was sie zeigt |
|---|---|
| Visitors | Eindeutige Besucher, die seit dem Start dieser Variante zugewiesen wurden |
| Conversions | Wie viele dieser Besucher das Zielereignis ausgelöst haben |
| Conversion rate | conversions / visitors pro Variante |
| Lift vs control | Relative Veränderung der Conversion-Rate gegenüber der Kontrollvariante |
| p-value | Bonferroni-korrigiert, gegenüber der Kontrolle (Kontrollzeile zeigt —) |
| Status | running, winner oder not significant yet |
Das Diagramm darunter zeigt die kumulierte Conversion-Rate pro Variante über die Zeit, sodass Sie erkennen können, wann sich die Varianten auseinanderzuentwickeln begannen (oder ob sie weiterhin parallel verlaufen).
Empfohlener Workflow
- Eine Änderung pro Experiment. Wenn Sie gleichzeitig CTA-Farbe und Überschrift ändern, lässt sich nicht mehr feststellen, was die Kennzahl bewegt hat. Halten Sie alles andere konstant.
- Das Ziel vor dem Launch festlegen. Das Zielereignis während eines laufenden Experiments hinzuzufügen oder zu wechseln, entwertet alle bis dahin gesammelten Daten — Zenovay warnt Sie und verlangt einen Neustart.
- Schätzen Sie die benötigte Stichprobe. Ein Lift von 5 % gegenüber einer Baseline-Conversion-Rate von 2 % benötigt typischerweise rund 30.000 Besucher pro Variante, um Signifikanz zu erreichen. Verwenden Sie vor dem Launch einen Stichprobengrößen-Rechner und starten Sie nur Experimente, die Ihr Traffic tatsächlich abschließen kann.
- Nicht nach Gewinnern spähen. Der frequentistische Test ist nur dann valide, wenn Sie eine Stoppregel im Voraus festlegen. Tägliches Hineinschauen ins Dashboard und sofortiges Beenden, sobald eine Treatment-Variante p < 0,05 überschreitet, erhöht Ihre Fehlerrate 1. Art erheblich.
- Archivieren — nicht löschen. Sobald ein Experiment endet, archivieren Sie es über das Menü. Beim Löschen werden auch die historischen Zuweisungen entfernt, die nachgelagerte Funnel- oder Revenue-Reports speisen.
Limits pro Plan
| Plan | Max. parallele Experimente | Max. Varianten pro Experiment |
|---|---|---|
| Free | — (nicht verfügbar) | — |
| Pro | 5 | 4 |
| Scale | 25 | 10 |
| Enterprise | unbegrenzt | unbegrenzt |
Datenschutz & Compliance
A/B-Experimente sind so gebaut, dass sie die Datenschutzhaltung von Zenovay respektieren:
- Cookieless-Modus: Die Variantenzuweisung ist Fenster-scoped (nur im Speicher). Es werden keine neuen Cookies oder localStorage-Einträge erstellt.
- Daten zur Variantenzuweisung sind in Ihrem kostenlosen Datenexport nach DSGVO-Artikel 20 enthalten.
- Die Kontolöschung kaskadiert durch Experimente, Varianten und Zuweisungen.
- Die Aufbewahrung folgt Ihrer Plan-Stufe (Free 365 Tage, Pro 730 Tage, Scale 1.460 Tage).
Was in V1 nicht enthalten ist
- Multi-Armed-Bandits, Thompson-Sampling, Bayesianische Credible Intervals — nur frequentistisch.
- Sequentielle / always-valid p-Werte — nur feste Stichprobengröße.
- Serverseitige / Edge-Varianten-Entscheidung — die Zuweisung erfolgt clientseitig.
- Targeting-Regeln (Geo, Gerät, nur wiederkehrende Besucher) — nur zufällige Zuweisung.
- Sich gegenseitig ausschließende Experimentgruppen.
Fehlerbehebung
Meine Varianten liefern immer null oder immer control zurück
Wahrscheinlichste Ursachen, nach Häufigkeit:
- Der Tracker war noch nicht geladen, als Sie
window.zenovay(...)aufgerufen haben. Die Funktionwindow.zenovaywird vom Loader-Stub synchron definiert, ist aber erst sinnvoll nutzbar, sobald das Tracker-Bundle vollständig geladen ist. Frühere Aufrufe gebenundefinedzurück. Verpacken Sie den Aufruf in eine kleine Warte-Schleife (siehe HTML-Beispiel) oder rufen Sie ihn aus einem Framework-Lifecycle-Hook auf, der erst nach dem Mount läuft. - Das Experiment hat nicht den Status
running. Der Tracker weist Varianten nur für Experimente mit Statusrunningzu. Drafts oder pausierte Experimente liefern die Kontrolle zurück. Öffnen Sie den Experiments-Tab und prüfen Sie das Status-Badge. - Sie haben eine andere Variantenliste übergeben als die im Dashboard konfigurierte. Die Varianten, die Sie im
window.zenovay(...)-Aufruf angeben, müssen exakt mit den Slugs aus dem Dashboard übereinstimmen (auch die Reihenfolge). Ein Tippfehler wie['control', 'gren']schickt jeden Besucher in die Kontrolle. - Cookieless-Modus + Schließen des Tabs. Lädt Ihre Site den Tracker mit
data-cookieless="true", ist die Besucher-ID Fenster-scoped — Tab schließen und neu öffnen zählt als neuer Besucher und kann zu einer anderen Variante führen. Das ist erwartetes Verhalten und statistisch valide.
Nach dem Launch werden keine Exposures erfasst
- Der Tracker ist auf der Seite, auf der Sie
experiment()aufrufen, nicht geladen. Prüfen Sie in DevTools, obwindow.zenovayauf der betreffenden Seite definiert ist. Ist esundefined, ist das Zenovay-Tracker-<script>nicht eingebunden oder noch nicht ausgeführt. - Das Experiment ist noch im Status
draft. Klicken Sie im Experiment-Detailbildschirm auf Launch — Draft-Experimente protokollieren keine Exposures. - Ein Ad-Blocker blockiert die Anfrage. Selten, aber möglich bei nicht-Firstparty-Tracking-Domains. Bei stark Ad-Blocker-affinem Publikum stellen Sie auf First-Party-Tracking (eigene Subdomain) um.
Die Conversion-Attribution zeigt 0, obwohl Exposures vorhanden sind
- Goal-ID-Konflikt. Das beim Erstellen des Experiments gewählte Zielereignis muss exakt dem Goal entsprechen, das Ihr Code (oder das Auto-Tracking von Zenovay) tatsächlich auslöst. Prüfen Sie den Goal-Slug im Dashboard und verifizieren Sie über den Live-Feed, dass das Goal feuert.
- Die Conversion erfolgt vor der Zuweisung. Sehr selten, aber möglich, wenn Ihr CTA das Goal bereits beim initialen Pageload auslöst und Sie
experiment()erst nach längerer Verzögerung aufrufen. Rufen Sieexperiment()so früh wie möglich auf (direkt nach dem Tracker-Stub-Script). - Der Besucher hat in einem anderen Browser / Gerät / Tab konvertiert als beim Assignment. Im Cookieless-Modus bleibt die Zuweisung nicht über Tabs hinweg erhalten — und auch die Conversion-Verknüpfung nicht. Der Besucher zählt als zwei separate Teilnehmer.
Sample-Ratio-Mismatch-Warnung verschwindet nicht
Sample-Ratio-Mismatch (SRM) bedeutet, dass die tatsächliche Besucheraufteilung nicht der konfigurierten Aufteilung entspricht — bei einem 50/50-Experiment ist 60/40 ein Warnsignal, dass etwas die Zuweisung verzerrt.
- Eine Variante wirft einen Fehler. Wirft Ihr Treatment-JavaScript eine Ausnahme, bevor der Besucher den Conversion-Pfad erreicht, werden ihm weniger Conversions zugeschrieben — die Exposure-Zahl sollte aber weiterhin passen. Prüfen Sie Ihren Error-Tracker auf einen Anstieg parallel zum Experiment-Launch.
- Bot-Traffic in einem Bucket. Bots, die sich eine Besucher-ID-Familie teilen (z. B. Crawler-Farmen mit nicht-zufälligen IPs), können überproportional auf einer Variante landen. Der B2B/Bot-Filter im Visitors-Tab hilft beim Quantifizieren.
- Sie haben gelauncht, die Variantenliste geändert und erneut gelauncht. Das nachträgliche Ändern der Reihenfolge in Ihrem clientseitigen Aufruf bringt den deterministischen Hash durcheinander. Starten Sie immer ein neues Experiment, wenn Sie die Variantenliste ändern.
Hält SRM über 24 Stunden bei gesundem Traffic an, pausieren Sie das Experiment und eröffnen Sie ein Support-Ticket.
FAQ
Wie führe ich mit Zenovay einen A/B-Test auf meiner Website durch?
Drei Schritte: Definieren Sie ein Ziel, auf das Sie optimieren möchten, legen Sie im Experiments-Tab ein Experiment mit 2+ Varianten an, und fügen Sie eine Zeile JavaScript auf der Seite ein, auf der die Variante greifen soll. Der Zenovay-Tracker übernimmt zufällige Zuweisung, Exposure-Logging und Conversion-Attribution. Der vollständige Ablauf findet sich im Abschnitt "Ein Experiment einrichten" oben.
Wie füge ich den Tracking-Code für A/B-Varianten ein?
Der Zenovay-Tracker ist bereits auf Ihrer Seite, wenn Sie Analytics installiert haben. Sie fügen lediglich eine zusätzliche Zeile an der Stelle ein, an der die Variante gerendert werden soll:
const variant = window.zenovay('experiment', 'your-experiment-id', ['control', 'treatment-a', 'treatment-b']);
Verzweigen Sie dann Styling, Texte oder Komponente anhand des zurückgegebenen Werts. Kein separates Varianten-SDK erforderlich.
Wie entscheidet Zenovay, welche Variante ein Besucher sieht?
Die Variantenzuweisung ist ein deterministischer Hash der Besucher-ID modulo der konfigurierten Traffic-Split-Gewichte. Dieselbe Besucher-ID hasht für ein gegebenes Experiment immer auf dieselbe Variante, sodass die Erfahrung über Pageloads hinweg konsistent bleibt (und bei aktivierten Cookies auch sessionsübergreifend).
Warum ist meine Variantenzuweisung leer oder null?
Häufigste Ursache: Sie rufen window.zenovay('experiment', …) auf, bevor der Tracker fertig geladen ist. Die Funktion ist sofort definiert, gibt aber erst nach dem Laden des Bundles eine echte Variante zurück. Verpacken Sie den Aufruf in einen Framework-Lifecycle-Hook (useEffect, onMounted) oder einen kleinen setTimeout-Poll. Die vollständige Liste finden Sie im Abschnitt zur Fehlerbehebung.
Wie prüfe ich statistische Signifikanz?
Öffnen Sie die Detailseite des Experiments. Jede Treatment-Zeile zeigt einen Bonferroni-korrigierten p-Wert im Vergleich zur Kontrolle. Ein grünes Winner-Badge erscheint, wenn der p-Wert unter 0,05 liegt, beide Varianten mindestens 100 Besucher haben und der Lift des Treatments gegenüber der Kontrolle positiv ist.
Wann sollte ich mein Experiment beenden?
Legen Sie eine Stoppregel vor dem Launch fest: entweder ein festes Besucherbudget (z. B. "Ende bei 30.000 Besuchern pro Variante") oder ein festes Enddatum. Beenden Sie das Experiment, wenn diese Regel erfüllt ist — unabhängig davon, was das Dashboard gerade zeigt. Vorzeitig zu beenden, weil ein Treatment "wie ein Gewinner aussieht", bläht die Falsch-positiv-Rate erheblich auf.
Was passiert, wenn ich mein Plan-Limit erreiche (z. B. 5/5 auf Pro)?
Sie können kein neues Experiment starten, bis Sie ein bestehendes archivieren. Draft-Experimente zählen nicht zum Limit — nur Experimente im Status running. Archivierte Experimente behalten ihre historischen Zuweisungen und Conversion-Daten; sie zählen lediglich nicht mehr zum Concurrency-Limit.
Wie klone ich ein Experiment oder lasse es mit anderem Text erneut laufen?
Öffnen Sie das Original-Experiment, klicken Sie auf das Menü-Icon (⋯) und wählen Sie Clone. Das neue Experiment übernimmt Ziel, Varianten und Traffic-Split — passen Sie alles Nötige an und klicken Sie auf Launch. Das geklonte Experiment erhält eine eigene ID, die Besucher werden unabhängig vom Original neu zugewiesen.
Kann ich ein Experiment nach dem Launch bearbeiten?
Nur Experimente im Status draft sind vollständig editierbar. Nach Launch ist das Experiment gesperrt: Sie können es pausieren, archivieren oder beenden, aber Varianten, Traffic-Split oder Zielereignis nicht mehr ohne Invalidierung des Laufs ändern. Müssen Sie etwas anpassen, beenden Sie das Experiment und klonen Sie es.
Wie werden Conversions einer Variante zugeordnet?
Die Attribution erfolgt automatisch. Wenn ein Besucher das Zielereignis auslöst (über Zenovays Auto-Tracking oder Ihren window.zenovay('event', 'goal-slug')-Aufruf), schaut Zenovay die für laufende Experimente zugewiesene Variante nach und schreibt die Conversion dort gut. Manueller Attribution-Code ist nicht nötig.
Was ist die Bonferroni-Korrektur und warum verwendet sie mein Pro-Plan?
Beim naiven Vergleich mehrerer Treatments gegen eine Kontrolle erhöht ein einheitlicher Schwellwert von p < 0,05 pro Vergleich die Wahrscheinlichkeit eines Falsch-positiven Ergebnisses (der "Look-Elsewhere"-Effekt). Die Bonferroni-Korrektur teilt den Schwellwert durch die Anzahl der Vergleiche — bei einem Experiment mit drei Treatments gegen eine Kontrolle muss jeder Vergleich p < 0,05 / 3 ≈ 0,017 erreichen. Jeder Zenovay-Plan, der A/B-Tests unterstützt, wendet Bonferroni an; es ist keine Pro-exklusive Funktion, sondern unsere generelle Berichtsmethodik für alle bezahlten Tiers.
Was ist SRM und wann muss ich mir Sorgen machen?
Sample-Ratio-Mismatch (SRM) ist die Differenz zwischen Ihrer konfigurierten Traffic-Aufteilung und der tatsächlich beobachteten Besucheraufteilung. Bei einem 50/50-Experiment ist 50,3/49,7 in Ordnung, aber 60/40 bei gesunden Stichproben signalisiert einen Deployment- oder Zuweisungsfehler. Sorgen machen Sie sich, wenn die Schiefe nach den ersten ~10.000 Besuchern mehr als ~5 Prozentpunkte vom Zielwert abweicht. Das Dashboard signalisiert dies automatisch.
Cookieless-Modus + A/B-Tests — funktioniert das?
Ja. Der deterministische Hash nutzt die Besucher-ID, die der Tracker konfiguriert ist zu verwenden — eine stabile Cookie-ID bei aktivierten Cookies oder eine fensterbasierte In-Memory-ID im Cookieless-Modus. Das statistische Modell bleibt unverändert; der einzige praktische Unterschied ist, dass ein Cookieless-Besucher, der den Tab schließt und neu öffnet, jedes Mal unabhängig zugewiesen wird. Das ist normal und entwertet das Experiment nicht.
Nächste Schritte
- Ziele – Definieren Sie die Ereignisse, die Ihr Experiment messen soll
- Conversion-Funnels – Verfolgen Sie mehrstufige Conversion-Pfade
- Conversion Incidents – Werden Sie benachrichtigt, wenn das Zielereignis eines Experiments einbricht