Яндекс Метрика и счётчики: как они замедляют сайт
Сколько весит Метрика, что отключить из её опций и как ускорить загрузку, не теряя данных. Реальные замеры на типичных российских сайтах.
Содержание
Счётчик Метрики это 80-150 КБ скриптов и 200-400 мс процессорного времени на странице. Сам по себе терпимо. Проблема возникает в сумме: счётчик, пиксель, чат и виджет звонка вместе дают под 800 КБ и до полутора секунд задержки до готовности страницы.
Яндекс Метрика на типичной странице это 80-150 КБ JavaScript, 200-400 мс CPU-времени и 5-10 запросов в фоне. Если у вас на сайте ещё счётчик top.mail.ru, пиксель ВКонтакте, JivoSite-чат и виджет обратного звонка, в сумме набегает легко 800 КБ внешних скриптов и 1.5 секунды задержки до интерактивности.
При этом без Метрики жить нельзя: половина бизнес-решений принимается по её данным. Вопрос не «как её убрать», а «как настроить так, чтобы она нагружала меньше». Ниже разберу, что именно она делает в браузере, что можно отключить, и как загрузить её отложенно без потери данных.

Что Метрика реально делает
Когда вы вставляете стандартный код Метрики, в браузер пользователя загружается:
tag.jsилиtag.min.jsосновной скрипт. Около 80 КБ.watch.jsскрипт записи Вебвизора (если включён). Ещё 60-80 КБ.- Несколько fetch-запросов на
mc.yandex.ruиwebvisor.comдля отправки событий.
В работе:
- Слушает все клики на странице.
- Слушает скролл, время на странице, движение мыши, фокусировку на полях.
- Записывает Вебвизор кадр за кадром (если включён).
- Отправляет данные пакетами раз в N секунд.
CPU-время на средней странице: 300-500 мс с включённым Вебвизором, 100-150 мс без него.
Влияние на Core Web Vitals
Метрика загружается асинхронно, поэтому она не блокирует первый рендер. Но она влияет на:
- TBT (Total Blocking Time) через долгие задачи парсинга и инициализации.
- INP (Interaction to Next Paint) через слушатели на каждый клик и скролл.
- LCP (Largest Contentful Paint) косвенно, если на странице мало других тяжёлых скриптов и Метрика становится самой большой долей CPU.
На бенчмарках с pagespeed.web.dev на чистой странице LCP падает на 50-100 мс при добавлении Метрики, INP на 30-60 мс.
В реальности на странице с темой WordPress и десятком плагинов Метрика тонет в общем шуме и её влияние сложно отделить от остального.
Как настроить, чтобы она нагружала меньше
Несколько вещей, которые я сразу делаю на каждом клиентском сайте.
Отключить Вебвизор, если не используется
Вебвизор это «запись» сессий пользователей с движением мыши и кликами. Очень удобный для UX-анализа, но тяжёлый.
Если вы смотрите Вебвизор раз в месяц, его можно отключить вообще, или оставить только на 10 процентах посещений (есть настройка в Метрике).
В код счётчика добавляется параметр:
ym(123456, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor: false // отключили
});
Экономия: 60-80 КБ скрипта и 150-200 мс CPU.
Отключить отслеживание ссылок
trackLinks: true подписывается на каждую ссылку и считает, какие нажимаются. На странице с 200 ссылками (длинная категория или статья) это 200 слушателей.
Если внешних ссылок мало и они вам не нужны как событие, ставим trackLinks: false.
Не использовать карту скроллинга
Если в Метрике вы пользуетесь только базовыми посещениями и целями, отключаем clickmap: false и accurateTrackBounce: false. Карта кликов тоже отключается.
Минимальный код:
<script>
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(YOUR_ID, "init", {
defer: true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/YOUR_ID" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
Экономия по сравнению с полным набором: 30-50 КБ и 100 мс CPU.
Отложенная загрузка скрипта
По умолчанию счётчик загружается сразу при открытии страницы. Можно отложить его до момента «после первого взаимодействия пользователя» или до момента «после полной загрузки страницы».
Метод 1, после события load:
<script>
window.addEventListener('load', function() {
setTimeout(function() {
var script = document.createElement('script');
script.src = 'https://mc.yandex.ru/metrika/tag.js';
script.async = true;
script.onload = function() {
ym(YOUR_ID, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:false});
};
document.head.appendChild(script);
}, 1500);
});
</script>
Это ждёт, пока страница полностью загрузится, потом ещё 1.5 секунды, потом подгружает Метрику. LCP не страдает совсем.
Метод 2, после первого взаимодействия:
<script>
function loadMetrika() {
if (window._metrikaLoaded) return;
window._metrikaLoaded = true;
var script = document.createElement('script');
script.src = 'https://mc.yandex.ru/metrika/tag.js';
script.async = true;
document.head.appendChild(script);
script.onload = function() {
ym(YOUR_ID, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true});
};
}
['scroll', 'mousedown', 'touchstart', 'keydown'].forEach(function(e) {
window.addEventListener(e, loadMetrika, {once: true, passive: true});
});
setTimeout(loadMetrika, 5000); // на всякий случай
</script>
Это ещё агрессивнее: пока пользователь не взаимодействует, скрипт не подгружается совсем.
Минус: если пользователь зашёл на страницу, посмотрел её 5 секунд и ушёл, не прокручивая и не кликая, посещение в Метрику может не записаться. Это важно понимать.
Прокси через свой сервер
Самый продвинутый вариант. Устанавливаем у себя на сервере nginx-прокси, который переадресовывает запросы Метрики через ваш домен. Браузер видит запросы к https://saitfix.ru/metrika/..., а не к mc.yandex.ru. Преимущества:
- Меньше DNS-запросов (браузер уже подключён к saitfix.ru).
- Не блокируется анти-трекерами.
- Если в будущем какой-то ad-blocker заблокирует mc.yandex.ru, ваша аналитика всё равно работает.
Минусы: нужно поднимать nginx-конфиг, поддерживать, обновлять при изменениях у Яндекса.
Типичный конфиг для nginx:
location /metrika/ {
proxy_pass https://mc.yandex.ru/;
proxy_set_header Host mc.yandex.ru;
proxy_set_header User-Agent $http_user_agent;
proxy_set_header X-Forwarded-For $remote_addr;
}
В коде счётчика подменяем URL:
ym(YOUR_ID, "init", {
metrikaUrl: "https://saitfix.ru/metrika"
});
Делаю так на крупных проектах. Для маленького сайта избыточно.

