So steigern Sie den Umsatz und die Kundenbindung, indem Sie Fehler auf der Checkout-Seite beheben
Veröffentlicht: 2022-05-25In der modernen, sich schnell entwickelnden digitalen Welt verlassen sich Kunden auf die Online-Möglichkeiten von Unternehmen und erwarten, dass alles perfekt ist. Wenn diese Kunden einmal Fehler auf ihrer Customer Journey erlebt haben, erinnern sie sich an den schlechten Service und suchen lieber nach alternativen Produkten/Dienstleistungen. Deshalb ist es so wichtig, Härten vorzubeugen und die Geschäftsentwicklung ständig zu überwachen.
In diesem Fall beschreiben wir die Lösung des OWOX BI-Teams für einen Einzelhändler für Unterhaltungselektronik und Haushaltsgeräte, der Probleme mit der Behebung von Fehlern auf der Checkout-Seite hatte, um den Umsatz und die Kundenbindung zu steigern.
Inhaltsverzeichnis
- Herausforderung
- Tor
- Lösung
- Schritt 1. Sammeln Sie Daten über Fehler
- Schritt 2. Daten verarbeiten
- Schritt 3. Verwenden Sie die erhaltenen Daten
- Ergebnisse
Herausforderung
Rund 700.000 Menschen besuchen täglich die Website des Einzelhändlers, um Produktbewertungen zu lesen oder sich umzusehen, um das zu finden, was sie kaufen möchten. Benutzer können jedoch manchmal Website-Fehler auf der Checkout-Seite feststellen, die sie daran hindern, eine Bestellung online abzuschließen, wodurch der Umsatz des Unternehmens sinkt.
Tor
Die Analysten haben zusammen mit den Testern die Kundenbeschwerden sorgfältig untersucht, um die typischen Fehlerszenarien zu definieren. Die Fehler, die die Spezialisten reproduzieren konnten, wurden behoben. Der Rest der kritischen Fehler erforderte eine Setup-Überwachung. Zuvor hatte das Unternehmen solche Daten nicht gesammelt und war nicht in der Lage, die genaue Anzahl von Fehlern und deren Auswirkungen auf die Konversionsraten auszuwerten. Das Unternehmen musste auch wissen, wie jeder Fehler mit einem bestimmten Benutzer verbunden war, um dem Benutzer bei der Bestellung zu helfen.
Die Analysten entschieden sich dafür, die Überwachung der kritischen Fehler auf der Website einzurichten und tun ihr Bestes, um Kunden dabei zu helfen, Bestellungen auf der Checkout-Seite erfolgreich aufzugeben. Dies würde den Umsatz steigern und das Kundenerlebnis auf der Website verbessern. Die Herausforderung war, dass eine Überwachung in Echtzeit erforderlich war, um keinen der Kunden zu verlieren, die gerade versuchen, etwas auf der Website zu bestellen.
Lösung
Um das Ziel zu erreichen, wurde folgender Plan ausgearbeitet:
- Platzieren Sie den zusätzlichen Code auf der Website, um Daten über Fehler zu sammeln und an Google BigQuery zu senden.
- Verarbeiten Sie die erhaltenen Daten und exportieren Sie sie in die Tabelle mit der Struktur gemäß den Anforderungen des Unternehmens.
- Organisieren Sie das Senden von Daten über Benutzer und Fehler an Callcenter, die Kunden kontaktieren, um ihnen bei der Bestellung zu helfen.
So sieht der Datenfluss des Unternehmens aus:

