К содержанию
ActionPulse

Ошибки на сайте и скорость страниц

Диагностика в ActionPulse: какие ошибки браузера собираются и как группируются, какие метрики скорости считаются, что означают оценки влияния и корреляции.

Кому
Фронтенд-разработчикам и продуктовым командам
Проверено
На этой странице

Диагностика отвечает на один вопрос: не мешает ли техника продукту. Ошибки JavaScript и скорость страниц лежат здесь рядом с воронками не случайно — их ценность в том, что их можно сопоставить с конверсией.

Это не замена системе мониторинга ошибок: полных стеков здесь нет, карты исходников (source maps) не применяются, оповещений о новых ошибках этот раздел не рассылает. Зато он знает, какая конверсия была у людей, которые ошибку видели.

Поведение → Диагностика.

Смотреть раздел может любой участник проекта, включать сбор — «Владелец» и «Админ». Пока возможность не включена тарифом, данные не загружаются вовсе: экран честно говорит об этом вместо пустых таблиц.

Ошибки по стеку

Таблица «Ошибки по стеку» показывает четыре колонки: Stack hash, Сообщение, Случаи и Пользователи. Сортировка — по числу случаев, страница — 50 групп, дальше «Показать ещё».

Что именно собирается

Собирается Не собирается
Необработанные ошибки JavaScript (событие error окна) Отклонённые промисы без обработчика
Сообщение об ошибке, очищенное и обрезанное до 200 символов Полный стек вызовов
8-символьный отпечаток нормализованного стека Вызовы console.error
Не более 10 ошибок на одну сессию Ошибки сетевых запросов и коды ответов API

Ограничение в 10 ошибок на сессию — защита от страницы, которая падает в цикле: одиннадцатая и последующие ошибки той же сессии не отправляются. Если у ошибки неправдоподобно мало «случаев» при большом числе пользователей, дело обычно именно в этом.

Полный стек не отправляется с браузера и не хранится. Вместо него считается отпечаток: из стека берутся не более двух верхних кадров, убираются адрес origin, query-строка и номера строки и столбца, и по результату считается восьмисимвольный хеш. Сообщение перед отправкой проходит очистку от похожего на секреты и персональные данные и обрезается.

Как работает группировка

Группа — это один отпечаток стека. В колонке «Сообщение» показывается самое свежее сообщение группы, «Случаи» — число событий, «Пользователи» — число разных людей.

Из способа нормализации следуют два практических вывода:

  • Номера строк не разделяют группы. Одна и та же ошибка после переформатирования кода останется одной группой.
  • Имя файла сборки — разделяет. Если в имени бандла есть хеш содержимого (main-a1b2c3.js), после релиза с новым бандлом та же ошибка станет новой группой. Это ожидаемо: сравнивать «до» и «после» релиза нужно по датам, а не по одному отпечатку.

Web Vitals p75 по URL

Второй раздел показывает три метрики скорости — и только эти три:

Метрика Что измеряет Как собирается
LCP момент отрисовки самого крупного элемента наибольшее значение за загрузку страницы
CLS суммарный сдвиг вёрстки сумма сдвигов, кроме вызванных вводом пользователя
INP задержка отклика на взаимодействие наибольшая длительность среди взаимодействий дольше 40 мс

Ни FCP, ни TTFB, ни FID в продукте нет — не ищите их на экране.

На страницу отправляется ровно одно событие с метриками, и отправляется оно в момент ухода со страницы. Поэтому:

  • страница, которую не закрыли и не покинули, замера не даст;
  • значения относятся к загрузке страницы, а не к сессии целиком.

В таблице: URL, Замеры, LCP p75, CLS p75 (три знака после запятой), INP p75. «Замеры» — число полученных событий с метриками, то есть просмотров страницы, а не число людей. p75 считается как точный 75-й процентиль по всем замерам этого адреса за период: у трёх четвертей замеров значение не выше показанного.

Оценки: влияние ошибки и корреляция с LCP

