SvelteKit предоставляет гибкую платформу для интеграции сторонних библиотек аналитики благодаря своей архитектуре, основанной на адаптерах и серверных/клиентских хуках. Правильная организация аналитических событий позволяет отслеживать поведение пользователей без потери производительности и с учетом SSR (Server-Side Rendering).
Для большинства популярных сервисов, таких как Google Analytics, Plausible или Mixpanel, установка сводится к подключению официального SDK через npm или добавлению скрипта в проект. Пример для Google Analytics:
npm install gtag.js
В SvelteKit рекомендуется создавать отдельный модуль для инициализации аналитики:
// src/lib/analytics.js
export function initAnalytics(trackingId) {
if (typeof window !== 'undefined') {
window.dataLayer = window.dataLayer || [];
function gtag(){window.dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', trackingId);
}
}
SvelteKit использует файл src/routes/+layout.svelte и
соответствующие хуки, что позволяет отслеживать переходы между
страницами:
// src/routes/+layout.svelte
<script>
import { onMount } from 'svelte';
import { initAnalytics } from '$lib/analytics';
import { afterNavigate } from '$app/navigation';
const trackingId = 'UA-XXXXXXXXX-X';
onMount(() => {
initAnalytics(trackingId);
});
afterNavigate((navigation) => {
if (typeof gtag === 'function') {
gtag('event', 'page_view', {
page_path: navigation.to?.url.pathname
});
}
});
</script>
<slot />
Ключевой момент: afterNavigate вызывается после каждого
перехода, что особенно важно для SPA-режима, где полный перезагрузки
страницы не происходит.
SvelteKit позволяет легко добавлять пользовательские события, такие как клики кнопок или отправка форм. Рекомендуется создать обертку для стандартного API аналитики:
// src/lib/analytics.js
export function trackEvent(action, category, label, value) {
if (typeof gtag === 'function') {
gtag('event', action, {
event_category: category,
event_label: label,
value: value
});
}
}
Пример использования:
<button on:click={() => trackEvent('click', 'button', 'subscribe', 1)}>
Подписаться
</button>
Для событий, связанных с серверной логикой (например, отправка
заказов), SvelteKit позволяет использовать серверные эндпоинты
src/routes/api/*. Можно отправлять данные напрямую в
аналитическую систему через HTTP API:
// src/routes/api/track-order/+server.js
import fetch from 'node-fetch';
export async function POST({ request }) {
const data = await request.json();
await fetch('https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXX', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
client_id: data.clientId,
events: [{ name: 'purchase', params: { value: data.amount } }]
})
});
return new Response(JSON.stringify({ status: 'ok' }), { status: 200 });
}
Такой подход позволяет отслеживать важные серверные события без вмешательства в клиентский код.
onMount гарантирует, что скрипт загружается
только на клиенте.SvelteKit дает возможность гибко внедрять проверку согласия пользователя (consent) перед отправкой данных:
<script>
import { onMount } from 'svelte';
import { initAnalytics, trackEvent } from '$lib/analytics';
let consentGiven = false;
onMount(() => {
if (consentGiven) {
initAnalytics('UA-XXXXXXXXX-X');
}
});
function handleConsent() {
consentGiven = true;
initAnalytics('UA-XXXXXXXXX-X');
}
</script>
{#if !consentGiven}
<button on:click={handleConsent}>Принять аналитику</button>
{/if}
Такой подход соответствует требованиям GDPR и других норм по защите данных.
Некоторые Svelte UI-библиотеки предоставляют готовые компоненты для интеграции с аналитикой, например, кнопки с встроенным трекингом. Обычно достаточно обернуть компонент в обработчик события или воспользоваться предоставленным API:
<MyButton on:click={() => trackEvent('click', 'button', 'my-button')} />
Это снижает объем собственного кода и делает интеграцию более консистентной.
Эти подходы обеспечивают стабильное и масштабируемое внедрение аналитики в проекты на SvelteKit, сохраняя чистоту архитектуры и контроль над событиями.