Что делать с другими счётчиками
Если на сайте кроме Метрики ещё что-то стоит, по приоритету.
Счётчик top.mail.ru
Старый, всё ещё используется. Размер 30-40 КБ. Польза для большинства сайтов нулевая (вы и так получаете данные из Метрики).
Если нужен только для топ.рейтинг (галочка в каталоге Mail.ru) можно убрать сам счётчик и оставить только пиксель отслеживания посещений в облегчённом варианте.
Пиксель ВКонтакте
Полезен, если вы запускаете рекламу ВКонтакте. Размер 20-30 КБ. Если рекламы нет, пиксель не нужен.
Google Analytics
В России в 2026 году Google Analytics это лотерея: то работает, то нет, то блокируется на стороне сети. Я снимаю с большинства клиентских сайтов. Вместо неё Метрика собирает 95 процентов нужного, остальные 5 процентов недостающих метрик можно собрать своим логированием.
Чаты JivoSite, Calltouch, Битрикс24
Тяжёлые: 100-200 КБ JS, 50-100 мс CPU на инициализацию. И что хуже, они часто блокируют пользовательский ввод на пол-секунды при первом открытии чата.
Если чат открывает 5 процентов посетителей, можно загружать его лениво:
<script>
function loadJivo() {
if (window._jivoLoaded) return;
window._jivoLoaded = true;
var script = document.createElement('script');
script.src = '//code.jivosite.com/widget/YOUR_ID';
script.async = true;
document.head.appendChild(script);
}
['scroll', 'mousedown', 'touchstart'].forEach(function(e) {
window.addEventListener(e, loadJivo, {once: true, passive: true});
});
</script>
Подробнее про чаты-виджеты я писал в соседнем материале.
Сколько в итоге можно сэкономить
Возьмём типичную страницу с Метрикой полной комплектации, JivoSite, top.mail.ru и пикселем ВК.
До оптимизации: — 800 КБ JS внешних счётчиков. — 1.5 секунды CPU-времени. — 12 fetch-запросов на сторонние домены. — LCP проигрывает 200-300 мс.
После оптимизации: — 50 КБ JS на старте, остальное лениво после взаимодействия. — 100 мс CPU-времени до загрузки. — 1-2 запроса на сторонние домены до взаимодействия. — LCP без проигрыша.
Реальный эффект на PageSpeed: +5-15 баллов в мобильной оценке.
Что не нужно делать
Несколько типичных ошибок.
Удалять Метрику совсем. Без аналитики бизнес слепнет. Лучше оптимизировать, чем удалять.
Использовать «заглушку Метрики». Бывают плагины WordPress, которые подменяют скрипт на свой «облегчённый». Я ни одному не доверяю: данные собираются хуже, событий меньше, в Метрике видна неполная картина.
Загружать Метрику с разных доменов. Иногда вижу, что счётчик стоит и на основном домене, и на CDN. Тогда события дублируются, статистика рушится. Один счётчик на один домен.
Слушать пиксели только через ad-блокировщик. Некоторые «оптимизаторы» советуют закрыть пиксели для всех пользователей. Это та же оптимизация, что удалить Метрику: данные исчезают.