Schritt 1. Sammeln Sie Daten über Fehler
Das Unternehmen verwendet Google Tag Manager, um zu verfolgen, was Benutzer online tun. Allerdings können nicht alle Logikfehler auf der Website mit den Standardmethoden des Google Tag Managers nachverfolgt werden. Aus diesem Grund wurden die benutzerdefinierten Skripte eigens geschrieben und über den Google Tag Manager auf den erforderlichen Seiten der Website implementiert. Die Skripte fügen dem DataLayer die detaillierten Fehlerdaten hinzu.
Als nächstes werden die Fehlerdaten mithilfe der Google Tag Manager-Tags über die OWOX BI-Pipeline an Google BigQuery gesendet. Dadurch können ungesampelte Rohdaten von der Website in Google BigQuery nahezu in Echtzeit abgerufen werden.
Mithilfe der API senden die Analysten die Daten über Benutzer von CRM an Google BigQuery und erhalten alle benötigten Daten im Cloud Data Warehouse:
- Fehlerzeit.
- Fehlertyp.
- Benutzeridentifikation.
- E-Mail-Adresse des Benutzers.
- Stadt des Benutzers.
- Aktueller Produktstatus im Warenkorb.
Schritt 2. Daten verarbeiten
Unter Verwendung von OWOX BI Pipeline wurden die Datentabellen mit einer Vielzahl von Parametern erhalten. Die OWOX BI-Analysten erstellten eine SQL-Abfrage, um Daten aus der Tabelle abzurufen und sie mit einer bestimmten Struktur zurückzugeben: eine Reihe von Zeilen, bei denen jede Zeile einem einzelnen Fehler entspricht.
Unten sehen Sie das Beispiel einer SQL-Abfrage:
Select date, hour,minute, email, description, City, productIds, productnames, productprice, cartquantity, cartamount, From ( SELECT usererrors.date as date, usererrors.hour as hour, usererrors.minute as minute, usererrors.userEmail as email, usererrors.action as action, usererrors.error as error, case when action = 'disabled' and error = 'buttonCreateOrder' then 'Unable to checkout in cart' when action = 'notAdded' and error = 'productToCart' then 'Unable to add product to cart' when action = 'open' and error = 'emptyCart' then 'Product can not be viewed in cart' when action = 'open' and error = 'HoldingPageCheckout' then 'Maintenance work in progress (after checkout)' when action = 'absent' and error = ƋdiscountCart' then Ƌ% discount unavailable online (in cart)' when action = 'absent' and error = ƋdiscountCheckout' then Ƌ% discount unavailable online (at the checkout page)' when action = 'disabled' and error = 'buttonSubmit' then 'Button "Place Order" not working at the checkout page' else 'Other' end as description, Dimensions.city as City, Dimensions.productids as productIds, Dimensions.productnames as productnames, customMetrics.productprice as productprice, customMetrics.cartquantity as cartquantity, customMetrics.cartamount as cartamount, FROM (SELECT date, hour,minute, hitId, userEmail, eventInfo.eventAction as action, eventInfo.eventLabel as error, hour(CURRENT_TIMESTAMP())+2-hour as currenthour from TABLE_DATE_RANGE([mvideo-ru:Streaming.streaming_], DATE_ADD(CURRENT_TIMESTAMP(), 0 ,'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), 0 , 'DAY') ) where eventInfo.eventCategory = 'Errors' and userEmail is not null group by 1,2,3,4,5,6,7,8) as usererrors left join (SELECT hitId, MAX(IF(customDimensions.index=4, customDimensions.value, NULL)) WITHIN hitId AS city, MAX(IF(customDimensions.index=21, customDimensions.value, NULL)) WITHIN hitId AS productids, Max(IF(customDimensions.index=22, customDimensions.value, NULL)) WITHIN hitId AS productnames from TABLE_DATE_RANGE([mvideo-ru:Streaming.streaming_], DATE_ADD(CURRENT_TIMESTAMP(), 0 ,'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), 0 , 'DAY') )) as Dimensions ON Dimensions.hitId=usererrors.hitId left join (SELECT hitId, MAX(IF(customMetrics.index=1, customMetrics.value, NULL)) WITHIN hitId AS productprice, MAX(IF(customMetrics.index=4, customMetrics.value, NULL)) WITHIN hitId AS cartamount, Max(IF(customMetrics.index=5, customMetrics.value, NULL)) WITHIN hitId AS cartquantity FROM TABLE_DATE_RANGE([mvideo-ru:Streaming.streaming_], DATE_ADD(CURRENT_TIMESTAMP(), 0 ,'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), 0 , 'DAY') )) as customMetrics ON customMetrics.hitId=usererrors.hitId where usererrors.currenthour=0 ) ORDER BY date asc, hour asc, minute asc, email asc
Select date, hour,minute, email, description, City, productIds, productnames, productprice, cartquantity, cartamount, From ( SELECT usererrors.date as date, usererrors.hour as hour, usererrors.minute as minute, usererrors.userEmail as email, usererrors.action as action, usererrors.error as error, case when action = 'disabled' and error = 'buttonCreateOrder' then 'Unable to checkout in cart' when action = 'notAdded' and error = 'productToCart' then 'Unable to add product to cart' when action = 'open' and error = 'emptyCart' then 'Product can not be viewed in cart' when action = 'open' and error = 'HoldingPageCheckout' then 'Maintenance work in progress (after checkout)' when action = 'absent' and error = ƋdiscountCart' then Ƌ% discount unavailable online (in cart)' when action = 'absent' and error = ƋdiscountCheckout' then Ƌ% discount unavailable online (at the checkout page)' when action = 'disabled' and error = 'buttonSubmit' then 'Button "Place Order" not working at the checkout page' else 'Other' end as description, Dimensions.city as City, Dimensions.productids as productIds, Dimensions.productnames as productnames, customMetrics.productprice as productprice, customMetrics.cartquantity as cartquantity, customMetrics.cartamount as cartamount, FROM (SELECT date, hour,minute, hitId, userEmail, eventInfo.eventAction as action, eventInfo.eventLabel as error, hour(CURRENT_TIMESTAMP())+2-hour as currenthour from TABLE_DATE_RANGE([mvideo-ru:Streaming.streaming_], DATE_ADD(CURRENT_TIMESTAMP(), 0 ,'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), 0 , 'DAY') ) where eventInfo.eventCategory = 'Errors' and userEmail is not null group by 1,2,3,4,5,6,7,8) as usererrors left join (SELECT hitId, MAX(IF(customDimensions.index=4, customDimensions.value, NULL)) WITHIN hitId AS city, MAX(IF(customDimensions.index=21, customDimensions.value, NULL)) WITHIN hitId AS productids, Max(IF(customDimensions.index=22, customDimensions.value, NULL)) WITHIN hitId AS productnames from TABLE_DATE_RANGE([mvideo-ru:Streaming.streaming_], DATE_ADD(CURRENT_TIMESTAMP(), 0 ,'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), 0 , 'DAY') )) as Dimensions ON Dimensions.hitId=usererrors.hitId left join (SELECT hitId, MAX(IF(customMetrics.index=1, customMetrics.value, NULL)) WITHIN hitId AS productprice, MAX(IF(customMetrics.index=4, customMetrics.value, NULL)) WITHIN hitId AS cartamount, Max(IF(customMetrics.index=5, customMetrics.value, NULL)) WITHIN hitId AS cartquantity FROM TABLE_DATE_RANGE([mvideo-ru:Streaming.streaming_], DATE_ADD(CURRENT_TIMESTAMP(), 0 ,'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), 0 , 'DAY') )) as customMetrics ON customMetrics.hitId=usererrors.hitId where usererrors.currenthour=0 ) ORDER BY date asc, hour asc, minute asc, email asc
Als Ergebnis der Abfrage erhielten die Analysten eine Tabelle mit folgenden Informationen:

- Datum;
- Stunde;
- Minute;
- E-Mail-Adresse des Benutzers;
- Fehlerbeschreibung;
- Stadt des Benutzers;
- ID des Produkts im Warenkorb;
- Namen von Produkten im Warenkorb;
- Preis der Produkte im Warenkorb;
- Gesamtzahl der Produkte im Warenkorb;
- Gesamtpreis der Produkte im Warenkorb.
Dann wurde der Datenimport in Google Sheets eingerichtet, indem das Add-on OWOX BI BigQuery Reports verwendet wurde, das die Informationen in den Tabellen automatisch und stündlich aktualisiert. Das bedeutet, dass der Report immer aktuelle Daten über Fehler der Vorstunde enthält.
Nachfolgend finden Sie ein Beispiel für einen solchen Bericht:

Schritt 3. Verwenden Sie die erhaltenen Daten
Die zuständigen Benutzer erhalten automatisch stündlich (9.00 bis 18.00 Uhr, je nach Arbeitszeit) die Meldung über Fehler. Als nächstes senden sie es an die Entwickler des Unternehmens, falls kritische Probleme behoben werden müssen, und an die Kundenerfolgsmanager, die die Benutzer anrufen und ihnen helfen, eine Bestellung am Telefon abzuschließen.
Ergebnisse
- Der strukturierte Bericht wurde erstellt, um die Website-Fehler zu überwachen, die Benutzer daran hindern, einen Kauf zu tätigen.
- Die Entwickler des Unternehmens haben der Website ein Feedback-Formular hinzugefügt. Es erscheint automatisch jedes Mal, wenn Benutzer, die sich nicht angemeldet haben, einen Fehler sehen, sodass sie das Problem melden und ihre Kontaktdaten hinterlassen können. Dies hilft dem Unternehmen, schnell auf Fehler oder Bugs zu reagieren und den Kundenstamm zu erweitern, einschließlich der Kontakte der Benutzer, die sich nicht angemeldet haben.
- Die Callcenter des Unternehmens können schnell Daten über Benutzer erhalten, die Probleme haben, während sie das Produkt in den Einkaufswagen legen und auschecken. Die Call-Center-Mitarbeiter erfahren, was sich im Einkaufswagen befindet, und helfen, den Kauf abzuschließen.
- Etwa 3 % der Nutzer, die wegen des Website-Fehlers einen Anruf erhalten haben, schließen die Bestellung erfolgreich am Telefon ab. Dadurch erhält das Unternehmen zusätzliche 1.600 US-Dollar, die verloren gegangen wären, wenn Fehler ignoriert worden wären.