Настройка A/B тестирования на 1С-Битрикс
Редизайн карточки товара, новая кнопка «Купить», изменённый порядок блоков на лендинге — без A/B теста это гадание. Интуиция подводит: вариант, который «нравится директору», часто проигрывает по конверсии. 1С-Битрикс имеет встроенный механизм A/B тестирования в модуле abtest, но мало кто им пользуется — документация скудная, а ограничения неочевидны. Разберём и штатный механизм, и альтернативы.
Штатный модуль abtest
Модуль abtest доступен в редакциях «Бизнес» и «Энтерпрайз». Расположен в Маркетинг → A/B тестирование. Механика:
- Создаёте тест с названием и описанием.
- Указываете процент трафика для варианта B (обычно 50%).
- Выбираете тип теста: шаблон сайта, шаблон компонента, включаемая область или произвольный PHP-код.
- Битрикс при первом визите назначает пользователю группу (A или B) через cookie
BITRIX_SM_ABTEST_{ID}. Cookie живёт до окончания теста. - В зависимости от группы подставляется соответствующий вариант.
Создание теста через 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.
Что настраиваем за один день
- Штатный модуль
abtest— создание теста с подменой шаблона компонента. - Решение проблемы кэширования (раздельный кэш по группе).
- Передача группы теста в
dataLayerдля аналитики. - Настройка отчёта в Метрике/GA4 с разбивкой по группам A/B.
- Расчёт необходимого объёма трафика и длительности теста.







