Come aumentare le vendite e la fidelizzazione dei clienti correggendo gli errori nella pagina di pagamento

Pubblicato: 2022-05-25

Nel mondo digitale moderno e in rapida evoluzione, i clienti fanno affidamento sulle opportunità online offerte dalle aziende e si aspettano che tutto sia perfetto. Dopo aver riscontrato errori durante il percorso del cliente, questi clienti ricorderanno il cattivo servizio e preferiranno cercare prodotti/servizi alternativi. Ecco perché è così importante prevenire eventuali difficoltà e monitorare costantemente le prestazioni aziendali.

In questo caso, descriviamo la soluzione fornita dal team OWOX BI per un rivenditore di elettronica di consumo ed elettrodomestici che ha avuto difficoltà a correggere gli errori nella pagina di pagamento per aumentare le vendite e la fidelizzazione dei clienti.

Sommario

  • Sfida
  • Obbiettivo
  • Soluzione
    • Passaggio 1. Raccogli i dati sugli errori
    • Passaggio 2. Elaborare i dati
    • Passaggio 3. Utilizzare i dati ottenuti
  • Risultati

Sfida

Circa 700.000 persone visitano il sito Web del rivenditore al giorno, per leggere le recensioni dei prodotti o navigare per trovare ciò che vorrebbero acquistare. Tuttavia, gli utenti a volte possono riscontrare errori del sito Web nella pagina di pagamento che impediscono loro di completare un ordine online, diminuendo così le entrate dell'azienda.

Obbiettivo

Gli analisti insieme ai tester hanno studiato attentamente i reclami dei clienti per definire gli scenari di errore tipici. Gli errori che gli specialisti sono riusciti a riprodurre sono stati corretti. Il resto dei bug critici richiedeva il monitoraggio dell'installazione. In precedenza, l'azienda non utilizzava per raccogliere tali dati, rimanendo incapace di valutare il numero esatto di bug e come questi influiscano sui tassi di conversione. L'azienda aveva anche bisogno di sapere come ogni bug fosse collegato a un determinato utente, al fine di aiutare l'utente a effettuare un ordine.

Gli analisti hanno scelto di impostare il monitoraggio dei bug critici sul sito Web e fare tutto il possibile per aiutare i clienti a effettuare correttamente gli ordini alla pagina di pagamento. Ciò aumenterebbe le vendite e migliorerebbe l'esperienza del sito Web del cliente. Il fattore difficile era che il monitoraggio in tempo reale era necessario per non perdere nessuno dei clienti che stavano attualmente cercando di ordinare qualcosa sul sito web.

Soluzione

Per raggiungere l'obiettivo è stato preparato il seguente piano:

  1. Inserisci il codice aggiuntivo sul sito web per raccogliere dati sugli errori e inviarli a Google BigQuery.
  2. Elaborare i dati ottenuti ed esportarli nella tabella con la struttura in base alle esigenze dell'azienda.
  3. Organizza l'invio di dati sugli utenti e sugli errori ai call center che contatterebbero i clienti per aiutarli a effettuare un ordine.

Ecco come appare il flusso di dati dell'azienda:

Passaggio 1. Raccogli i dati sugli errori

L'azienda utilizza Google Tag Manager per monitorare ciò che gli utenti fanno online. Tuttavia, non tutti gli errori logici sul sito Web possono essere tracciati con i metodi standard di Google Tag Manager. Per questo gli script personalizzati sono stati scritti ad hoc e implementati tramite Google Tag Manager nelle pagine del sito necessarie. Gli script aggiungono i dati di errore dettagliati a DataLayer .

Successivamente, con l'aiuto dei tag di Google Tag Manager, i dati di errore vengono inviati a Google BigQuery tramite la OWOX BI Pipeline. Ciò consente di ottenere dati grezzi non campionati dal sito Web in Google BigQuery, quasi in tempo reale.

Utilizzando l'API, gli analisti inviano i dati sugli utenti dal CRM a Google BigQuery, ottenendo tutti i dati di cui hanno bisogno nel cloud data warehouse:

  • Tempo di errore.
  • Tipo di errore.
  • ID utente.
  • Indirizzo email dell'utente.
  • Città dell'utente.
  • Stato attuale del prodotto nel carrello.

Passaggio 2. Elaborare i dati

Utilizzando OWOX BI Pipeline, sono state ottenute le tabelle di dati con un'ampia gamma di parametri. Gli analisti di OWOX BI hanno creato una query SQL per estrarre i dati dalla tabella, restituendoli con una struttura definita: un insieme di righe in cui ogni riga corrisponde a un singolo errore.

Di seguito è riportato l'esempio di query SQL:

    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

Come risultato della query, gli analisti hanno ottenuto una tabella contenente le seguenti informazioni:

  • Data;
  • Ora;
  • Minuto;
  • Indirizzo email dell'utente;
  • Descrizione dell'errore;
  • Città dell'utente;
  • ID del prodotto nel carrello;
  • Nomi dei prodotti nel carrello;
  • Prezzo dei prodotti nel carrello;
  • Numero totale di prodotti nel carrello;
  • Prezzo totale dei prodotti nel carrello.

Quindi, è stata impostata l'importazione dei dati in Fogli Google, utilizzando il componente aggiuntivo OWOX BI BigQuery Reports che aggiorna le informazioni nelle tabelle in modo automatico e orario. Ciò significa che il rapporto contiene sempre dati aggiornati sugli errori dell'ora precedente.

Di seguito puoi trovare un esempio di tale rapporto:

Passaggio 3. Utilizzare i dati ottenuti

Gli utenti preposti ricevono automaticamente la segnalazione degli errori ogni ora (dalle 9:00 alle 18:00, in base all'orario di lavoro). Successivamente, lo inviano agli sviluppatori dell'azienda nel caso ci siano problemi critici da risolvere e ai responsabili del successo dei clienti che chiamano gli utenti e li aiutano a completare un ordine al telefono.

Risultati

  • Il report strutturato è stato creato per monitorare gli errori del sito web che impediscono agli utenti di effettuare un acquisto.
  • Gli sviluppatori dell'azienda hanno aggiunto un modulo di feedback al sito Web. Appare automaticamente ogni volta che gli utenti che non hanno effettuato l'accesso vedono un errore, consentendo loro di segnalare il problema e lasciare i propri dati di contatto. Ciò aiuta l'azienda a reagire rapidamente a eventuali errori o bug, oltre ad estendere la base di clienti, inclusi i contatti degli utenti che non hanno effettuato l'accesso.
  • I call center dell'azienda possono ottenere rapidamente dati sugli utenti che devono affrontare problemi durante l'aggiunta del prodotto al carrello e il check-out. Gli operatori del call center vengono a sapere cosa c'è all'interno del carrello e aiutano a completare l'acquisto.
  • Circa il 3% degli utenti che hanno ricevuto una chiamata a causa dell'errore del sito Web, completano correttamente l'ordine al telefono. Ciò offre all'azienda ulteriori $ 1.600 che sarebbero andati persi se gli errori fossero stati ignorati.