Общие

Как исправить ошибку "Установлен запрет на отображение страницы во фрейме" в Яндекс.Метрике на Битрикс

Как исправить ошибку "Установлен запрет на отображение страницы во фрейме" в Яндекс.Метрике на Битрикс

Решаем проблему с картой кликов и вебвизором Яндекс.Метрики при включенной защите от фреймов в Битрикс на сервере с nginx


Оглавление


Описание проблемы

Если вы используете 1С-Битриксс включенной проактивной защитой и пытаетесь просмотретькарту кликовиливебвизор в Яндекс.Метрике, вы можете столкнуться с ошибкой:

Невозможно воспроизвести посещение на данной странице. Возможные причины:

  • Не установлен код счётчика

  • Установлен запрет на отображение страницы во фрейме

  • Попробовать открыть на http://webvisor.com

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

Ключевые симптомы проблемы:

  • ❌ Не работает карта кликов Яндекс.Метрики

  • ❌ Не воспроизводится вебвизор

  • ❌ Не отображается карта скроллинга

  • ❌ Не работает аналитика форм

  • ✅ При этом сбор статистики работает нормально


Почему возникает ошибка

Что такое защита от фреймов?

Защита от фреймов(X-Frame-Options) — это механизм безопасности, который предотвращаетclickjacking-атаки. При такой атаке злоумышленник встраивает ваш сайт в невидимый iframe на своей странице и обманом заставляет пользователей кликать по элементам вашего сайта.

Конфликт настроек

В случае с Битрикс Virtual Applianceили серверами сnginxпроблема возникает из-за того, что заголовок X-Frame-Options: SAMEORIGIN может устанавливаться натрех уровнях:

  • Битрикс (модуль Проактивная защита)

  • Nginx (веб-сервер)

  • Apache (если используется)

Даже если вы отключите защиту в Битрикс, nginx продолжит блокировать фреймы, что и вызывает ошибку в Яндекс.Метрике.

Почему Яндекс.Метрика использует фреймы?

Инструменты визуальной аналитики Яндекс.Метрики (карта кликов, вебвизор, карта скроллинга) отображают ваш сайт внутри iframe на странице метрики. Это позволяет:

  • Накладывать тепловую карту поверх сайта

  • Воспроизводить действия пользователей

  • Показывать аналитику в реальном времени


Быстрая диагностика

Прежде чем приступить к решению, давайте убедимся, что проблема именно в заголовках безопасности.

Шаг 1. Проверяем код метрики

Откройте консоль разработчика в браузере (F12) на вашем сайте и выполните:

// Проверка наличия объекта метрики
if (typeof ym !== 'undefined') {
console.log('✅ Код метрики установлен');
} else {
console.log('❌ Код метрики не найден');
}

Шаг 2. Проверяем заголовки сервера

Если у вас есть SSH-доступ к серверу, выполните:

curl -I https://ваш-сайт.ru 2>&1 | grep -i "x-frame-options"

Если видите X-Frame-Options: SAMEORIGIN или X-Frame-Options: DENY — проблема найдена.

Шаг 3. Проверяем через онлайн-сервисы

Используйте сервис SecurityHeaders.com для проверки заголовков вашего сайта.


Решение для Битрикс Virtual Appliance (CentOS 7 + nginx)

Этап 1. Настройка PHP-обработчика в Битрикс

Создайте или отредактируйте файл /home/bitrix/www/bitrix/php_interface/init.php:

<?php
/**
* Интеллектуальная защита от фреймов
* Отключаем защиту только для Яндекс.Метрики
*/

if (isset($_SERVER['HTTP_REFERER'])) {

// Список доверенных доменов Яндекс.Метрики
$metrikaHosts = [
'webvisor.com',
'metrika.yandex.ru',
'metrika.yandex.ua',
'metrika.yandex.com',
'metrika.yandex.by',
'metrika.yandex.kz',
'metrica.yandex.ru',
'metrica.yandex.com',
'mteza.yandex.ru',
$_SERVER['HTTP_HOST'], // Для режима взаимодействия
];

// Получаем домен источника запроса
$refHost = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);

