Ошибки на сайте и скорость страниц
Диагностика в 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 |
Долгий период на большом проекте — самая частая причина таймаута. Сузьте интервал: для ошибок обычно достаточно недели.
Как перейти от ошибки к записи сессии
Прямой ссылки «открыть запись» на экране диагностики нет — учитывайте это, чтобы не искать её. Работающий маршрут состоит из двух шагов:
- Запомните период и, если он известен, адрес проблемной страницы.
- Откройте Поведение → Записи действий, задайте тот же период, в фильтре «URL содержит» укажите страницу и выберите «Есть запись».
В плеере ошибки видны как маркеры JS error на таймлайне: в легенде есть счётчик, а список маркеров перематывает запись прямо к моменту ошибки. Так вы находите не «какую-то сессию с ошибкой», а конкретный момент, когда она произошла. Подробнее — в статье про записи сессий.
Если у вас есть идентификатор пострадавшего пользователя (например, из обращения в поддержку), быстрее пойти через карточку человека: там сессии перечислены списком, и у записанных есть ссылка «Смотреть запись».
Если данных нет или они выглядят странно
| Симптом | Обычная причина |
|---|---|
| «Ошибок нет» при живом сайте | сбор диагностики выключен в настройках проекта |
| Раздел закрыт заглушкой | диагностика не входит в текущий тариф или лицензию on-prem |
| Ошибка есть в консоли, но не в отчёте | это отклонённый промис или console.error — такие не собираются |
| Случаев подозрительно мало | сработало ограничение 10 ошибок на сессию |
| После релиза все ошибки «новые» | сменилось имя файла сборки, отпечаток стека изменился |
| Замеров скорости нет | пользователи не покидают страницу штатно либо сбор выключен |
| Одна страница разбилась на десятки строк | адреса не нормализуются, различаются query или идентификатором в пути |
| Кнопки расчёта выключены | в проекте нет сохранённой воронки хотя бы с двумя шагами |
| Ответ с ошибкой таймаута | период слишком длинный для объёма данных |