Настройка A/B тестирования на 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка A/B тестирования на 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка A/B тестирования на 1С-Битрикс

Редизайн карточки товара, новая кнопка «Купить», изменённый порядок блоков на лендинге — без A/B теста это гадание. Интуиция подводит: вариант, который «нравится директору», часто проигрывает по конверсии. 1С-Битрикс имеет встроенный механизм A/B тестирования в модуле abtest, но мало кто им пользуется — документация скудная, а ограничения неочевидны. Разберём и штатный механизм, и альтернативы.

Штатный модуль abtest

Модуль abtest доступен в редакциях «Бизнес» и «Энтерпрайз». Расположен в Маркетинг → A/B тестирование. Механика:

  1. Создаёте тест с названием и описанием.
  2. Указываете процент трафика для варианта B (обычно 50%).
  3. Выбираете тип теста: шаблон сайта, шаблон компонента, включаемая область или произвольный PHP-код.
  4. Битрикс при первом визите назначает пользователю группу (A или B) через cookie BITRIX_SM_ABTEST_{ID}. Cookie живёт до окончания теста.
  5. В зависимости от группы подставляется соответствующий вариант.

Создание теста через API:

\Bitrix\ABTest\ABTestManager::addTest([
    'NAME' => 'Кнопка купить: красная vs зелёная',
    'SITE_ID' => 's1',
    'DURATION' => 14,  // дней
    'PORTION' => 50,   // процент трафика на вариант B
    'TEST_DATA' => [
        'type' => 'template',
        'original' => '/local/templates/main/',
        'modified' => '/local/templates/main_test/',
    ],
]);

Для теста шаблона компонента: указываете оригинальный и тестовый шаблон, Битрикс подменяет параметр TEMPLATE_NAME при вызове $APPLICATION->IncludeComponent().

Ограничения штатного модуля

  • Нет интеграции с аналитикой. Модуль считает конверсию по целям Яндекс.Метрики или Google Analytics, но связка ненадёжная — данные расходятся, атрибуция неточная.
  • Нет сегментации. Нельзя запустить тест только для мобильных, только для Москвы или только для новых пользователей.
  • Нет мультивариантных тестов. Только A vs B, без вариантов C, D.
  • Кэширование. Если компонент кэширует результат — оба варианта получат один и тот же HTML. Нужно либо отключать кэш для тестируемого компонента, либо кэшировать раздельно по группе теста.

Проблема с кэшем решается добавлением cookie BITRIX_SM_ABTEST_{ID} в ключ кэширования компонента:

$this->setResultCacheKeys(['AB_GROUP']);
$cacheDir = '/catalog/element/' . $arParams['ELEMENT_ID'] . '/' . $_COOKIE['BITRIX_SM_ABTEST_1'];

Google Optimize как альтернатива (client-side)

Google Optimize закрылся в 2023, но подход client-side A/B тестирования жив в других инструментах: VWO, Optimizely, ABTasty. Принцип: JavaScript-сниппет подменяет DOM на клиенте. Битрикс отдаёт одинаковый HTML, скрипт модифицирует элементы.

Плюсы: не нужно трогать серверный код. Минусы: мелькание (FOUC — оригинал появляется на долю секунды до подмены), не работает для серверной логики (разные цены, алгоритмы сортировки).

Server-side A/B через кастомный код

Для серьёзных тестов (разная логика расчёта скидки, другой алгоритм рекомендаций) нужен серверный подход:

function getABGroup(string $testName, int $percentB = 50): string
{
    $cookieName = 'ab_' . md5($testName);
    if (isset($_COOKIE[$cookieName])) {
        return $_COOKIE[$cookieName];
    }
    $group = (mt_rand(1, 100) <= $percentB) ? 'B' : 'A';
    setcookie($cookieName, $group, time() + 86400 * 30, '/');
    return $group;
}

// Использование
if (getABGroup('discount_algorithm') === 'B') {
    // Новый алгоритм скидки
} else {
    // Текущий алгоритм
}

Для отслеживания результатов — передаём группу в dataLayer:

dataLayer.push({
    'ab_test': 'discount_algorithm',
    'ab_group': '<?= getABGroup("discount_algorithm") ?>'
});

В Яндекс.Метрике или GA4 создаём пользовательский параметр, строим отчёт по конверсии с разбивкой по группам.

Статистическая значимость

Типичная ошибка — остановить тест через 2 дня, увидев разницу в 0.5%. Для достоверного результата нужен объём выборки. Грубая оценка: при базовой конверсии 2% и желаемом минимально детектируемом эффекте 20% (relative) требуется около 20 000 визитов на каждый вариант. На сайте с 1000 визитов в день — тест длится 40 дней.

Не останавливайте тест, пока p-value не опустится ниже 0.05. Калькуляторы: Evan Miller's AB Test Calculator, ABTestGuide.

Что настраиваем за один день

  1. Штатный модуль abtest — создание теста с подменой шаблона компонента.
  2. Решение проблемы кэширования (раздельный кэш по группе).
  3. Передача группы теста в dataLayer для аналитики.
  4. Настройка отчёта в Метрике/GA4 с разбивкой по группам A/B.
  5. Расчёт необходимого объёма трафика и длительности теста.