Главная / Блог ModX / Как проверить Яндекс.Метрику и получать уведомления о сбоях

Как проверить Яндекс.Метрику и настроить уведомления о сбоях

Когда статистика Яндекс.Метрики перестаёт обновляться, владельцу сайта трудно понять, что именно сломалось: код счётчика, браузер, соединение с Яндексом или отчёты сервиса. Поэтому первое правило мониторинга — не смешивать разные признаки работоспособности.

Если вы столкнулись с текущей проблемой, начните с разбора сбоя Метрики от 12 октября 2026 года. В этой инструкции сделаем диагностику в браузере и независимую проверку скрипта с уведомлениями в Telegram.

Мониторинг должен различать ошибку счётчика, сеть и интерфейс статистики.

Три уровня проверки Метрики

  1. Код присутствует. Сниппет установлен в HTML на нужных страницах.
  2. События отправляются. Браузер выполняет код, отправляет просмотры и события; они видны в инструментах отладки.
  3. Отчёты доступны и обновляются. Данные появляются в интерфейсе или официальном API с учётом задержек обработки.

Успех на первом или втором уровне не гарантирует третий. Более того, блокировщик рекламы может отключить счётчик только у одного посетителя, не затрагивая остальных.

Шаг 1. Проверяем код и события в браузере

Откройте сайт и инструменты разработчика. На вкладке Network отфильтруйте запросы по mc.yandex.ru; на вкладке Console проверьте ошибки JavaScript. В Метрике есть встроенная отладка: откройте страницу с параметром:

https://example.com/?_ym_debug=2

Для современного кода Метрики доступна панель отладки. Проверьте факт инициализации счётчика и события PageView. Официальная проверка счётчика объясняет каждый этап. Параметр отладки используйте для диагностики, а не в публичных ссылках.

Шаг 2. Автоматически проверяем доступность tag.js

Ниже учебный мониторинг для собственного хостинга. Он раз в 10 минут пытается загрузить https://mc.yandex.ru/metrika/tag.js, ожидает три неудачи подряд, а затем пишет уведомление в Telegram. Когда скрипт снова доступен, сообщает о восстановлении проверяемого признака.

Ограничение: это проверка доступности скрипта с вашего сервера, а не доказательство того, что Яндекс.Метрика записывает визиты и показывает отчёты. Возможны региональные сетевые сбои и ложные тревоги.

Несколько подряд неудачных проверок уменьшают количество лишних уведомлений.

PHP-скрипт проверки

Положите файл metrika-watch.php за пределами публичной папки сайта, например в приватную директорию пользователя хостинга. PHP должен поддерживать cURL. Создайте Telegram-бота через BotFather, получите chat_id и задайте переменные окружения METRIKA_BOT_TOKEN, METRIKA_CHAT_ID для CLI/cron. Не вставляйте токен бота в статью, публичный ресурс MODX или доступный из браузера файл.

// /home/USER/private/metrika-watch.php  — outside public_html
// CLI PHP + cURL. This checks script availability, NOT Metrica reports.
if (PHP_SAPI !== 'cli') { exit(1); }

$stateFile = __DIR__ . '/metrika-watch-state.json';
$state = is_file($stateFile)
    ? json_decode((string)file_get_contents($stateFile), true) : null;
if (!is_array($state)) {
    $state = ['status' => 'unknown', 'failures' => 0];
}

$ch = curl_init('https://mc.yandex.ru/metrika/tag.js');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 12,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_USERAGENT => 'SiteOwner-Metrica-Healthcheck/1.0',
]);
$body = curl_exec($ch);
$http = (int)curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
$error = curl_error($ch);
curl_close($ch);
$ok = ($body !== false && $http === 200 && strlen($body) > 100);

$state['failures'] = $ok ? 0 : ((int)$state['failures'] + 1);
$newStatus = $ok ? 'up' : ($state['failures'] >= 3 ? 'down' : $state['status']);
$oldStatus = $state['status'];

if ($newStatus !== $oldStatus) {
    $message = $newStatus === 'down'
        ? 'Метрика: скрипт недоступен с сервера 3 проверки подряд. HTTP ' . $http . ' ' . $error
        : 'Метрика: загрузка скрипта снова доступна (не проверка отчётов).';
    // Set environment variables in the hosting/cron configuration, NOT in this file.
    $token = getenv('METRIKA_BOT_TOKEN');
    $chatId = getenv('METRIKA_CHAT_ID');
    if ($token && $chatId) {
        $api = 'https://api.telegram.org/bot' . $token . '/sendMessage';
        $t = curl_init($api);
        curl_setopt_array($t, [
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => http_build_query(['chat_id' => $chatId, 'text' => $message]),
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_TIMEOUT => 10,
        ]);
        $telegramResult = curl_exec($t);
        $telegramCode = (int)curl_getinfo($t, CURLINFO_RESPONSE_CODE);
        curl_close($t);
        if ($telegramResult === false || $telegramCode !== 200) {
            error_log('Metrica Watch: Telegram delivery error');
        }
    } else {
        error_log('Metrica Watch: ' . $message . ' (Telegram not configured)');
    }
}

$state['status'] = $newStatus;
$state['checked_at'] = gmdate('c');
file_put_contents($stateFile, json_encode($state, JSON_UNESCAPED_UNICODE), LOCK_EX);
echo $state['checked_at'] . ' HTTP=' . $http . ' status=' . $state['status'] . PHP_EOL;

Пример задания cron (замените USER и путь к PHP на свои):

# Example: run every 10 minutes with CLI PHP.
*/10 * * * * /usr/bin/php /home/USER/private/metrika-watch.php >> /home/USER/private/metrika-watch.log 2>&1

Сначала запустите PHP-файл вручную из консоли хостинга и проверьте права записи в приватную папку. Проверьте реальное получение сообщений: кратковременно замените адрес проверяемого файла на недоступный тестовый адрес, дождитесь трёх запусков и восстановите URL. После теста убедитесь, что уведомление о восстановлении приходит корректно.

Шаг 3. Как проверить именно статистику, а не скрипт

Для контроля отчётов нужен другой уровень: OAuth-доступ к официальному Reports API Яндекс.Метрики. Он возвращает агрегированные показатели без открытия интерфейса Метрики. Однако HTTP 200 от API и ненулевые визиты — не универсальная проверка здоровья: трафика может не быть, а обработка данных задерживается.

Для надёжного мониторинга обычно используют подтверждённый контрольный визит, известные задержки обработки и сравнение нескольких временных окон. Самодостаточный пример выше этого не делает — и мы специально не выдаём его за полноценную диагностику сервиса.

Нужно ли писать о сбое в подвале сайта?

Покупателю не обязательно знать, что административная статистика недоступна. Публичное сообщение «Метрика не работает» может снизить доверие, хотя сам сайт и оформление заказов продолжают работать. Лучше выводить статус только администратору в менеджере MODX либо отправлять уведомление владельцу.

Для публичного сайта важнее независимый резерв: пять бесплатных альтернатив Метрике. А чтобы при сбое аналитики не потерять реальные обращения, используйте серверный учёт заявок.

Вопрос? Ответ

Нет. Доступность файла подтверждает лишь загрузку скрипта с точки проверки. Отправку хитов и доступность отчётов проверяют отдельно.

Доступ к домену Яндекса может быть нарушен только с конкретного сервера или сети. Поэтому применяются повторные попытки и разные способы диагностики.

Да, но корректно называть это восстановлением проверяемого признака: например, скрипт снова загружается. Это не доказывает восстановление отчётов.

Как бы Вы хотели связаться?

Связь с нами