Чек-лист «как ускорить Метрику»
В порядке от простого к сложному.
- Отключить Вебвизор, если не пользуетесь регулярно.
- Поставить
defer: trueв инициализации. - Снять старые счётчики, которыми не пользуетесь (top.mail.ru, GA).
- Лениво загружать Метрику после
loadсобытия. - Лениво загружать чаты после первого взаимодействия.
- Прокси Метрики через свой сервер (только для крупных проектов).
Чек-лист «как проверить эффект»:
- PageSpeed Insights мобильная версия до и после.
- DevTools → Performance → запись 30 секунд работы со страницей.
- DevTools → Network → отчёт по сторонним скриптам.
- Лог Метрики через 24 часа: не упало ли число посещений.
Если посещения упали в Метрике, значит ленивая загрузка слишком агрессивная и теряет короткие визиты. Тогда уменьшаем задержку.
Куда дальше
Связанные материалы: Виджеты JivoSite, Битрикс24 и скорость, Яндекс Метрика: настройка целей для сайта услуг, PageSpeed Insights показывает 30 баллов: что чинить.
Если разбираться с настройками Метрики, считать вес скриптов и тестировать на разных устройствах вам некогда, у меня в годовом и месячном тарифе абонентского обслуживания это входит в стандартный аудит скорости. Заявка через форму на главной.
Частые вопросы
Сильно ли Метрика замедляет сайт
Сама по себе умеренно: около сотни килобайт и пара сотен миллисекунд процессорного времени. Заметной проблема становится, когда счётчиков и виджетов на странице несколько.
Как настроить, чтобы нагружала меньше
Отключить то, чем не пользуетесь: запись сессий и карту кликов имеет смысл держать включёнными только в период разбора, а не постоянно.
Можно ли отложить загрузку счётчика
Можно, но осторожно: слишком поздняя загрузка теряет часть визитов. Компромисс это загрузка после отрисовки первого экрана, а не по прокрутке или по клику.
Что убрать в первую очередь
Счётчики систем, в которые никто не заходит. На старых сайтах их обычно два-три, поставленных разными подрядчиками, и данные оттуда не смотрит никто.