Когда статистика Яндекс.Метрики перестаёт обновляться, владельцу сайта трудно понять, что именно сломалось: код счётчика, браузер, соединение с Яндексом или отчёты сервиса. Поэтому первое правило мониторинга — не смешивать разные признаки работоспособности.
Если вы столкнулись с текущей проблемой, начните с разбора сбоя Метрики от 12 октября 2026 года. В этой инструкции сделаем диагностику в браузере и независимую проверку скрипта с уведомлениями в Telegram.
Мониторинг должен различать ошибку счётчика, сеть и интерфейс статистики.
Три уровня проверки Метрики
- Код присутствует. Сниппет установлен в HTML на нужных страницах.
- События отправляются. Браузер выполняет код, отправляет просмотры и события; они видны в инструментах отладки.
- Отчёты доступны и обновляются. Данные появляются в интерфейсе или официальном 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 либо отправлять уведомление владельцу.
Для публичного сайта важнее независимый резерв: пять бесплатных альтернатив Метрике. А чтобы при сбое аналитики не потерять реальные обращения, используйте серверный учёт заявок.


