Cum să creșteți vânzările și loialitatea clienților prin remedierea erorilor de pe pagina de finalizare a comenzii

Publicat: 2022-05-25

În lumea digitală modernă, cu evoluție rapidă, clienții se bazează pe oportunitățile online oferite de companii și se așteaptă ca totul să fie nu mai puțin decât perfect. După ce s-au confruntat odată cu erori în călătoria lor către clienți, acești clienți își vor aminti serviciul prost și vor prefera să caute produse/servicii alternative. De aceea, este atât de important să preveniți orice dificultăți și să monitorizați constant performanța afacerii.

În acest caz, descriem soluția oferită de echipa OWOX BI pentru un retailer de electronice de larg consum și electrocasnice care a avut dificultăți în remedierea erorilor la pagina de checkout pentru a crește vânzările și loialitatea clienților.

Cuprins

  • Provocare
  • Poartă
  • Soluţie
    • Pasul 1. Colectați date despre erori
    • Pasul 2. Procesați datele
    • Pasul 3. Utilizați datele obținute
  • Rezultate

Provocare

Aproximativ 700.000 de oameni vizitează site-ul retailerului pe zi, pentru a citi recenzii despre produse sau pentru a căuta în jur pentru a găsi ceea ce ar dori să cumpere. Cu toate acestea, utilizatorii pot întâmpina uneori erori de site la pagina de finalizare a comenzii care îi împiedică să finalizeze o comandă online, scăzând astfel veniturile companiei.

Poartă

Analiștii împreună cu testerii au studiat cu atenție plângerile clienților pentru a defini scenariile tipice de eroare. Au fost remediate erorile pe care specialiștii au reușit să le reproducă. Restul erorilor critice au necesitat monitorizare de configurare. Anterior, compania nu obișnuia să colecteze astfel de date, rămânând în imposibilitatea de a evalua numărul exact de erori și modul în care acestea afectează ratele de conversie. De asemenea, compania trebuia să știe cum este conectat fiecare bug cu un anumit utilizator, pentru a-l ajuta pe utilizator să plaseze o comandă.

Analiștii au ales să configureze monitorizarea erorilor critice de pe site și să facă tot posibilul pentru a ajuta clienții să plaseze cu succes comenzile pe pagina de plată. Acest lucru ar crește vânzările și ar îmbunătăți experiența site-ului clientului. Factorul provocator a fost că era necesară monitorizarea în timp real pentru a nu pierde niciunul dintre clienții care încearcă în prezent să comande ceva pe site.

Soluţie

Următorul plan a fost pregătit pentru a atinge scopul:

  1. Plasați codul suplimentar pe site pentru a colecta date despre erori și a le trimite către Google BigQuery.
  2. Prelucrați datele obținute și exportați-le în tabelul cu structura conform nevoilor companiei.
  3. Organizați trimiterea de date despre utilizatori și erori către centrele de apel care ar contacta clienții pentru a-i ajuta să plaseze o comandă.

Iată cum arată fluxul de date al companiei:

Pasul 1. Colectați date despre erori

Compania folosește Google Tag Manager pentru a urmări ceea ce fac utilizatorii online. Cu toate acestea, nu toate erorile logice de pe site pot fi urmărite prin modalități standard Google Tag Manager. Acesta este motivul pentru care scripturile personalizate au fost scrise special și implementate prin Google Tag Manager pe paginile site-ului necesare. Scripturile adaugă datele de eroare detaliate la DataLayer .

Apoi, cu ajutorul etichetelor Google Tag Manager, datele de eroare ajung la Google BigQuery prin OWOX BI Pipeline. Acest lucru permite obținerea de date brute neeșantionate de pe site-ul web în Google BigQuery, aproape în timp real.

Folosind API-ul, analiștii trimit datele despre utilizatori din CRM către Google BigQuery, obținând toate datele de care au nevoie în depozitul de date din cloud:

  • Timp de eroare.
  • Tip de eroare.
  • ID-ul de utilizator.
  • Adresa de e-mail a utilizatorului.
  • Orașul utilizatorului.
  • Starea curentă a produsului în coș.

Pasul 2. Procesați datele

Folosind OWOX BI Pipeline, au fost obținute tabelele de date cu o gamă largă de parametri. Analiștii OWOX BI au creat o interogare SQL pentru a extrage date din tabel, returnându-le cu o structură definită: un set de linii în care fiecare linie este egală cu o singură greșeală.

Mai jos este exemplul de interogare 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

În urma interogării, analiștii au obținut un tabel care conține următoarele informații:

  • Data;
  • Ora;
  • Minut;
  • Adresa de email a utilizatorului;
  • Descrierea erorii;
  • Orașul utilizatorului;
  • ID-ul produsului din coș;
  • Denumirile produselor din coș;
  • Pretul produselor in cos;
  • Numărul total de produse din coș;
  • Prețul total al produselor din coș.

Apoi, importul de date în Foi de calcul Google a fost configurat, folosind suplimentul OWOX BI BigQuery Reports care actualizează informațiile din tabele automat și din oră. Aceasta înseamnă că raportul conține întotdeauna date actualizate despre erori pentru ora anterioară.

Puteți găsi un exemplu de astfel de raport mai jos:

Pasul 3. Utilizați datele obținute

Utilizatorii responsabili primesc automat raportul despre erori în fiecare oră (9:00 - 18:00, în funcție de programul de lucru). Apoi, îl trimit dezvoltatorilor companiei în cazul în care există probleme critice de rezolvat și managerilor de succes al clienților care sună utilizatorii și îi ajută să finalizeze o comandă la telefon.

Rezultate

  • Raportul structurat a fost creat pentru a monitoriza erorile site-ului web care împiedică utilizatorii să facă o achiziție.
  • Dezvoltatorii companiei au adăugat un formular de feedback pe site. Apare automat de fiecare dată când utilizatorii care nu s-au autentificat văd o eroare, permițându-le astfel să raporteze problema și să-și lase datele de contact. Acest lucru ajută compania să reacționeze rapid la orice erori sau bug-uri, precum și să extindă baza de clienți, inclusiv contactele utilizatorilor care nu s-au autentificat.
  • Centrele de apeluri ale companiei pot obține rapid date despre utilizatorii care se confruntă cu probleme în timp ce adaugă produsul în coș și fac check-out. Operatorii call centerului cunosc ce se află în interiorul căruciorului și ajută la finalizarea achiziției.
  • Aproximativ 3% dintre utilizatorii care au primit un apel din cauza erorii site-ului, termină cu succes plasarea comenzii la telefon. Acest lucru oferă companiei o sumă suplimentară de 1.600 USD care ar fi fost pierdută dacă erorile ar fi fost ignorate.