Видимость в Яндексе, стабильный LCP и SEO-мониторинг: три связанных фикса
- SEO
- Core Web Vitals
- Yandex
- аналитика
- мониторинг
- performance
- 152-ФЗ
Три, казалось бы, разных задачи — «Вебмастер не видит Метрику», «PageSpeed упал с 97 до 87», «как не пропустить просадку позиций» — на деле одна тема: видимость сайта в поиске и контроль над ней. Ниже — как мы их связали и закрыли.
1. Cookie-гейт прятал Метрику от Яндекса
Симптом: Яндекс.Вебмастер «не видел» счётчик Метрики. Но корень оказался не в привязке, а в том, что счётчик стоял за двойным гейтом:
- Cookie-consent —
metrika-init.jsгрузился только если вlocalStorageбыло согласие на аналитику. - Lazy-load — отложенная загрузка ради Core Web Vitals.
Поисковый бот Яндекса не нажимает «согласен» и не взаимодействует со страницей. Значит, для него счётчик не инициализировался вообще — и сайт не накапливал поведенческие факторы, один из сильнейших сигналов ранжирования в Рунете.
Решение: Метрика как технически необходимая
Cookie-гейт для Метрики — это была перестраховка, а не требование. Метрика — российский сервис: оператор ПДн — Яндекс, данные в РФ. В slim-режиме (webvisor и clickmap выключены) она собирает только обезличенную посещаемость, не действия пользователя.
Мы отнесли Метрику к категории «Необходимые» и грузим её безусловно (но всё ещё lazy — чтобы не вредить скорости):
// metrika-init.js — безусловная, но отложенная загрузка
var DELAY_DESKTOP = 2000, DELAY_MOBILE = 2500;
var DELAY = matchMedia('(max-width: 767px)').matches ? DELAY_MOBILE : DELAY_DESKTOP;
// init по первому из: interaction | requestIdleCallback | setTimeout(DELAY)
152-ФЗ соблюдён: cookie-баннер и privacy переписаны (Метрика → «Необходимые, обезличенная статистика, оператор Яндекс/РФ»), webvisor/clickmap выключены. А привязка Вебмастер↔Метрика, как выяснилось, вообще работает на уровне аккаунтов Яндекса — не зависит от того, видит ли бот счётчик в DOM.
2. PageSpeed «упал» — но виновата не Метрика
После включения безусловной Метрики mobile-PageSpeed показал 87 вместо 97. Логичное подозрение — тяжёлый сторонний скрипт. Но диагностика через PageSpeed API (мы написали свой скрипт-обёртку) показала иное:
- TBT (Total Blocking Time) — стабильно 0–20ms. Значит lazy-Метрика главный поток не блокирует. Она не виновата.
- LCP прыгал 1.9 ↔ 3.7s между идентичными прогонами → score 87 ↔ 100. Это вариативность lab-замера.
- Speed Index стабильно высокий.
Один прогон PageSpeed — не диагноз. После 3-4 замеров стало ясно: проблема не в Метрике, а в коде первого экрана.
Корень: entrance-анимация на LCP-элементе
У hero-блока стояла анимация появления:
<div class="animate-in fade-in slide-in-from-bottom-4 duration-700">
<h1>Сложное ПО. Без воды.</h1> <!-- это и есть LCP-элемент -->
LCP фиксируется по достижении финального вида элемента. Заголовок «въезжал» снизу с затуханием за 700ms → LCP откладывался на эти 700ms и прыгал в зависимости от таймингов lab. Speed Index страдал по той же причине — above-the-fold контент проявлялся постепенно.
Убрали entrance-анимации с обеих колонок hero. Результат — LCP детерминированно 1.7s (три прогона подряд), score стабильно 94–100.
Правило: не вешайте entrance-анимации (fade/slide/translate) на above-the-fold LCP-элементы. Анимации входа — только ниже сгиба.
3. От pull-дашборда к push-мониторингу
У нас уже есть серверная аналитика (/admin/analytics): воронка «Обсудить → лид» по аудиториям, без cookie. Плюс Я.Метрика и Я.Вебмастер. Но всё это pull — надо зайти и посмотреть. Обвал замечают постфактум: один из наших сайтов потерял 68% поисковых кликов за неделю, и это увидели только при ручной проверке.
Мы спроектировали push-мониторинг поверх существующей инфраструктуры (фоновый воркер + Hatchet cron + Telegram-дайджесты):
- Еженедельный дайджест — сводка по сайтам: PageSpeed, трафик (Метрика), органика и позиции (Вебмастер), воронка (своя аналитика), со стрелками дельты неделя/неделю.
- Ежедневные алерты — молчат в норме, пишут только при пробитии порога: трафик −40%, клики −30%, средняя позиция +1.5, PageSpeed mobile < 85, сайт не отвечает 200.
Три источника сшиваются в одну воронку: позиции → трафик → конверсия. Пороги — параметрами, не в коде. Снимок каждого прогона пишется в таблицу seo_snapshots — это и история тренда, и основа для графиков.
Ключевая идея — раннее обнаружение: еженедельный Вебмастер-дайджест ловит дельту позиций до того, как просадка станет заметной по выручке.
Что в сумме
- Метрика видна Яндексу → поведенческие факторы работают на ранжирование (152-ФЗ соблюдён через slim-режим).
- mobile-LCP стабилен 1.7s, PageSpeed 94–100 — за счёт снятия анимаций с первого экрана, а не урезания аналитики.
- Дизайн мониторинга, который превращает «узнали об обвале постфактум» в «получили алерт за день».