Менеджер фрагментов кода Cacher дает вам и вашей команде возможность делать больше и быстрее. Попробуйте все функции бесплатно.

TL; DR: просмотрите фрагмент этого сообщения в блоге.

В течение последних нескольких месяцев мы были сосредоточены почти исключительно на создании функций Cacher (интеграции VSCode, Atom и Sublime) с очень небольшим количеством маркетинговых средств. Дизайн нашего маркетингового сайта практически не изменился с момента его запуска в сентябре 2017 года.

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

На маркетинговом языке пробовать разные варианты одной и той же страницы, чтобы найти лучшего исполнителя, называется A / B-тестирование. Эти тесты (или эксперименты) представляют собой периоды, в течение которых вариации выполняются одновременно на подгруппах пользователей с целью анализа и вывода результатов. По окончании эксперимента вы можете сделать выигрышный вариант доступным для всех.

Требования

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

Я инженер по профессии и не настраивал cacher.io, как это обычно делают многие маркетологи, используя тяжелые CMS, такие как Wordpress или Drupal. Маркетинговый сайт использует Jekyll, полностью статичен и не имеет базы данных. Поскольку я достаточно хорошо знаю HTML / (S) CSS, я не чувствовал необходимости платить за более удобные для пользовательского интерфейса инструменты, такие как Optimizely или Unbounce. Вместо этого я решил объединить Mixpanel и немного Javascript, чтобы провести свой собственный легкий эксперимент.

Тестирование с Алефбет

Посмотрев на ABalytics.js и signalerjs, я остановился на AlephBet из-за его отличной документации и возможности устанавливать веса для вариантов. Хотя вы можете выбрать библиотеку с меньшим количеством функций, вам все равно нужно что-то, что может гарантировать, что конкретный пользователь получит один и тот же вариант при каждом посещении страницы.

Шаг 1. HTML

Вот упрощенная версия HTML, участвующего в эксперименте.

// index.html
<span data-variant="download" data-block>
  <button>Download for Mac OS</button>
</span>
<span data-variant="visit_web" data-block>
  <button>Get Started</button>
</span>

Почему атрибуты data-variant? Я буду использовать их в CSS и JS ниже, чтобы переключать видимость элементов.

Шаг 2. Скройте элементы

Я должен был убедиться, что Javascript должен определять, какую версию пользовательского интерфейса отображать. Я спрятал все элементы HTML в эксперименте с CSS и добавил отдельный класс, который можно было бы включить.

// tests.scss
*[data-variant] {
  display: none;

  &.variant-visible {
    display: inline-block;

    &[data-block] {
      display: block;
    }

    &[data-inline] {
      display: inline;
    }
  }
}

Обратите внимание, что я использовал настраиваемые атрибуты data-, чтобы указать, должен ли элемент отображаться как inline, inline-block или block.

Шаг 3. Инициализируйте эксперимент

Когда загружается домашняя страница, начинается эксперимент. Чтобы упростить настройку будущих экспериментов, я написал функцию-оболочку для Experiment инициализации Alephbet. Обратите внимание, что в приведенном ниже коде я использовал функцию document.ready() jQuery, чтобы сначала загрузить весь HTML.

// testing.js
function newExperiment(name, variants) {
  var args = {
    name: name,
    variants: {}
  };
  
  _.each(_.keys(variants), function(variant) {
    args.variants[variant] = {
      activate: function() {
        $('*[data-variant="' + variant + '"]').addClass("variant-visible");
      },
      weight: variants[variant]
    };
  });
  
  new AlephBet.Experiment(args);
}
$(function() {
  newExperiment("homepage", {
    download: 50,
    visit_web: 50
  });
});

Метод newExperiment() выполняет несколько функций: (1) инициализирует эксперимент с весами вариантов и (2) показывает любой элемент с атрибутом data-variant-[download|visit_web], если пользователь выбирает этот вариант.

В данном случае я поставил эксперимент с двумя вариантами (вы можете сделать больше), каждый из которых показан 50% посетителей сайта.

Шаг 4. Отслеживайте события с помощью Mixpanel

Я решил использовать Mixpanel для отслеживания результатов этого эксперимента, но вы можете использовать другую аналитическую службу. Alephbet поставляется со встроенной поддержкой Google Analytics, так что это будет еще один прекрасный выбор.

// tracking.js
function testingStore() {
  var store = localStorage.getItem('alephbet');
  if (store) {
    return JSON.parse(store);
  } else {
    return null;
  }
}
function mixpanelTrack(event, data) {
  data = data || {};
  var store = this.testingStore();
  if (store) {
    _.each(_.keys(store), function(key) {
      if (key.indexOf("variant") >= 0) {
        var tokens = key.split(":");
        data["experiment:" + tokens[0]] = store[key];
      }
    });
  }
  mixpanel.track(event, data);
}

testingStore() берет данные localStorage, которые Alphebet использует для отслеживания экспериментов, и возвращает их значение JSON. Функции _.each и _.keys взяты из lodash.

Для каждого события я отправил каждый эксперимент и его активный вариант как свойства события Mixpanel.

Я добавил строку JS на домашнюю страницу, чтобы указать, что пользователь посетил:

// index.html
<script>
  $(function() {
    mixpanelTrack('visited homepage');
  });
</script>

На странице успешной регистрации я добавил еще одну строку для отслеживания регистрации пользователя.

// signup-success.html
<script>
  $(function() {
    mixpanelTrack('user registered');
  }); 
</script>

Шаг 5. Настройте воронки в Mixpanel

Я создал новую воронку в Mixpanel для варианта кнопки загрузки домашней страницы:

Обратите внимание: поскольку я отправил все эксперименты как свойства события, experiment:homepage можно было выбрать для обоих событий. Для этой воронки было установлено значение download. Я также создал еще одну воронку со значением visited_web в качестве значения experiment:homepage.

Шаг 6: Подождите

После того, как я настроил воронки и внедрил изменения на веб-сайте, я стал ждать результатов. Как долго я ждал? У Нила Пателя есть удобный Калькулятор A / B-тестирования, который подскажет мне. Чтобы внести изменения в маркетинговый сайт, я обычно жду достаточного количества посетителей, чтобы ›уверенность в тестах составила 95%. В зависимости от посещаемости вашего собственного веб-сайта это может означать ожидание от нескольких часов до нескольких дней.

Шаг 7. Посмотрите на результаты

Проведя эксперимент в течение некоторого времени, я получил следующие результаты:

Ввод этих чисел в калькулятор A / B-тестирования дал мне следующее:

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

Зачем катить собственное?

С популяризацией A / B-тестирования, безусловно, появился ряд установленных сервисов для запуска тестов и сбора результатов. Если вы профессионал в области маркетинга, который не хочет (или вам не разрешено) трогать код, вам подойдет такой инструмент, как Optimizely. С другой стороны, если вы инженер, который предпочитает детальный контроль над тем, что происходит на странице, нет лучшего варианта, чем написать собственный фреймворк.

Хотите запомнить эту технику? Сохраните фрагмент этого сообщения в блоге в своей библиотеке Cacher.

Cacher - органайзер фрагментов кода для профессиональных разработчиков - красивый пользовательский интерфейс, интеграция с популярными редакторами / IDE, поддержка более 100 языков.

Зарегистрируйтесь на cacher.io.