// Если запрос от Яндекс.Метрики
if (in_array($refHost, $metrikaHosts)) {
// Отключаем проверку фреймов в Битрикс
define('BX_SECURITY_SKIP_FRAMECHECK', true);

// Пытаемся удалить заголовки от nginx (не всегда работает)
if (!headers_sent()) {
header_remove("X-Frame-Options");
header("X-Frame-Options: ALLOWALL");
}
}
}

// Логирование для отладки (опционально)
if (defined('BX_SECURITY_SKIP_FRAMECHECK') && BX_SECURITY_SKIP_FRAMECHECK === true) {
// Можно добавить запись в лог для отладки
// file_put_contents('/tmp/metrika.log', date('Y-m-d H:i:s') . ' - Frame check skipped for: ' . $_SERVER['HTTP_REFERER'] . PHP_EOL, FILE_APPEND);
}
?>

Этап 2. Настройка nginx для условного применения заголовков

Шаг 1. Создаем карту для определения источника

Создайте файл /etc/nginx/bx/conf/metrika-fix.conf:

# Карта для определения, нужно ли применять X-Frame-Options
map $http_referer $frame_options {
# По умолчанию защищаем от фреймов
default "SAMEORIGIN";

# Разрешаем фреймы для Яндекс.Метрики
"~*webvisor\.com" "";
"~*metrika\.yandex\.(ru|ua|com|by|kz)" "";
"~*metrica\.yandex\.(ru|com)" "";
"~*mteza\.yandex\.ru" "";

# Разрешаем для своего домена (режим взаимодействия в метрике)
"~*^https?://ваш-сайт\.ru" "";  # Замените на ваш домен
}

# Применяем заголовок только если он не пустой
map $frame_options $x_frame_options {
"" "";
default $frame_options;
}

Шаг 2. Подключаем карту в основной конфиг

Отредактируйте /etc/nginx/nginx.conf:

http {
# ... другие настройки ...

# Подключаем настройки для Яндекс.Метрики
include /etc/nginx/bx/conf/metrika-fix.conf;

# ... остальные настройки ...
}

Шаг 3. Изменяем способ добавления заголовка

Найдите и отредактируйте файл /etc/nginx/bx/conf/general-add_header.conf:

# Делаем резервную копию
cp /etc/nginx/bx/conf/general-add_header.conf /etc/nginx/bx/conf/general-add_header.conf.backup

# Редактируем файл
nano /etc/nginx/bx/conf/general-add_header.conf

Замените строку:

add_header X-Frame-Options SAMEORIGIN;

На:

# Условное добавление X-Frame-Options (не блокируем Яндекс.Метрику)
add_header X-Frame-Options $x_frame_options always;

Этап 3. Применение изменений

# Проверяем корректность конфигурации nginx
nginx -t

# Если тест прошел успешно, перезагружаем nginx
systemctl reload nginx