Две панели считают связь техники с конверсией. Обе обведены рамкой, помечены значком «Оценка» и несут подпись «Оценочная корреляция: результат показывает связь, а не доказывает причинность». Пометка не снимается никогда — она приходит с сервера вместе с каждым ответом.

Читать это стоит буквально. Оценка помогает выбрать, что починить первым; она не доказывает, что починка даст ровно такой прирост.

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

Влияние ошибки на выбранную воронку

Нажмите на строку ошибки — под таблицей появится панель «Влияние ошибки на выбранную воронку» и кнопка «Рассчитать влияние».

Расчёт делит пользователей на две группы:

  • Видели ошибку — те, у кого за выбранный период была хотя бы одна ошибка с этим отпечатком;
  • Не видели ошибку — все остальные.

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

Чего расчёт не делает: он не проверяет, что ошибка случилась именно до конверсии, не учитывает разбивку воронки и не принимает ссылки на сохранённые сегменты. Это сравнение двух групп, а не восстановление последовательности событий.

LCP и конверсия

Нажмите на строку в таблице Web Vitals — появится панель «LCP и конверсия».

Событие-конверсия берётся из последнего шага выбранной воронки и отдельно не настраивается. В выборку попадают сессии, у которых есть замер LCP на этом адресе.

Три показателя:

  • Корреляция — коэффициент Пирсона между LCP сессии и фактом конверсии, от −1 до 1, три знака после запятой. Отрицательное значение означает, что более медленным сессиям чаще соответствует отсутствие конверсии.
  • Конверсия при быстром LCP и Конверсия при медленном LCP — доли сессий с конверсией в двух половинах выборки.

Граница «быстро/медленно» не задаётся вручную: это p75 LCP по той же выборке. Быстрые — сессии с LCP ниже p75, медленные — не ниже. Из этого следует, что «медленных» сессий примерно четверть, и что граница у каждой страницы своя.

Периоды и лимиты

Параметр Значение
Период по умолчанию последние 30 дней
Максимальный период 400 дней
Размер страницы 50 строк
Частота запросов 120 в минуту на пользователя и проект
Время на запрос 30 секунд, дальше ответ с кодом query_timeout

Долгий период на большом проекте — самая частая причина таймаута. Сузьте интервал: для ошибок обычно достаточно недели.

Как перейти от ошибки к записи сессии

Прямой ссылки «открыть запись» на экране диагностики нет — учитывайте это, чтобы не искать её. Работающий маршрут состоит из двух шагов:

  1. Запомните период и, если он известен, адрес проблемной страницы.
  2. Откройте Поведение → Записи действий, задайте тот же период, в фильтре «URL содержит» укажите страницу и выберите «Есть запись».

В плеере ошибки видны как маркеры JS error на таймлайне: в легенде есть счётчик, а список маркеров перематывает запись прямо к моменту ошибки. Так вы находите не «какую-то сессию с ошибкой», а конкретный момент, когда она произошла. Подробнее — в статье про записи сессий.

Если у вас есть идентификатор пострадавшего пользователя (например, из обращения в поддержку), быстрее пойти через карточку человека: там сессии перечислены списком, и у записанных есть ссылка «Смотреть запись».

Если данных нет или они выглядят странно

Симптом Обычная причина
«Ошибок нет» при живом сайте сбор диагностики выключен в настройках проекта
Раздел закрыт заглушкой диагностика не входит в текущий тариф или лицензию on-prem
Ошибка есть в консоли, но не в отчёте это отклонённый промис или console.error — такие не собираются
Случаев подозрительно мало сработало ограничение 10 ошибок на сессию
После релиза все ошибки «новые» сменилось имя файла сборки, отпечаток стека изменился
Замеров скорости нет пользователи не покидают страницу штатно либо сбор выключен
Одна страница разбилась на десятки строк адреса не нормализуются, различаются query или идентификатором в пути
Кнопки расчёта выключены в проекте нет сохранённой воронки хотя бы с двумя шагами
Ответ с ошибкой таймаута период слишком длинный для объёма данных