Checkout-Funnel
Warenkorb, Checkout und Abschluss pro Besucher, abgeleitet aus der Seiten-URL und den Warenkorb-Requests des Shops. Standardmäßig an; ein Shopify-Shop ergänzt ein Pixel für seinen Checkout.
Der Checkout-Funnel zählt, wie weit Besucher durch deinen Shop kommen. fastmon markiert jeden Pageview, dessen URL eine Warenkorb-, Checkout- oder Abschlussseite ist, registriert die Warenkorb-Requests der Shopseiten und zählt pro Besucher, welche Stufen er erreicht hat.
Nur Fakten
Jede Zahl zählt etwas Beobachtetes: Ein Besucher hat eine Warenkorbseite geladen, ein Besucher hat eine Danke-Seite geladen. Eine Kennzahl „abgebrochen" gibt es nicht, denn sie wäre eine Behauptung aus einer fehlenden Beobachtung. Der Besucher kann auf einem anderen Gerät gekauft haben, nach der täglichen stitch-Rotation, oder auf einer Danke-Seite ohne Tracker.
Wie ein Pageview seine Stufe bekommt
Beim Ingest gleicht der Collector die bereinigte Seiten-URL (Origin und Pfad, plus freigegebene Query-Keys) mit einer Liste von Mustern pro Stufe ab und stempelt cart, checkout oder success auf den Pageview. Pageviews ohne Treffer behalten eine leere Stufe. Der Tracker schickt kein zusätzliches Feld.
Die eingebauten Muster decken Shopware 5 und 6, WooCommerce (englische und deutsche Slugs), Magento 2, PrestaShop, JTL Shop 5 und Shopify ab. Jedes Muster toleriert ein Sprach- oder Shop-Präfix, /de/warenkorb und /fr/cart zählen also wie ihre Root-Varianten.
Die Prüfreihenfolge ist fest: success, dann cart, dann checkout. Abschlussseiten liegen oft unter dem Checkout-Pfad (/checkout/finish), und Shopware und Magento legen den Warenkorb ebenfalls dorthin.
Die Markierung wird mit dem Pageview gespeichert und nie neu berechnet. Änderst du die Muster, wirkt das auf Pageviews ab diesem Moment.
Eingebaute Muster
Die Muster folgen der Mustersyntax weiter unten.
| Stufe | Eingebaute Muster | Shop-Systeme |
|---|---|---|
| cart | */checkout/cart*, */cart, */cart/*, */warenkorb, */warenkorb/*, */warenkorb.* | Shopware, Magento 2, WooCommerce, Shopify, PrestaShop, JTL 5 |
| checkout | */checkout, */checkout/*, */kasse, */kasse/*, */bestellvorgang, */bestellvorgang/*, */bestellvorgang.*, */bestellung, */bestellung/*, /order | Shopware, Magento 2, WooCommerce, JTL 5, PrestaShop, deutsche Eigenbau-Shops |
| success | */checkout/finish*, */checkout/onepage/success*, */order-received/*, */order-confirmation, */order-confirmation/*, */bestellabschluss, */bestellabschluss/*, */bestellabschluss.*, */checkout/success*, */thankyou, */thankyou/*, */thank-you, */thank-you/*, */danke, */danke/*, */danke.* | Shopware, Magento 2, WooCommerce, PrestaShop, JTL 5, generische Danke-Seiten |
Die Muster enden an Wortgrenzen: */cart trifft die Warenkorbseite, aber nicht /cartoons, und */thank-you trifft nicht /thank-you-for-subscribing. /order ist exakt und nur auf Root-Ebene gemeint, sonst würde es Shopwares /account/order treffen.
Der Schalter läuft auf jeder Site, Shop oder nicht. Auf einer Site mit Pfaden wie /docs/checkout/setup bekommen diese Pageviews eine Stufe; Abhilfe schaffen eigene Muster oder das Abschalten. OXID liest seinen Controller cl, Shopify die Checkout-Events.
Mustersyntax
Ein Muster beschreibt den ganzen Pfad, Groß- und Kleinschreibung spielt keine Rolle. Checkout-Pfade und URL-Regeln verstehen einen Teil der Pathname-Syntax von URLPattern:
| Teil | Trifft | Beispiel |
|---|---|---|
* | Beliebige Zeichen, auch / | */checkout/* |
:name | Genau ein Pfadsegment | /:lang/:slug |
(de|en) | Eines der aufgezählten Wörter | /:lang(de|en)/cart |
{...}? | Den Inhalt oder nichts | /cart{/}? |
| alles andere | Sich selbst, auch ? und = | *?cl=thankyou* |
Ein Muster ohne wörtliches ? prüft nur den Pfad, /checkout trifft also auch /checkout?step=2. Ein Muster mit ? prüft Pfad und Query zusammen. Pro Muster darf nur ein Teil auf mehrere Arten passen, etwa ein * vor dem Ende oder ein (...). Ein Muster, das eine Regel verletzt, zum Beispiel ein eingefügter regulärer Ausdruck, wird beim Speichern abgelehnt.
Warenkorb-Interaktionen
Die URL-Stufen sehen Seiten. Ein Besucher, der ein Produkt aus einer Liste oder einem Offcanvas-Warenkorb hinzufügt, lädt nie eine Warenkorbseite. Deshalb registriert der Funnel zusätzlich Warenkorb-Interaktionen: ein First-Party-POST an einen bekannten Warenkorb-Endpunkt, gelesen aus der Fetch/XHR-Telemetrie, die der Tracker ohnehin erfasst. Wo der Endpunkt es verrät, trägt die Interaktion eine Art.
| Art | Endpunkte (POST) | Shop-Systeme |
|---|---|---|
| add | /checkout/line-item/add, /checkout/ajaxaddarticlecart, /checkout/cart/add/*, */cart/add, */cart/add.js, /wp-json/wc/store/v1/cart/add-item | Shopware 6, Shopware 5, Magento 2, Shopify, WooCommerce (Store API) |
| change | /checkout/line-item/update, /checkout/line-item/change-quantity/*, */cart/change, */cart/change.js, */cart/update, */cart/update.js, /wp-json/wc/store/v1/cart/update-item | Shopware 6, Shopify, WooCommerce (Store API) |
| remove | /checkout/line-item/delete/*, /wp-json/wc/store/v1/cart/remove-item | Shopware 6, WooCommerce (Store API) |
| other | /cart | PrestaShop, Shopify Hydrogen |
Bei Shopify ist Menge 0 ein Entfernen und kommt als change an. Die Art einer other-Zeile steht nur im Request-Body, den fastmon nie liest.
Warenkorb-Interaktionen brauchen collect_fetch_xhr (im Preset Standard an). Ist es aus, funktionieren die URL-Stufen weiter, und die Interaktionszahlen bleiben leer. Hinzufügen per klassischem Formular-POST (OXID, WooCommerce-Produktseiten) ist für Fetch/XHR unsichtbar. Die Endpunktliste wird serverseitig gepflegt und wächst ohne Tracker-Release.
Warenkorb-Interaktionen stehen neben den Funnel-Schritten, nie als einer davon: Ihre Abdeckung hängt vom Shop-System und von der Fetch/XHR-Einstellung ab.
Stage-Events und Sampling
Jeder Pageview mit einer Stufe schreibt zusätzlich ein Stage-Event: view_cart, begin_checkout oder order_placed, mit source collector. Das Shopify-Pixel nutzt dieselben Namen, nur source unterscheidet die beiden. Stage-Events brauchen Checkout-Tracking, einen Shop und einen gespeicherten stitch.
Sie entstehen für jeden Besucher, auch für die, die das Sampling verwirft. Funnel-Schritte, Kohortengrößen, Stufen-Verlauf und Käufe lesen sie und bleiben deshalb bei jeder Rate exakt. visitors_total, die Conversion-Rate und die Warenkorb-Interaktionen kommen aus Pageviews und sind auf einem gesampelten Shop hochgerechnet.
Ein Filter, den die Events nicht beantworten können, etwa eine URL oder eine Kampagne, liest stattdessen den gewichteten Pageview-Funnel. meta.sampling.estimated_metrics nennt die hochgerechneten Felder.
Was die Zahlen bedeuten
- Conversion-Rate: Besucher mit Abschluss geteilt durch alle Besucher im Zeitraum, die Zahl, die auch GA4 und Shopify melden. Vergleichbar mit dem üblichen Shop-Benchmark von 1 bis 3 %. Der Nenner ist
visitors_total, und jeder Punkt der Zeitreihe trägt eigenevisitors. reach_ratepro Schritt: der Anteil am ersten Schritt. Er kann über 100 % liegen, weil ein Besucher einen späteren Schritt erreichen kann, ohne dass der frühere beobachtet wurde (Deep-Link, Offcanvas-Warenkorb, Express-Checkout).- Besucher pro Schritt. Jeder Besucher zählt einmal pro Schritt, den er im Zeitraum erreicht hat, gruppiert über die Besucher-Identität (standardmäßig
stitch, siehe Besucher und Sessions). Pro Besucher wird nichts gespeichert, die Gruppierung passiert zur Abfragezeit. - Einsortiert nach Einstieg. In der Zeitreihe landet ein Besucher im Bucket seiner ersten Funnel-Zeile, nicht dem seines Abschlusses. Die Bucket-Besucher addieren sich nicht zur Gesamtzahl. Ein Tag ist endgültig, sobald der Tag, das 24-Stunden-
stitch-Fenster und die Ingest-Verzögerung vorbei sind. - Warenkorb-Rate (
cart_interaction_rate): Besucher mit Warenkorb-Interaktion geteilt durch alle Besucher, üblich sind 5 bis 6 %. Lies sie als Untergrenze, wo die Warenkorb-Calls des Shops für Fetch/XHR unsichtbar sind. - Besucher mit fehlgeschlagenen Warenkorb-Calls (
cart_interaction_error_visitors): gegencart_interactionsgelesen der Anteil der Käufer, die auf einen kaputten Warenkorb gestoßen sind. Die Zahl bewegt sich vor der Conversion-Rate. - Dauer bis zum Kauf (
time_to_success_seconds): Sekunden vom Funnel-Einstieg bis zum ersten Abschluss, als p50, p75 und p90. Entfernt sich der p90 vom p50, steht der Checkout im Weg. - Abschluss heißt Seite, nicht Zahlung (außerhalb von Shopify). Ein Shop, dessen Danke-Seite den Tracker nicht lädt, zeigt Checkouts ohne Abschlüsse. Das ist der häufigste Einrichtungsfehler.
- Eine Rate, die nicht gemessen werden konnte, fehlt. Läuft die Besucherzählung in einen Timeout, behält die Antwort ihre Schritte und lässt
visitors_totalundconversion_rateweg, statt 0 % zu melden.
Filter, die Funnel-Seiten auswählen (checkout_stage, die Warenkorb-Schwellwerte), verengen die Schritte, aber nicht den Nenner. Zielgruppenfilter (Site, Land, Gerät, Kampagne) verengen beide Hälften.
Shopify-Checkout-Events
Shopify betreibt den Checkout auf eigener Infrastruktur, wo dein Theme-Skript nie lädt; die URL-Stufen enden deshalb am Warenkorb. Ein Custom Pixel meldet drei Checkout-Schritte als Events: Checkout betreten, Zahlung abgeschickt, Bestellung aufgegeben. Einrichtung und Grenzen der Abdeckung stehen in Shopify-Checkout messen.
Was sich im Funnel ändert, sobald das Pixel läuft:
checkoutundsuccesskommen aus Events, ohne Pageview auf beiden. Besucher, die nur im Checkout auftauchen, zählen invisitors_totalmit.payment_submitted_visitorssteht als Fakt neben den Schritten: Besucher, die die Zahlung abgeschickt haben. Das Feld fehlt, statt 0 zu sein, wenn für den Zeitraum kein Event gelesen wurde.- Käufe sind eine Untergrenze. Shopify feuert sein Checkout-abgeschlossen-Event bei den meisten Shop-Pay- und Apple-Pay-Bestellungen nicht. Ein Besucher mit Zahlung und ohne Abschluss hat meistens über ein Wallet gekauft.
- Content-Blocker stoppen das Pixel. Die EasyPrivacy-Liste des EasyList-Projekts blockt den Sandbox-Pfad von Shopifys Custom Pixels, und uBlock Origin liefert diese Liste ab Werk mit. Diese Besucher liefern Storefront-Pageviews, aber keine Checkout-Events, die Conversion-Rate liest sich also zu niedrig. Siehe Content-Blocker.
- Warenkorb zu Checkout kann über 100 % liegen. Wer direkt in den Checkout springt, hat nie eine Warenkorbseite geladen.
- Events brauchen die Edge-Kennung (
store_stitch). Ein Filter, den die Event-Zeilen nicht beantworten können (URL, Seitentyp, Kampagne, ein Metrik-Schwellwert), lässt sie in dieser Abfrage außen vor. - Kohorten und Journeys bleiben bei Pageviews. Ein Käufer, dessen ganzer Lauf aus Checkout-Events besteht, steht im Success-Schritt und in keiner Kohorte, und der Sessions-Explorer zeigt den Shopify-Checkout nicht.
Die Events tragen den Schritt, Land, Gerät, Browser und Traffic-Klasse des Besuchers sowie die Edge-Kennung. Keine URL, keine Session-ID, kein Bestellwert und keine Web Vitals: Der Shopify-Checkout wird gezählt, nicht gemessen.
Wo es auftaucht
- Analytics-Dashboard. Bestellungen und Conversion sind zentrale Kennzahlen. Bestellungen zeichnet die Abschluss-Serie, mit Warenkorb und Checkout als Kontextlinien. Conversion zeichnet die Rate gegen die Vorperiode, und der Tooltip nennt die Besucher hinter jedem Punkt.
- Checkout-Karte. Die Schritte, die Warenkorb-Requests nach Art, die Besucher mit kaputtem Warenkorb und die Zeit bis zum Kauf.
- Käufer im Vergleich. Eine Karte ganz unten, standardmäßig zugeklappt, stellt Besucher mit gesehenem Kauf denen gegenüber, die ohne Kauf bis in den Checkout kamen. Sie lädt erst, wenn du sie öffnest.
- Stufen-Chart. Besucher pro Stufe über die Zeit, gezählt zum Zeitpunkt des Erreichens und samt der Checkout-Events eines Shopify-Pixels, mit für alle drei gleich verglichener Vorperiode.
- Filter
checkout_stage. Warenkorb, Checkout und Bestellt sind feste Optionen in der Filterleiste, den Chips und der Befehlspalette. Auf den Metrikseiten sind Web Vitals pro Funnel-Stufe eine gefilterte Abfrage. - Explorer. Gruppiere nach Checkout-Stufe, zeichne Warenkorb-Aktionen und fehlgeschlagene Warenkorb-Aktionen, und lies Stufe und Arten als Spalten. Ein Preset „Checkout" bringt Stufen über die Zeit und LCP pro Stufe.
- Besucher. Filtere die Liste auf alle, die eine Stufe erreicht oder eine Warenkorb-Interaktion ausgelöst haben. Auf der Journey trägt jeder Pageview einen Funnel-Chip in der Farbe seiner Stufe.
- Business Impact. Wo der Funnel Daten hat, zeigt die Seite dieselbe Conversion-Rate statt der aus LCP und INP geschätzten.
Die Checkout-Zahlen folgen den Filtern der Seite, außer Filtern, die eine Checkout-Stufe wählen. Sie erscheinen nur bei einem Shop: Eine Application mit unbekannter Plattform gilt als Shop, bis shop.active auf false steht.
Einstellungen
Schalter und Muster liegen an der Application unter Einstellungen → Shop & Seitentypen und auf der API unter shop.checkout (siehe Applications).
checkout_trackingist standardmäßig an und ist das Opt-out. Es umfasst URL-Stufen und Warenkorb-Interaktionen zusammen. Die Markierung wirkt nur vorwärts, Abschalten hinterlässt also eine Lücke, die sich später nicht füllen lässt.- Pfade pro Stufe. Jede Stufe erbt entweder die eingebauten Muster (der Default,
null) oder ersetzt sie komplett. Es gibt keine Mischung. Bis zu 10 Muster pro Stufe, jedes bis zu 200 Zeichen, druckbares ASCII in Kleinbuchstaben, in der Mustersyntax. Verbesserungen an der eingebauten Liste erreichen jede Site, die diese Stufe nicht überschrieben hat. - Voraussetzungen. Besucher pro Stufe zu zählen braucht eine gespeicherte Besucher-Identität (
store_stitchoder Sessions), sonst antworten die Funnel-Endpunkte mit422. Warenkorb-Interaktionen brauchen zusätzlichcollect_fetch_xhr.
Query-basierte Checkouts (OXID und andere)
OXID hält den gesamten Checkout auf index.php und nennt den Schritt im Query-Parameter cl. Bei einer OXID-Application behält die gespeicherte URL cl, etwa /index.php?cl=thankyou, und der Funnel braucht keine Einrichtung: basket ist der Warenkorb, user, payment und order der Checkout, thankyou der Abschluss. Eigene *?cl=*-Muster haben weiter Vorrang, und eine Stufe mit eigener Pfadliste, auch [], bekommt nichts vom Controller.
Ein generischer ?step=-Checkout braucht den Key in collect_query_values_for und eigene Muster wie *?step=payment*.
Datenschutz
Die Stufe ist ein Label mit vier Werten, berechnet aus der URL, die die Site ohnehin speichert; die Warenkorb-Interaktion ist ein Merker aus Fetch/XHR-Pfaden, die sie ohnehin speichert. Keines von beiden fügt dem Beacon ein Feld hinzu oder erhöht die Besucher-Entropie, und ein Stage-Event übernimmt nur, was die Pageview-Zeile ohnehin enthält. Der Funnel wird zur Abfragezeit berechnet, in jedem Erfassungsmodus, auch in anonymous.
Das Shopify-Pixel ist der einzige Teil, der eigene Events schickt. Was es trägt, steht unter Shopify-Checkout-Events. Siehe Privacy.
API
POST /organizations/{org_id}/analytics/funnels/checkout: die Schritte mit Besucherzahlen undreach_rate, dazuconversion_rateundvisitors_totalfür den Zeitraum, die Warenkorb-Interaktionen nach Art,time_to_success_secondsund die Zeitreihe, gebucketet nach Funnel-Einstieg. Siehe die Referenz (nur auf Englisch).POST /organizations/{org_id}/analytics/funnels/checkout/cohorts: Besucher mit beobachtetem Abschluss gegen die, die den Checkout ohne Abschluss erreicht haben. Pro Gruppe die Web Vitals über die ganze Journey und pro Stufe, dazu Anzahl, Dauer und Fehler der Warenkorb-Calls. Beide Gruppen brauchen eine gespeicherte Besucher-Identität, sonst antwortet der Endpunkt mit422. Siehe die Referenz.POST /organizations/{org_id}/analytics/funnels/checkout/stages: die Besucher, die jede Stufe erreicht haben, pro Stunde oder Tag, Checkout-Events eingeschlossen, für das Stufen-Chart.compare_toergänzt die Vorperiode und reicht nur so weit zurück, wie ein Shopify-Pixel installiert ist, ein früherer Vergleich zeigt die Installation also als Anstieg.events_readsagt, ob die Events gezählt wurden.POST /organizations/{org_id}/analytics/funnels/checkout/journeys: die Pageviews rund um den Treffer eines Besuchers auf einem Schritt, mit seinen Checkout-eventsnebenpages. Die Besucher kommen aus beiden Quellen, wer nur aus Events bekannt ist, kommt also mit leerempageszurück. Siehe die Referenz.POST /organizations/{org_id}/analytics/visitorsnimmtcontains_checkout_stageundcontains_cart_interactionals Filter, und ein Checkout-Event zählt als erreichte Stufe. Jede Zeile ist eine Pageview-Zeile, ein Besucher nur aus Events hat also keine. Das Besucher-Detail antwortet miteventsnebenpages, je mit Name, Stufe, Quelle und Zeit.POST /organizations/{org_id}/analytics/eventslistet die Checkout-Events selbst, neueste zuerst und cursor-paginiert, eine Testbestellung lässt sich also gegen die Shopify-Bestellliste halten.nameistview_cart,begin_checkout,add_payment_infooderorder_placed,sourceistcollectorodershopify_pixel. Eingrenzen kannst du mitnames, dem Site-Scope,filters.stitchfür einen Besucher und den Edge-Dimensionen.checkout_stageist auf jedem Analytics-Endpunkt mitfilterseine Filter- und Ausschlussdimension (exclude: {checkout_stage: ['']}behält nur Funnel-Pageviews) und inPOST /analytics/queryeine Gruppierungsdimension.cart_interactionsundcart_interaction_errorssind dort Metriken (und damit in Benachrichtigungsregeln nutzbar) sowie Metrikbereiche.POST /analytics/beaconsprojiziertcheckout_stage, die beiden Zähler und die Mapcart_interaction_kindsauf jede Zeile.
Weiterlesen
- Shopify-Checkout messen: das Pixel, seine zwei Erklärungen und was zu prüfen ist.
- Applications: die Felder und wo sie liegen.
- Tracker-Einstellungen: die zwei Einstellungen, von denen der Funnel abhängt.
- Besucher und Sessions: die Identität, über die der Funnel gruppiert.