Zenovay Analytics zu Nuxt hinzufügen
Zenovay Analytics lässt sich nahtlos mit Nuxt kombinieren und bietet Vue-Entwicklern eine schnelle, datenschutzfreundliche Möglichkeit, Besucher in server-gerenderten, statisch generierten und hybriden Nuxt-Anwendungen zu verfolgen. Die Integration dauert etwa zwei Minuten: Fügen Sie das Tracking-Skript über nuxt.config.ts oder als clientseitiges Plugin hinzu, und Zenovay beginnt sofort, Seitenaufrufe, Referrer, Browserdaten und geografische Erkenntnisse in Echtzeit zu erfassen. Das Tracking-Skript wiegt unter 1 KB, lädt asynchron zum Schutz Ihrer Core Web Vitals und erkennt clientseitige Routenänderungen über Vue Router automatisch. Diese Anleitung behandelt sowohl den konfigurationsbasierten Ansatz als auch den Plugin-Ansatz, plus benutzerdefinierte Ereignisverfolgung mit Composables, Benutzeridentifikation, cookielosen Modus und SSR-Überlegungen speziell für Nuxt 3.
Schnellstart (2 Minuten)
Es gibt zwei Möglichkeiten, Zenovay zu Nuxt hinzuzufügen. Wählen Sie die für Ihr Projekt am besten geeignete.
Schritt 1: Ihren Tracking-Code abrufen
Melden Sie sich bei Ihrem Zenovay-Dashboard an und kopieren Sie Ihren Tracking-Code aus Settings → Tracking Code.
Option A: nuxt.config.ts (Empfohlen)
Der einfachste Ansatz. Fügen Sie das Skript zu app.head in Ihrer Nuxt-Konfiguration hinzu:
export default defineNuxtConfig({
app: {
head: {
script: [
{
defer: true,
'data-tracking-code': 'YOUR_TRACKING_CODE',
src: 'https://api.zenovay.com/z.js',
},
],
},
},
})Das war's! Zenovay verfolgt automatisch Seitenaufrufe über alle Ihre Nuxt-Routen, einschließlich clientseitiger Navigationen.
Option B: Clientseitiges Plugin
Wenn Sie mehr Kontrolle bevorzugen, erstellen Sie ein Nuxt-Plugin, das das Skript auf der Clientseite lädt:
export default defineNuxtPlugin(() => {
if (typeof document === 'undefined') return;
const script = document.createElement('script');
script.defer = true;
script.dataset.trackingCode = 'YOUR_TRACKING_CODE';
script.src = 'https://api.zenovay.com/z.js';
document.head.appendChild(script);
})Das Suffix .client.ts stellt sicher, dass dieses Plugin nur im Browser ausgeführt wird, niemals während des SSR.
Schritt 2: Installation überprüfen
Starten Sie Ihren Entwicklungsserver mit npx nuxi dev, besuchen Sie eine Seite und prüfen Sie das Zenovay-Dashboard. Innerhalb weniger Sekunden sollte ein Echtzeit-Besucher erscheinen.
SPA-Navigationsverfolgung
Nuxt verwendet Vue Router für clientseitiges Routing. Zenovay erkennt Routenänderungen automatisch über die History API (pushState / popstate), sodass jede Navigation einen neuen Seitenaufruf ohne jegliche Konfiguration erfasst.
Dies funktioniert mit:
<NuxtLink>-Komponenten- Programmatischer Navigation mit
navigateTo() useRouter().push()-Aufrufen- Browser-Vor- und Zurück-Schaltflächen
Benutzerdefinierte Ereignisse mit Composables
Erstellen Sie ein wiederverwendbares Composable für saubere Analytics-Aufrufe in Ihrer gesamten App:
export function useZenovay() {
function track(event: string, data?: Record<string, any>) {
if (import.meta.client && window.zenovay) {
window.zenovay('track', event, data);
}
}
function identify(userId: string, traits?: Record<string, any>) {
if (import.meta.client && window.zenovay) {
window.zenovay('identify', userId, traits);
}
}
function trackGoal(goalName: string, data?: Record<string, any>) {
if (import.meta.client && window.zenovay) {
window.zenovay('goal', goalName, data);
}
}
function trackRevenue(amount: number, currency = 'USD') {
if (import.meta.client && window.zenovay) {
window.zenovay('revenue', amount, currency);
}
}
return { track, identify, trackGoal, trackRevenue };
}Nuxt importiert Composables aus dem Verzeichnis composables/ automatisch, sodass Sie sie überall ohne Import-Anweisung verwenden können:
<script setup lang="ts">
const { track } = useZenovay();
function handleUpgrade(plan: string) {
track('upgrade_clicked', { plan, location: 'pricing_page' });
navigateTo('/checkout?plan=' + plan);
}
</script>
<template>
<div>
<h1>Pricing</h1>
<button @click="handleUpgrade('pro')">Upgrade to Pro</button>
<button @click="handleUpgrade('scale')">Upgrade to Scale</button>
</div>
</template>Ereignisse in Komponenten verfolgen
<script setup lang="ts">
const { track } = useZenovay();
const form = reactive({ name: '', email: '', message: '' });
async function handleSubmit() {
track('form_submitted', {
form: 'contact',
has_message: form.message.length > 0,
});
await $fetch('/api/contact', { method: 'POST', body: form });
}
</script>
<template>
<form @submit.prevent="handleSubmit">
<input v-model="form.name" placeholder="Name" required />
<input v-model="form.email" type="email" placeholder="Email" required />
<textarea v-model="form.message" placeholder="Message"></textarea>
<button type="submit">Send</button>
</form>
</template>Überlegungen zum serverseitigen Rendering
Nuxt 3 rendert Seiten standardmäßig auf dem Server. Das Zenovay-Skript läuft ausschließlich auf dem Client, daher beachten Sie folgende Regeln:
- Rufen Sie
window.zenovayniemals in Server-Middleware, API-Routen oderserver/-Dateien auf - Sichern Sie clientseitige Aufrufe immer mit
import.meta.clientoderprocess.clientab - Das
nuxt.config.ts-Head-Skript ist sicher, da der Browser das Laden des Skripts übernimmt - Verwenden Sie das Suffix
.client.tsfür Plugins, die daswindow-Objekt benötigen
// ✅ Sicher: mit import.meta.client abgesichert
if (import.meta.client && window.zenovay) {
window.zenovay('track', 'page_view');
}
// ✅ Sicher: innerhalb von onMounted (nur clientseitiger Lifecycle-Hook)
onMounted(() => {
if (window.zenovay) {
window.zenovay('track', 'component_visible');
}
});
// ❌ Unsicher: läuft während SSR — wird einen Fehler auslösen!
// window.zenovay('track', 'page_view');Routen-Middleware-Verfolgung
Verfolgen Sie spezifische Routenübergänge mit Nuxt-Routen-Middleware:
export default defineNuxtRouteMiddleware((to, from) => {
// Läuft nur bei clientseitigen Navigationen
if (import.meta.client && window.zenovay) {
window.zenovay('track', 'route_change', {
from: from.fullPath,
to: to.fullPath,
});
}
})Dies ist optional. Zenovay verfolgt Seitenaufrufe bei jeder Navigation automatisch. Verwenden Sie Routen-Middleware nur, wenn Sie benutzerdefinierte Daten an bestimmte Übergänge anhängen müssen.
Cookieless-Modus
Für datenschutzfreundliches Tracking ohne Cookies oder localStorage fügen Sie das Attribut data-cookieless hinzu:
export default defineNuxtConfig({
app: {
head: {
script: [
{
defer: true,
'data-tracking-code': 'YOUR_TRACKING_CODE',
'data-cookieless': 'true',
src: 'https://api.zenovay.com/z.js',
},
],
},
},
})Im Cookieless-Modus verwendet Zenovay einen serverseitigen Hash des IP-Subnetzes, des User-Agents und eines täglich rotierenden Salts des Besuchers, um eindeutige Besucher zu zählen, ohne etwas auf dem Clientgerät zu speichern.
Benutzer identifizieren
Verknüpfen Sie Analytics-Daten mit authentifizierten Benutzern. Ein guter Platz dafür ist Ihr Auth-Plugin oder Layout:
<script setup lang="ts">
const { identify } = useZenovay();
const { data: user } = await useFetch('/api/auth/user');
watch(user, (u) => {
if (u) {
identify(u.id, {
email: u.email,
plan: u.plan,
});
}
}, { immediate: true });
</script>
<template>
<div>
<NuxtPage />
</div>
</template>Ziele und Umsatz verfolgen
const { trackGoal, trackRevenue } = useZenovay();
// Konversionsziel verfolgen
trackGoal('newsletter_signup', { source: 'footer' });
// Kauf verfolgen
trackRevenue(49.99, 'USD');TypeScript-Unterstützung
Fügen Sie Typdeklarationen für die globale zenovay-Funktion hinzu. Nuxt bezieht *.d.ts-Dateien aus dem Projektstamm automatisch ein:
declare global {
interface Window {
zenovay?: (...args: any[]) => void;
}
}
export {};Umgebungsbasierte Konfiguration
Verwenden Sie Runtime-Konfiguration, um Tracking-Codes zwischen Umgebungen auszutauschen:
export default defineNuxtConfig({
runtimeConfig: {
public: {
zenovayTrackingCode: 'YOUR_TRACKING_CODE',
},
},
})export default defineNuxtPlugin(() => {
const config = useRuntimeConfig();
const trackingCode = config.public.zenovayTrackingCode;
if (!trackingCode || typeof document === 'undefined') return;
const script = document.createElement('script');
script.defer = true;
script.dataset.trackingCode = trackingCode;
script.src = 'https://api.zenovay.com/z.js';
document.head.appendChild(script);
})Setzen Sie dann NUXT_PUBLIC_ZENOVAY_TRACKING_CODE in Ihrer Umgebung, um den Standard zu überschreiben.
Nächste Schritte
Ihre Nuxt-App verfolgt nun mit Zenovay! Sehen Sie Ihre Analytics im Dashboard ein.
Vertiefen Sie Ihr Wissen:
- Benutzerdefinierte Ereignisse - Erweiterte Ereignisverfolgungsmuster
- Ziele - Konversionsziele einrichten
- Datenschutz-Compliance - GDPR- und CCPA-Konfiguration
- Benutzerdefinierte Frameworks - Allgemeine Integrationsanleitung