Налаштування A/B тестування на 1С-Bitrix
Редизайн карточки товара, нова кнопка «Купити», змінений порядок блоків на лендингу — без A/B тесту це гадання. Інтуїція підводить: варіант, який «подобається директору», часто програє по конверсії. 1С-Bitrix має вбудований механізм A/B тестування в модулі abtest, але мало хто його використовує — документація скупа, а обмеження неочевидні. Розглянемо і штатний механізм, і альтернативи.
Штатний модуль abtest
Модуль abtest доступний у редакціях «Бізнес» та «Ентерпрайз». Розміщений у Маркетинг → A/B тестування. Механіка:
- Створюєте тест з назвою й описом.
- Указуєте відсоток трафіку для варіанту B (зазвичай 50%).
- Вибираєте тип тесту: шаблон сайту, шаблон компонента, включаємська область або довільний PHP-код.
- Bitrix при першому відвідуванні призначає користувачу групу (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/',
],
]);
Для тесту шаблону компонента: указуєте оригінальний й тестовий шаблон, Bitrix підміняє параметр 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 на клієнті. Bitrix відає однаковий 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% (відносно) потрібно близько 20 000 відвідувань на кожен варіант. На сайті з 1000 відвідувань на день — тест триває 40 днів.
Не зупиняйте тест, поки p-value не опуститься нижче 0.05. Калькулятори: Evan Miller's AB Test Calculator, ABTestGuide.
Що налаштовуємо за один день
- Штатний модуль
abtest— створення тесту з підміною шаблону компонента. - Рішення проблеми кешування (окремий кеш за групою).
- Передача групи тесту в
dataLayerдля аналітики. - Налаштування звіту в Метриці/GA4 з розбивкою за групами A/B.
- Розрахунок необхідного обсягу трафіку й тривалості тесту.







