Как повысить продажи и лояльность клиентов, исправив ошибки на странице оформления заказа

Опубликовано: 2022-05-25

В современном, быстро развивающемся цифровом мире клиенты полагаются на онлайн-возможности, предлагаемые бизнесом, и ожидают, что все будет не менее чем идеально. Однажды испытав какие-либо ошибки на пути к клиенту, эти клиенты вспомнят плохой сервис и предпочтут искать альтернативные продукты/услуги. Вот почему так важно предотвращать любые трудности и постоянно контролировать эффективность бизнеса.

В данном случае мы описываем решение, предоставленное командой OWOX BI для продавца бытовой электроники и бытовой техники, у которого возникли проблемы с исправлением ошибок на странице оформления заказа для увеличения продаж и лояльности покупателей.

Оглавление

  • Вызов
  • Цель
  • Решение
    • Шаг 1. Соберите данные об ошибках
    • Шаг 2. Обработка данных
    • Шаг 3. Используйте полученные данные
  • Полученные результаты

Вызов

Около 700 000 человек посещают веб-сайт розничного продавца в день, чтобы прочитать обзоры продуктов или найти то, что они хотели бы купить. Однако пользователи могут иногда сталкиваться с ошибками веб-сайта на странице оформления заказа, которые не позволяют им выполнить заказ онлайн, что снижает доход компании.

Цель

Аналитики вместе с тестировщиками внимательно изучили жалобы клиентов, чтобы определить типичные сценарии ошибок. Исправлены ошибки, которые удалось воспроизвести специалистам. Остальные критические ошибки требовали мониторинга установки. Ранее компания не собирала такие данные, так как не могла оценить точное количество ошибок и то, как они влияют на показатели конверсии. Компании также нужно было знать, как каждый баг связан с конкретным пользователем, чтобы помочь пользователю сделать заказ.

Аналитики решили настроить мониторинг критических ошибок на сайте и сделать все возможное, чтобы помочь клиентам успешно оформлять заказы на странице оформления заказа. Это повысит продажи и улучшит взаимодействие с сайтом для клиентов. Сложным фактором было то, что требовался мониторинг в режиме реального времени, чтобы не потерять ни одного из клиентов, пытающихся в данный момент что-то заказать на сайте.

Решение

Для достижения цели был подготовлен следующий план:

  1. Разместите дополнительный код на сайте, чтобы собирать данные об ошибках и отправлять их в Google BigQuery.
  2. Обработайте полученные данные и экспортируйте их в таблицу со структурой в соответствии с потребностями компании.
  3. Организуйте отправку данных о пользователях и ошибках в колл-центры, которые будут связываться с клиентами для помощи в оформлении заказа.

Вот как выглядит поток данных компании:

Шаг 1. Соберите данные об ошибках

Компания использует Google Tag Manager для отслеживания того, что пользователи делают в Интернете. Однако не все логические ошибки на сайте можно отследить стандартными способами Google Tag Manager. Именно поэтому пользовательские скрипты были написаны специально и реализованы через Диспетчер тегов Google на нужных страницах сайта. Сценарии добавляют подробные данные об ошибках в DataLayer .

Далее с помощью тегов Google Tag Manager данные об ошибках попадают в Google BigQuery через OWOX BI Pipeline. Это позволяет получать необработанные несемплированные данные с веб-сайта в Google BigQuery почти в реальном времени.

С помощью API аналитики отправляют данные о пользователях из CRM в Google BigQuery, получая все необходимые данные в облачном хранилище данных:

  • Время ошибки.
  • Тип ошибки.
  • Логин пользователя.
  • Адрес электронной почты пользователя.
  • Город пользователя.
  • Текущий статус товара в корзине.

Шаг 2. Обработка данных

С помощью OWOX BI Pipeline были получены таблицы данных с широким набором параметров. Аналитики OWOX BI создали SQL-запрос для получения данных из таблицы, возвращая их с определенной структурой: набором строк, где каждая строка соответствует одной ошибке.

Ниже приведен пример 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

В результате запроса аналитики получили таблицу со следующей информацией:

  • Дата;
  • Час;
  • Минута;
  • адрес электронной почты пользователя;
  • Описание ошибки;
  • Город пользователя;
  • ID товара в корзине;
  • Наименования товаров в корзине;
  • Цена товаров в корзине;
  • Общее количество товаров в корзине;
  • Суммарная стоимость товаров в корзине.

Затем был настроен импорт данных в Google Sheets с помощью надстройки OWOX BI BigQuery Reports, которая обновляет информацию в таблицах автоматически и ежечасно. Это означает, что отчет всегда содержит актуальные данные об ошибках за предыдущий час.

Пример такого отчета вы можете найти ниже:

Шаг 3. Используйте полученные данные

Ответственные пользователи автоматически получают отчет об ошибках каждый час (с 9:00 до 18:00 по рабочему времени). Затем они отправляют его разработчикам компании, если есть критические проблемы, которые нужно исправить, и менеджерам по работе с клиентами, которые звонят пользователям и помогают им выполнить заказ по телефону.

Полученные результаты

  • Структурированный отчет был создан для мониторинга ошибок сайта, которые мешают пользователям совершить покупку.
  • Разработчики компании добавили на сайт форму обратной связи. Он автоматически появляется каждый раз, когда пользователи, которые не вошли в систему, видят ошибку, что позволяет им сообщить о проблеме и оставить свои контактные данные. Это помогает компании быстро реагировать на любые ошибки или баги, а также расширять клиентскую базу, включая контакты пользователей, которые не вошли в систему.
  • Колл-центры компании могут оперативно получать данные о пользователях, столкнувшихся с проблемами при добавлении товара в корзину и оформлении заказа. Операторы колл-центра узнают, что внутри тележки, и помогут завершить покупку.
  • Около 3% пользователей, которым позвонили из-за ошибки сайта, успешно завершают оформление заказа по телефону. Это дает компании дополнительные 1600 долларов, которые были бы потеряны, если бы ошибки были проигнорированы.