Añadir Zenovay Analytics a SvelteKit
Zenovay Analytics se integra a la perfección con SvelteKit, proporcionándole estadísticas de visitantes en tiempo real sin añadir ni una sola dependencia a su proyecto. Las aplicaciones SvelteKit van desde sitios completamente estáticos hasta aplicaciones renderizadas en servidor con enrutamiento complejo, y Zenovay gestiona todos estos modos de forma inmediata. El script de seguimiento se carga de forma asíncrona en menos de 1 KB, detecta automáticamente las navegaciones del lado del cliente a través de la History API y respeta el ciclo de vida SSR de SvelteKit para que nunca se ejecute en el servidor donde no existe el objeto window. Tanto si está desarrollando un sitio de marketing, un panel SaaS o una tienda de comercio electrónico con SvelteKit, esta guía cubre todo, desde la instalación básica hasta el seguimiento de eventos personalizados, la identificación de usuarios y el modo sin cookies compatible con el RGPD. Estará en funcionamiento en unos dos minutos.
Configuración rápida (2 minutos)
Añada una etiqueta de script a su archivo HTML raíz de SvelteKit. Sin paquetes npm, sin plugins de Vite, sin cambios en el adaptador.
Paso 1: Obtenga su código de seguimiento
Inicie sesión en su panel de Zenovay y copie su código de seguimiento desde Settings → Tracking Code.
Paso 2: Añadir a app.html
Abra src/app.html, la plantilla HTML raíz para todas las páginas de SvelteKit, y añada el script de Zenovay dentro de <head>:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
<script
defer
data-tracking-code="YOUR_TRACKING_CODE"
src="https://api.zenovay.com/z.js"
></script>
%sveltekit.head%
</head>
<body data-sveltekit-preload-data="hover">
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>¡Listo! Zenovay rastreará automáticamente las páginas vistas en todas sus rutas de SvelteKit, incluidas las navegaciones del lado del cliente.
Paso 3: Verificar la instalación
Visite su sitio y compruebe el panel de Zenovay. Debería ver un visitante en tiempo real en cuestión de segundos.
Reemplace YOUR_TRACKING_CODE con su código de seguimiento real del Panel de Zenovay.
Seguimiento de navegación en SPA
SvelteKit utiliza enrutamiento del lado del cliente por defecto. Zenovay detecta automáticamente los cambios de ruta a través de la History API (pushState / popstate), por lo que cada navegación registra una nueva página vista sin ninguna configuración adicional.
Esto funciona con todos los métodos de navegación de SvelteKit:
- Enlaces con etiqueta
<a>(SvelteKit los intercepta) - Navegación programática con
goto() - Botones de avance/retroceso del navegador
- Funciones de
$app/navigation
Eventos personalizados
Rastree interacciones del usuario mediante la función global window.zenovay. Proteja siempre con una comprobación typeof window o browser para evitar errores de SSR.
Uso del guard browser
SvelteKit proporciona una constante browser que es true solo en el cliente:
<script lang="ts">
import { browser } from '$app/environment';
export let plan: string;
function handleClick() {
if (browser && window.zenovay) {
window.zenovay('track', 'signup_click', { plan });
}
}
</script>
<button on:click={handleClick}>
Sign Up for {plan}
</button>Módulo de seguimiento reutilizable
Cree un módulo utilitario para llamadas de seguimiento limpias y reutilizables:
import { browser } from '$app/environment';
export function track(event: string, data?: Record<string, any>) {
if (browser && window.zenovay) {
window.zenovay('track', event, data);
}
}
export function identify(userId: string, traits?: Record<string, any>) {
if (browser && window.zenovay) {
window.zenovay('identify', userId, traits);
}
}
export function trackGoal(goalName: string, data?: Record<string, any>) {
if (browser && window.zenovay) {
window.zenovay('goal', goalName, data);
}
}
export function trackRevenue(amount: number, currency = 'USD') {
if (browser && window.zenovay) {
window.zenovay('revenue', amount, currency);
}
}A continuación, úselo en cualquier componente:
<script lang="ts">
import { track } from '$lib/analytics';
function handleUpgrade(plan: string) {
track('upgrade_clicked', { plan, location: 'pricing_page' });
}
</script>
<button on:click={() => handleUpgrade('pro')}>
Upgrade to Pro
</button>Seguimiento de páginas vistas en el layout
Si desea enviar metadatos adicionales con cada página vista, utilice una declaración reactiva en su layout raíz:
<script lang="ts">
import { page } from '$app/stores';
import { browser } from '$app/environment';
$: if (browser && $page.url) {
// Zenovay rastrea páginas vistas automáticamente, pero puede añadir datos personalizados
if (window.zenovay) {
window.zenovay('track', 'page_metadata', {
path: $page.url.pathname,
route_id: $page.route.id,
});
}
}
</script>
<slot />Lo anterior es opcional. Zenovay ya rastrea las páginas vistas automáticamente. Utilice este patrón solo si necesita adjuntar metadatos adicionales a cada navegación.
Consideraciones sobre el renderizado en servidor
El script de Zenovay se ejecuta completamente en el cliente. Durante el SSR, window no está disponible, por lo que:
- Nunca llame a
window.zenovayen+page.server.ts,+layout.server.tso hooks del servidor - Siempre proteja las llamadas del lado del cliente con
browserde$app/environment - La etiqueta de script en
app.htmlsolo la ejecuta el navegador, por lo que es segura allí
// +page.server.ts — ¡esto lanzará un error!
// window.zenovay('track', 'page_load'); // ❌
// En su lugar, rastree en el lado del cliente en +page.svelte
// import { browser } from '$app/environment';
// if (browser && window.zenovay) { ... } // ✅Modo sin cookies
Para un seguimiento respetuoso con la privacidad sin cookies ni localStorage, añada el atributo data-cookieless:
<script
defer
data-tracking-code="YOUR_TRACKING_CODE"
data-cookieless="true"
src="https://api.zenovay.com/z.js"
></script>En el modo sin cookies, Zenovay utiliza un hash del lado del servidor de la subred IP del visitante, el agente de usuario y una sal rotativa diaria para contar visitantes únicos sin almacenar nada en el dispositivo del cliente.
Identificar usuarios
Asocie los datos de análisis con los usuarios autenticados. Normalmente llame a esto después del inicio de sesión o en un layout que cargue datos del usuario:
<script lang="ts">
import { browser } from '$app/environment';
import type { LayoutData } from './$types';
export let data: LayoutData;
$: if (browser && data.user && window.zenovay) {
window.zenovay('identify', data.user.id, {
email: data.user.email,
plan: data.user.plan,
});
}
</script>
<slot />Seguimiento de objetivos e ingresos
import { trackGoal, trackRevenue } from '$lib/analytics';
// Rastrear un objetivo de conversión
trackGoal('newsletter_signup', { source: 'footer' });
// Rastrear una compra
trackRevenue(49.99, 'USD');Soporte para TypeScript
Añada declaraciones de tipo para la función global zenovay:
// See https://kit.svelte.dev/docs/types#app
declare global {
namespace App {
// interface Error {}
// interface Locals {}
// interface PageData {}
// interface Platform {}
}
interface Window {
zenovay?: (...args: any[]) => void;
}
}
export {};Seguimiento de acciones de formularios
Rastree acciones de formularios de SvelteKit (mejora progresiva):
<script lang="ts">
import { enhance } from '$app/forms';
import { track } from '$lib/analytics';
</script>
<form
method="POST"
use:enhance={() => {
track('form_submitted', { form: 'contact' });
return async ({ result }) => {
if (result.type === 'success') {
track('form_success', { form: 'contact' });
}
};
}}
>
<input name="email" type="email" placeholder="Email" required />
<textarea name="message" placeholder="Message" required></textarea>
<button type="submit">Send</button>
</form>Siguientes pasos
¡Su aplicación SvelteKit ya está rastreando con Zenovay! Vea sus análisis en el panel de control.
Continúe aprendiendo:
- Eventos personalizados - Patrones avanzados de seguimiento de eventos
- Objetivos - Configure objetivos de conversión
- Cumplimiento de privacidad - Configuración del RGPD y CCPA
- Frameworks personalizados - Guía de integración genérica