Спросите свой вопрос и получите сводку документа, используя эту страницу и выбранного вами поставщика AI
История версий
- "Аналитика включена по умолчанию, если установлен `@intlayer/analytics`"v9.3.322.08.2026
- "Init doc — пакет @intlayer/analytics, отслеживание на уровне провайдера/узла, A/B-тестирование, дашборд"v9.0.008.07.2026
Содержимое этой страницы было переведено с помощью ИИ.
Смотреть последнюю версию оригинального контента на английскомЕсли у вас есть идея по улучшению этой документации, не стесняйтесь внести свой вклад, подав запрос на вытягивание на GitHub.
Ссылка на документацию GitHubКопировать Markdown документа в буфер обмена
Документация Intlayer Analytics
@intlayer/analytics — это дополнительный пакет, который показывает, какой контент на самом деле видят ваши посетители (какая страница, в какой локали и какой именно фрагмент переведенного контента), чтобы вы могли лучше понимать свою аудиторию и проводить A/B-тестирование контента.
Содержание
Что отслеживается
@intlayer/analytics объединяет в пакеты три типа анонимных событий:
Открыть таблицу в модальном окне для четкого просмотра всех данных
| Событие | Где фиксируется | О чем оно говорит |
|---|---|---|
page_view | На уровне провайдера (IntlayerProvider) | Какую страницу и локаль просмотрел пользователь при начальной загрузке, смене маршрута или смене локали. |
content_exposure | На уровне узла (useIntlayer / плагины) | Какой ключ словаря / путь к ключу был фактически разрешен и отображен — и, если это часть эксперимента, какой вариант. |
conversion | Везде, где вызывается useConversion() | Достижение цели (регистрация, клик, покупка...), связанное с A/B-вариантом, который видел пользователь в этой сессии. |
События собираются в памяти и отправляются как один пакетный запрос примерно каждые 20 секунд — а не при каждом нажатии клавиши или рендеринге — поэтому аналитика никогда не влияет на время первого рендеринга и не добавляет запросы на каждое взаимодействие.
Как это работает для A/B-тестирования контента
Intlayer уже позволяет вам объявлять Варианты контента (например, словарь hero-banner с вариантами control и black_friday). @intlayer/analytics замыкает цикл:
getVariant(experimentKey, variants)детерминированно назначает каждую анонимную сессию варианту — это чистая функция от ID сессии и ключа эксперимента, поэтому назначение стабильно на протяжении всей сессии и не требует серверных запросов до первого рендеринга (без мерцания и сдвигов макета).- Каждое событие
content_exposureсодержит показанныйvariant. useConversion()позволяет связать цель (например,"cta_click") с этим вариантом.- Эндпоинт результатов экспериментов в дашборде сравнивает коэффициенты конверсии по вариантам, включая статистическую значимость (z-тест).
Установка
@intlayer/analytics — опциональная зависимость каждого пакета фреймворка (react-intlayer, next-intlayer, vue-intlayer, …), поэтому в большинстве проектов он уже установлен. Установите его явно, если ваша конфигурация пропускает опциональные зависимости (npm install --no-optional, …):
Копировать код в буфер обмена
Чтобы включить аналитику, достаточно установить пакет: значение analytics.enabled по умолчанию равно true, а @intlayer/config приводит его к false, если пакет не найден в вашем проекте. Если вы её не установите, все точки интеграции будут разрешаться в пустые операции (no-op) — см. Нулевые затраты, если не установлено ниже.
Настройка
Аналитике не нужна настройка, чтобы начать работу: она включена по умолчанию и переиспользует существующий блок конфигурации editor для эндпоинта и ключа проекта.
Копировать код в буфер обмена
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
editor: {
backendURL: "https://back.intlayer.org", // Также используется как конечная точка для сбора аналитики
clientId: "your-client-id", // Также используется как ключ проекта аналитики
clientSecret: "your-client-secret",
},
};
export default config;
editor.backendURL— базовый URL, на который отправляются события аналитики (POST {backendURL}/api/analytics/events).editor.clientId— открытый ключ проекта, присваиваемый каждому принятому событию. Он также действует как переключатель включения: аналитика остается полностью отключенной (и удаляется при tree-shaking, см. ниже), пока не настроенclientId.
Если вы самостоятельно размещаете (self-host) Intlayer, аналитика автоматически указывает на ваш собственный экземпляр, поскольку она использует общий editor.backendURL.
Как отключить
Необязательный блок analytics настраивает — или полностью отключает — сбор данных:
Копировать код в буфер обмена
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
analytics: {
enabled: false, // По умолчанию: true — исключает всю интеграцию из сборки
flushInterval: 20_000, // Миллисекунды между двумя пакетными отправками
sampleRate: 1, // Доля записываемых сессий, от 0 (ни одной) до 1 (все)
},
};
export default config;
Удаление @intlayer/analytics даёт тот же эффект, что и enabled: false. Полный список полей см. в справочнике по конфигурации.
Использование
Автоматическое отслеживание на уровне провайдера
Никаких изменений в коде не требуется. Как только установлен @intlayer/analytics и настроен editor.clientId, IntlayerProvider автоматически:
- инициализирует клиент аналитики при монтировании,
- записывает
page_viewпри начальной загрузке, - записывает
page_viewпри каждой смене локали, - запускает цикл очистки (flush) с интервалом около 20 с и отправляет оставшиеся события при размонтировании / закрытии вкладки (через
navigator.sendBeacon, с откатом наfetch(..., { keepalive: true })).
Автоматическое отслеживание на уровне узла
Каждый раз, когда useIntlayer разрешает фрагмент контента для отображения, интерпретатор сообщает о событии content_exposure для этого точного dictionaryKey + пути к ключу + локали — опять же, никаких изменений в коде не требуется. Повторяющиеся показы одного и того же узла в пределах окна очистки объединяются в одно событие со счетчиком (count), поэтому список, перерисовывающийся 50 раз, не отправляет 50 событий.
Отслеживание конверсий для A/B-тестирования
Используйте useConversion(), чтобы связать цель с вариантом, который видела сессия:
Разрешение варианта на стороне клиента
</Tab> </Tabs>
Weights необязательны — передайте один на вариант, чтобы изменить распределение, например useExperiment("homepage-hero", ["default", "black_friday"], [9, 1]).
Затем дочерний компонент читает Variant словаря, который совпадает:
Копировать код в буфер обмена
Чтение варианта в дочернем компоненте — это то, что делает это работающим вне React: в Vue, Svelte, Solid и Angular селектор, передаваемый в useIntlayer, захватывается при инициализации компонента, поэтому чтение должно происходить в компоненте, который монтируется только после того, как вариант известен.
Если эксперимент охватывает целую страницу, а не отдельный словарь, поместите вариант на provider вместо этого — см. Ambient variant. Каждый useIntlayer ниже затем разрешается против него без изменения места вызова.
Если вам нужно получить необработанное значение переменной за пределами компонента, обратитесь непосредственно к клиенту:
getVariantтолько присваивает — он не записывает экспозицию. ПредпочитайтеuseExperiment(), иначе коэффициент конверсии не будет иметь знаменателя.
Конфиденциальность и производительность
- Анонимность по дизайну: сессии идентифицируются по ротируемому id; сервер когда-либо сохраняет только SHA-256 хэш этого id — никогда сам id и никогда IP-адрес.
- Приблизительное местоположение: только код страны, полученный из заголовков геолокации CDN (
cf-ipcountry,x-vercel-ip-country, ...) — IP не считывается и не сохраняется. - URL исключают параметры поиска по умолчанию, поэтому строки запроса никогда не фиксируются.
- Семплирование:
sampleRateпозволяет сохранять только часть событий показа контента в приложениях с высоким трафиком. - Пакетная передача: один запрос примерно каждые 20 секунд (
flushInterval) или раньше, если буфер заполнен (maxBufferSize) — никогда не отправляется один запрос на каждое событие.
Нулевые затраты, если не установлено
@intlayer/analytics следует тому же паттерну опциональных зависимостей, что и @intlayer/editor:
- каждая точка интеграции загружает пакет через динамический
import(), обернутый вtry/catch— приложение, которое никогда не устанавливает@intlayer/analytics, не увеличивает размер сборки (bundle) и не тратит ресурсы во время выполнения, а также никогда не видит ошибок; - переменная окружения времени компиляции (
INTLAYER_ANALYTICS_ENABLED), автоматически устанавливаемая@intlayer/configв'false', когда пакет не установлен,analytics.enabledравноfalseили не настроенeditor.clientId, позволяет бандлерам удалить всю интеграцию как мёртвый код (dead-code-eliminate); - аналитика отключена внутри iframe предварительного просмотра редактора/CMS Intlayer, поэтому сессии в редакторе никогда не учитываются как реальный трафик.
Дашборд: Страница Analytics
Как только ваш проект соберет события, страница Analytics в дашборде Intlayer (видна в боковой панели после выбора проекта) покажет:
- Активные пользователи — уникальные посетители за выбранное скользящее окно (7 / 30 / 90 дней).
- Пользователи сегодня и пользователи за последние 7 дней.
- Просмотры страниц за выбранное окно.
- График динамики уникальных посетителей по дням.
- Вкладки с разбивкой по Локалям и Местоположению, ранжирующие вашу аудиторию по локали и по стране.
Справочник API бэкенда
Все эндпоинты для чтения требуют аутентификации; прием данных публичный и ассоциируется по clientId в теле запроса.
Открыть таблицу в модальном окне для четкого просмотра всех данных
| Метод | Эндпоинт | Описание |
|---|---|---|
POST | /api/analytics/events | Прием пакета событий (публичный, ассоциируется по clientId в теле). |
GET | /api/analytics/overview | Общие показатели страниц/локалей для аутентифицированного проекта. |
GET | /api/analytics/audience?days=30 | Уникальные посетители, просмотры страниц, серии по дням, разбивка (локаль + страна). |
GET | /api/analytics/content-stats | Общие показатели показов контента, сгруппированные по ключу словаря / пути / локали. |
GET | /api/analytics/experiments/:experimentKey | Коэффициенты конверсии по вариантам и статистическая значимость для A/B-теста. |
Вы также можете вызывать их программно с помощью CMS SDK:
Копировать код в буфер обмена
Только на стороне сервера.createIntlayerCMS()аутентифицируется с помощьюclientId+clientSecret, и секрет никогда не доступен в браузере — этот фрагмент кода выполнял бы неаутентифицированные запросы, если бы он там работал. Держите его в обработчике маршрута, серверном действии или скрипте.