# Очищаем кеш Битрикс
rm -rf /home/bitrix/www/bitrix/cache/*
rm -rf /home/bitrix/www/bitrix/managed_cache/*

# Очищаем кеш nginx (если используется)
rm -rf /var/cache/nginx/*

Этап 4. Включаем защиту в Битрикс

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

  • Перейдите в Настройки → Настройки продукта → Модули → Проактивная защита

  • Включите опцию “Защита от фреймов”

  • Сохраните настройки

Или через SSH:

mysql -u root -p
USE имя_вашей_базы;
UPDATE b_option SET VALUE = 'Y' WHERE MODULE_ID = 'security' AND NAME = 'frame';

Решение для обычного хостинга (без доступа к nginx)

Если у вас обычный хостинг без доступа к настройкам nginx, используйте только PHP-решение.

Вариант 1. Через .htaccess (Apache)

Создайте или дополните файл /public_html/.htaccess:

*
# Удаляем существующий заголовок
Header always unset X-Frame-Options

# Устанавливаем Content-Security-Policy вместо X-Frame-Options
# Это более современный способ с большими возможностями
Header set Content-Security-Policy "frame-ancestors 'self' https://metrika.yandex.ru https://metrika.yandex.com https://metrica.yandex.ru https://metrica.yandex.com https://webvisor.com https://*.webvisor.com;"

Вариант 2. Через PHP (универсальный)

Добавьте в начало файла /bitrix/header.php:

<?php
// Проверяем источник запроса
$referer = $_SERVER['HTTP_REFERER'] ?? '';
$isMetrika = false;

// Список доменов Яндекс.Метрики
$metrikaDomains = [
'webvisor.com',
'metrika.yandex',
'metrica.yandex'
];

foreach ($metrikaDomains as $domain) {
if (strpos($referer, $domain) !== false) {
$isMetrika = true;
break;
}
}

// Если это Яндекс.Метрика, разрешаем фрейм
if ($isMetrika) {
header_remove("X-Frame-Options");
header("X-Frame-Options: ALLOWALL");
} else {
// Для всех остальных - защита
header("X-Frame-Options: SAMEORIGIN");
}
?>

Проверка результата

Тест 1. Проверка заголовков для Яндекс.Метрики

# Имитируем запрос от Яндекс.Метрики
curl -I -H "Referer: https://metrika.yandex.ru/" https://ваш-сайт.ru 2>&1 | grep -i "x-frame"

# Должно вернуть пустоту или X-Frame-Options: ALLOWALL

Тест 2. Проверка заголовков для обычных запросов

# Обычный запрос
curl -I https://ваш-сайт.ru 2>&1 | grep -i "x-frame"

# Должно вернуть X-Frame-Options: SAMEORIGIN

Тест 3. Проверка в Яндекс.Метрике

  • Откройте Яндекс.Метрику

  • Перейдите в Карты → Карта кликов

  • Выберите любую страницу

  • Карта должна отображаться корректно

Тест 4. Проверка вебвизора

  • Перейдите в Вебвизор

  • Выберите любую запись

  • Воспроизведение должно работать


Часто задаваемые вопросы

❓ Безопасно ли отключать защиту от фреймов для Яндекс.Метрики?

Да, это безопасно. Мы отключаем защиту только для конкретных доменов Яндекс.Метрики. Для всех остальных сайтов защита продолжает работать.

❓ Почему не работает после отключения в админке Битрикс?

Битрикс контролирует только свои заголовки. Если nginx или Apache добавляют заголовок на уровне сервера, настройки Битрикс не помогут.

❓ Можно ли использовать Content-Security-Policy вместо X-Frame-Options?

Да, и это даже лучше! CSP — более современный и гибкий метод. Пример:

add_header Content-Security-Policy "frame-ancestors 'self' https://metrika.yandex.ru https://webvisor.com;" always;

❓ Что делать, если у меня CloudFlare?

CloudFlare может добавлять свои заголовки безопасности. Проверьте настройки:

  • Войдите в панель CloudFlare

  • Перейдите в Security → Settings

  • Найдите Security Headers

  • Настройте исключения для путей или отключите X-Frame-Options

❓ Как проверить, откуда именно добавляется заголовок?

Используйте режим разработчика в браузере:

  • Откройте DevTools (F12)

  • Перейдите на вкладку Network

  • Обновите страницу

  • Кликните на главный документ

  • Посмотрите Response Headers


Заключение

Проблема с отображением карты кликов и вебвизора Яндекс.Метрики на сайтах Битрикс — распространенная ситуация, особенно при использовании Битрикс Virtual Applianceили серверов сnginx.

Ключевые моменты решения:

Двухуровневый подход — настройка и на уровне PHP, и на уровне веб-сервера

Сохранение безопасности — защита от clickjacking остается активной

Избирательное отключение — разрешаем фреймы только для Яндекс.Метрики

Совместимость — решение работает с любой версией Битрикс

Полезные ссылки:


Нужна помощь?

Если у вас остались вопросы или нужна помощь с настройкой, вы можете:

  • Оставить комментарий под статьей

  • Написать в техподдержку вашего хостинга

  • Обратиться к специалисту по Битрикс


Метки: #битрикс #яндексметрика #вебвизор #картакликов #nginx #безопасность #clickjacking #xframeoptions #csp #битриксva #centos7

Последнее обновление: Январь 2025


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

🚀 Нужна помощь с сайтом на 1С-Битрикс или Аспро?

Я работаю удалённо по всей России и СНГ. Узнайте цены и условия для вашего города:

Все регионы →