Спросите свой вопрос и получите сводку документа, используя эту страницу и выбранного вами поставщика 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.
Вызов API из браузера
Тот же токен обеспечивает работу небольшого клиента без учетных данных, поэтому статический сайт или SPA может читать контент своей CMS во время выполнения без сервера, без серверного действия и без какого-либо секрета в бандле:
Копировать код в буфер обмена
Он аутентифицируется на основе editor.clientId: обмен, кеширование и обновление токена обрабатываются внутренне. Область действия (scopes) ограничивает то, к чему у него есть доступ: опубликованный контент словарей и прием событий аналитики. Все остальное (публикация словарей, чтение проекта, расходование AI-кредитов) требует настоящих учетных данных, а значит, сервера или авторизованного пользователя.
Как отключить
Необязательный блок 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 })).
Точка входа отличается для каждого фреймворка, но в любом случае это то же самое место, где вы уже настраиваете Intlayer, поэтому добавлять ничего не нужно:
IntlayerProvider монтирует провайдер аналитики внутренне.
Копировать код в буфер обмена
next-intlayer реэкспортирует IntlayerProvider из React, поэтому аналитика подключается так же.
Копировать код в буфер обмена
Плагин intlayer регистрирует хуки аналитики в жизненном цикле корневого компонента.
Копировать код в буфер обмена
В случае с Nuxt пакет nuxt-intlayer устанавливает плагин за вас: делать ничего не нужно.
setupIntlayer() запускает аналитику из компонента, который настраивает Intlayer.
Копировать код в буфер обмена
IntlayerProvider монтирует провайдер аналитики внутренне.
Копировать код в буфер обмена
IntlayerProvider монтирует провайдер аналитики отложенно (lazy), поэтому этот чанк не попадает в критический путь загрузки.
Копировать код в буфер обмена
provideIntlayer() уже включает в себя provideIntlayerAnalytics().
Копировать код в буфер обмена
Используйте provideIntlayerAnalytics() отдельно только если вы управляете провайдерами по отдельности.
Автоматическое отслеживание на уровне узла
Каждый раз, когда useIntlayer разрешает фрагмент контента для отображения, интерпретатор сообщает о событии content_exposure для этого точного dictionaryKey + пути к ключу + локали — опять же, никаких изменений в коде не требуется. Повторяющиеся показы одного и того же узла в пределах окна очистки объединяются в одно событие со счетчиком (count), поэтому список, перерисовывающийся 50 раз, не отправляет 50 событий.
Отслеживание конверсий для A/B-тестирования
Используйте useConversion(), чтобы связать цель с вариантом, который видела сессия:
Копировать код в буфер обмена
Копировать код в буфер обмена
useConversion— это клиентский хук: пометьте компонент как"use client".
Копировать код в буфер обмена
Копировать код в буфер обмена
Копировать код в буфер обмена
Копировать код в буфер обмена
Копировать код в буфер обмена
Разрешение варианта на стороне клиента
useExperiment() назначает сессии вариант и записывает показ, который становится знаменателем коэффициента конверсии. Отображайте поддерево, зависящее от варианта, только при isAssigned, чтобы ни один посетитель не увидел мелькание контрольного варианта до того, как назначение будет разрешено:
variant — это обычная строка.
Копировать код в буфер обмена
variant — это обычная строка. Назначение происходит в браузере, поэтому компонент должен быть клиентским.
Копировать код в буфер обмена
variant и isAssigned — это Ref.
Копировать код в буфер обмена
variant и isAssigned — это сторы (stores): читайте их с префиксом $.
Копировать код в буфер обмена
variant — это обычная строка.
Копировать код в буфер обмена
variant и isAssigned — это Accessor: вызывайте их, чтобы прочитать значение.
Копировать код в буфер обмена
variant и isAssigned — это Signal: вызывайте их, чтобы прочитать значение.
Копировать код в буфер обмена
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, и секрет никогда не доступен в браузере: этот фрагмент кода выполнял бы неаутентифицированные запросы, если бы он там работал. Держите его в обработчике маршрута, серверном действии или скрипте.
