Shopware 6 Plugin — A/B-Tests mit Sticky-Bucketing pro Besucher, Funnel-Tracking und statistischer Auswertung.
RcAbTesting teilt Besucher deterministisch und geräteübergreifend stabil auf Varianten eines Experiments auf, verfolgt ihren Weg durch den Funnel (Seitenaufruf bis Bestellung) und wertet das Ergebnis statistisch aus (Conversion-Rate, Lift, z-Test, Konfidenzintervall, Signifikanz, Gewinner-Empfehlung). Experimente werden im Administrationsmodul unter Marketing angelegt, konfiguriert, gestartet und ausgewertet; alternativ per CLI.
- Twig-Variant — Storefront-Markup-Switch (z. B. RcCheckout vs. RcCheckoutEnhancer)
- Theme — Theme-Override pro Request
- Feature-Flag — boolescher Config-Override über die Varianten-Config
- Zwei Seiten vergleichen (CMS-Seite) — No-Code: pro Variante eine Erlebniswelt (CMS-Seite) per Dropdown; die zugewiesene Seite wird auf Navigation-/Landing-/Produktseiten automatisch ausgeliefert (Control = die aktuell live ausgelieferte Seite)
- Plugin-Verhalten schalten (Frontend-Schalter) — No-Code: pro Variante wird ein registrierter, frontend-wirksamer Schalter auf einen Wert gesetzt (Dropdown statt JSON). Eigene Plugins/Templates lesen den aktiven Wert über die Twig-Funktion
ab_switch('key')bzw. denFrontendSwitchResolver; Fremd-Plugins über einen getaggtenFrontendSwitchAdapter. Beispiel-Schalter: Checkout-Darstellung, Versandkostenfrei-Hinweis
page.viewed,product.added_to_cart,product.removed_from_cartcheckout.started,checkout.confirm_viewed,checkout.order_placedcart.abandoned(heuristisch über Scheduled-Task)customer.registered,customer.logged_incustom(Storefront-JS-API:window.RcAbTesting.track(event, value))
- Shopware 6.7
- PHP 8.2+
php bin/console plugin:refresh
php bin/console plugin:install --activate RcAbTesting
php bin/console cache:clearIm Admin unter Einstellungen → System → Plugins → RcAbTesting.
| Feld | Beschreibung | Standard |
|---|---|---|
consentCookieName |
Name des Consent-Cookies eines Consent-Managers (z. B. ComanConsentManager). Ist er gesetzt, gilt Opt-in. | leer |
consentGrantedValue |
Cookie-Wert, der als erteilte Einwilligung zählt. | leer |
cartAbandonmentMinutes |
Frist in Minuten, nach der ein begonnener Checkout ohne Bestellung als Warenkorb-Abbruch gilt. | 30 |
dataRetentionDays |
Aufbewahrungsfrist in Tagen, danach werden Daten anonymisiert. 0 schaltet die automatische Anonymisierung ab. |
90 |
Ohne konfigurierten Consent-Cookie gilt ein Opt-out-Fallback (PII-freie Zufalls-ID); ohne Einwilligung wird nichts persistiert.
- Der Besucher-Cookie
rc_ab_visitor_idbraucht Consent — ohne Einwilligung keine Persistenz. - Anonymisierung nach Ablauf der Aufbewahrungsfrist über den täglichen
DataRetentionTaskoder manuell perbin/console rc:ab:cleanup --older-than-days=N:visitor_idwird zu einem deterministischen SHA-256-Hash,customer_identfernt. - Löschung eines Kunden propagiert über
ON DELETE SET NULLnachrc_ab_assignmentundrc_ab_event.
A/B-Tests berühren mehrere Plugins, die auf denselben Storefront-Bereichen rendern. Die folgenden Interaktions-Verträge gelten:
- Confirm-Page (mit RcOrderAttachment, RcCheckoutEnhancer): RcAbTesting rendert nicht selbst in die Confirm-Page, sondern entscheidet nur die Variante. Die Block-Hierarchie der anderen Plugins bleibt unberührt — additive UX-Erweiterungen werden nicht verdrängt.
- Twig-Variant-Konflikte (RcCheckout ↔ RcCheckoutEnhancer): Konkurrierende Renderer werden nicht vom AB-Plugin allein aufgelöst. Die Bridge
ActiveVariantQuery(public API) erlaubt den Ziel-Plugins, ihren Subscriber per Guard zu konditionieren. Prämisse: die Ziel-Subscriber sind additive Erweiterungen, keine konkurrierenden Vollrenderer. - Listing-Layout (RcMinimalisticProductList): Feature-Flag-Varianten schalten boolesche Config-Werte, sie überschreiben keine Template-Overrides.
- Buy-Widget (RcDynamicPrice, RcColorPicker, RcCustomFields): Test-Varianten dürfen das
data-rc-id-controller-Attribut des Plugin-Interaktions-Protokolls nicht überschreiben.
Gleichzeitige Aktivität: Pro Funnel-Schritt sollte nur ein Experiment laufen (Multi-Test-Interferenz verwässert die Aussagekraft). Die Storefront-Integration ist read-only gegenüber fremden Plugins.
php bin/console rc:ab:list # Experimente auflisten (--status filtert)
php bin/console rc:ab:stats <key> # Auswertung (Rate, CI, Lift, p-Value, Signifikanz)
php bin/console rc:ab:end <key> [--winner=] # Experiment beenden
php bin/console rc:ab:cleanup --older-than-days=N # DSGVO-Anonymisierungphp bin/console plugin:refresh
php bin/console plugin:update RcAbTesting
php bin/console cache:clearcomposer install
composer quality # cs-check + phpstan + testQuality-Gates: PHP CS Fixer (PSR-12), PHPStan Level 8, PHPUnit, composer audit — alle grün.
MIT.
Entwickelt von Ruhrcoder