First-Party Tracking mit Next.js
Richten Sie einen First-Party-Proxy in Ihrer Next.js-Anwendung ein, um Anzeigenblocker und Browser-Tracking-Schutz zu umgehen.
Schwierigkeit: Einfach - Dies ist die einfachste Option für Next.js-Projekte. Fügen Sie einfach ein paar Zeilen zu Ihrer Konfigurationsdatei hinzu.
Warum das funktioniert (Same-Origin)
Dieser Ansatz verwendet /api/_z/script.js, das sich auf der gleichen Herkunft wie Ihre Website befindet. Firefox ETP und andere Tracking-Schutzmaßnahmen blockieren nur Cross-Origin-Anfragen.
- Browser sieht:
yourdomain.com/api/_z/script.js— gleiche Herkunft (First-Party) - Next.js schreibt die Anfrage auf der Server-Seite an Zenovay um (der Browser sieht das nicht)
- Alle Tracking-Schutzmaßnahmen werden umgangen, da die Anfrage First-Party ist
Bevor Sie beginnen
Stellen Sie sicher, dass Sie Folgendes haben:
- Ein Next.js 12+-Projekt (App Router oder Pages Router)
- Ihren Zenovay-Tracking-Code (zu finden unter Domains → Ihre Website → General → Tracking script, im First-Party-Tab)
- Zugriff auf Ihre
next.config.jsodernext.config.tsDatei
Format Ihres Tracking-Codes
Ihr Tracking-Code sieht so aus: ZV_XXXXXXXXXX
- Beginnt mit
ZV_ - Gefolgt von 10 Zeichen (Buchstaben und Zahlen)
- GROSS-/KLEINSCHREIBUNG BEACHTEN - kopieren Sie ihn exakt
Beispiel: ZV_Q8U0GYD70WR

Wie es funktioniert
Next.js Rewrites fungieren als Server-seitiger Proxy. Wenn ein Browser /api/_z/script.js anfordert, holt Next.js ihn von api.zenovay.com/fp/script.js ab und gibt ihn zurück. Der Browser sieht nur Ihre Domain.
Browser → yourdomain.com/api/_z/script.js (First-Party)
↓
Next.js Rewrite
↓
api.zenovay.com/fp/script.js (Server-zu-Server)
Schritt 1: Rewrites konfigurieren
Fügen Sie die Rewrite-Konfiguration zu Ihrer Next.js-Konfigurationsdatei hinzu.
Welche Konfigurationsdatei?
next.config.js- Wenn Ihr Projekt JavaScript verwendetnext.config.mjs- Wenn Ihr Projekt ES-Module verwendetnext.config.ts- Wenn Ihr Projekt TypeScript verwendet (Next.js 15+)
Für next.config.js (JavaScript)
/** @type {import('next').NextConfig} */
const nextConfig = {
// Add this rewrites configuration
async rewrites() {
return [
{
// Proxy all requests to /api/_z/* to Zenovay's first-party endpoint
source: '/api/_z/:path*',
destination: 'https://api.zenovay.com/fp/:path*',
},
]
},
}
module.exports = nextConfigFür next.config.mjs (ES Modules)
/** @type {import('next').NextConfig} */
const nextConfig = {
async rewrites() {
return [
{
source: '/api/_z/:path*',
destination: 'https://api.zenovay.com/fp/:path*',
},
]
},
}
export default nextConfigFür next.config.ts (TypeScript - Next.js 15+)
import type { NextConfig } from 'next'
const nextConfig: NextConfig = {
async rewrites() {
return [
{
source: '/api/_z/:path*',
destination: 'https://api.zenovay.com/fp/:path*',
},
]
},
}
export default nextConfigFalls Sie bereits Rewrites haben
Wenn Ihre Konfiguration bereits eine rewrites()-Funktion hat, fügen Sie den Zenovay-Rewrite zum bestehenden Array hinzu:
const nextConfig = {
async rewrites() {
return [
// Your existing rewrites...
{
source: '/old-page',
destination: '/new-page',
},
// Add Zenovay rewrite
{
source: '/api/_z/:path*',
destination: 'https://api.zenovay.com/fp/:path*',
},
]
},
}
module.exports = nextConfigSchritt 2: Tracking-Script hinzufügen
Jetzt fügen Sie das Tracking-Script zu Ihrer Anwendung hinzu.
App Router (Next.js 13+)
Fügen Sie das Script zu Ihrem Root Layout hinzu:
import Script from 'next/script'
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<head>
<Script
src="/api/_z/script.js"
data-tracking-code="YOUR_TRACKING_CODE"
strategy="afterInteractive"
/>
</head>
<body>{children}</body>
</html>
)
}Pages Router
Fügen Sie das Script zu Ihrer benutzerdefinierten _app.tsx hinzu:
import Script from 'next/script'
import type { AppProps } from 'next/app'
export default function App({ Component, pageProps }: AppProps) {
return (
<>
<Script
src="/api/_z/script.js"
data-tracking-code="YOUR_TRACKING_CODE"
strategy="afterInteractive"
/>
<Component {...pageProps} />
</>
)
}Ersetzen Sie YOUR_TRACKING_CODE mit Ihrem aktuellen Tracking-Code aus dem Zenovay-Dashboard (z.B. ZV_Q8U0GYD70WR).
Schritt 3: Entwicklungsserver neu starten
Wichtig! Next.js speichert die Konfigurationsdatei. Sie MÜSSEN Ihren Dev Server neu starten, nachdem Sie next.config.js bearbeitet haben.
# Stop your current dev server (Ctrl+C)
# Then restart it
npm run devSchritt 4: Ihre Änderungen bereitstellen
# For Vercel (automatic deployment)
git add .
git commit -m "Add Zenovay first-party tracking"
git push
# Or manual Vercel deployment
vercel deploy
# For other platforms
npm run build && npm run startSchritt 5: Überprüfen Sie, ob es funktioniert
Überprüfung 1: Lokale Entwicklung
- Öffnen Sie Ihre Website unter
http://localhost:3000 - Drücken Sie F12, um DevTools zu öffnen
- Klicken Sie auf die Registerkarte Network
- Aktualisieren Sie die Seite
- Filtern Sie nach
script.js - Sie sollten eine Anfrage an
/api/_z/script.jsmit Status 200 sehen
Überprüfung 2: Firefox Strict Mode (Sehr wichtig!)
Firefox hat den strengsten Tracking-Schutz. Wenn es in Firefox funktioniert, funktioniert es überall.
- Öffnen Sie Firefox-Browser
- Klicken Sie auf das Menü (drei Zeilen, oben rechts) → Einstellungen
- Klicken Sie auf Datenschutz & Sicherheit in der linken Seitenleiste
- Wählen Sie unter „Verbesserter Tracking-Schutz" Streng aus
- Besuchen Sie Ihre Website
- Öffnen Sie DevTools (F12) → Registerkarte Network
- Aktualisieren Sie und überprüfen Sie, dass
/api/_z/script.jsmit Status 200 geladen wird
Überprüfung 3: Zenovay-Dashboard
- Gehen Sie zu app.zenovay.com und melden Sie sich an
- Klicken Sie auf Ihre Website
- Besuchen Sie Ihre Website in einem anderen Tab
- Innerhalb von 1-2 Minuten sollten Sie den Besuch in Ihrem Dashboard sehen
Endgültige Checkliste
Bevor Sie fertig sind, überprüfen Sie ALLE dieser Punkte:
-
next.config.jshat die Rewrite-Regel für/api/_z/:path* - Entwicklungsserver wurde nach Konfigurationsänderung neu gestartet
- Script-Tag verwendet
/api/_z/script.js(nicht die direkte Zenovay-URL) -
data-tracking-code-Attribut enthält Ihren korrekten Tracking-Code - In Firefox mit verbessertem Tracking-Schutz auf Streng getestet
- Besuche erscheinen im Zenovay-Dashboard
Fehlerbehebung
Script gibt 404 zurück
Ursache: Der Rewrite ist nicht korrekt konfiguriert oder der Server wurde nicht neu gestartet.
Lösung:
- Starten Sie Ihren Dev Server neu - Das ist die häufigste Lösung
- Überprüfen Sie, dass die
next.config.jsDatei gespeichert ist - Überprüfen Sie, dass der Pfad genau übereinstimmt:
/api/_z/:path* - Stellen Sie sicher, dass Sie
sourceunddestinationverwenden (nichtfromundto)
Script wird geladen, aber keine Daten erscheinen
Ursache: Der Tracking-Code könnte falsch sein.
Lösung:
- Suchen Sie nach Ihrem Tracking-Code unter Domains → Ihre Website → General → Tracking script
- Stellen Sie sicher, dass
data-tracking-codegenau übereinstimmt (GROSS-/KLEINSCHREIBUNG beachten) - Überprüfen Sie die Browser-Konsole (F12 → Console-Registerkarte) auf Fehler
Rewrites funktionieren lokal, aber nicht in der Produktion
Ursache: Einige Hosting-Plattformen handhaben Rewrites unterschiedlich.
Lösung:
- Vercel: Rewrites funktionieren automatisch
- Netlify: Fügen Sie den Rewrite auch zu
netlify.tomlhinzu - Self-Hosted: Stellen Sie sicher, dass Ihr Server Next.js Rewrites unterstützt
Geolokalisierung ist falsch
Ursache: Die echte IP-Adresse des Besuchers wird nicht weitergeleitet.
Lösung: Für Vercel funktioniert dies automatisch. Für andere Plattformen benötigen Sie möglicherweise Middleware:
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
export function middleware(request: NextRequest) {
if (request.nextUrl.pathname.startsWith('/api/_z/')) {
const response = NextResponse.rewrite(
new URL(`https://api.zenovay.com/fp/${request.nextUrl.pathname.replace('/api/_z/', '')}${request.nextUrl.search}`)
)
// Forward the real client IP
const clientIP = request.headers.get('x-forwarded-for')?.split(',')[0]
|| request.headers.get('x-real-ip')
|| ''
response.headers.set('X-Zenovay-Real-IP', clientIP)
return response
}
}
export const config = {
matcher: '/api/_z/:path*',
}Vollständiges Beispiel
Hier ist ein vollständiges next.config.js Beispiel:
/** @type {import('next').NextConfig} */
const nextConfig = {
// Your existing config options...
reactStrictMode: true,
// Zenovay first-party proxy rewrite
async rewrites() {
return [
{
source: '/api/_z/:path*',
destination: 'https://api.zenovay.com/fp/:path*',
},
]
},
}
module.exports = nextConfigUnd ein vollständiges app/layout.tsx:
import Script from 'next/script'
import './globals.css'
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<head>
{/* Zenovay Analytics - First-Party Tracking */}
<Script
src="/api/_z/script.js"
data-tracking-code="ZV_Q8U0GYD70WR" // Replace with your tracking code
strategy="afterInteractive"
/>
</head>
<body>{children}</body>
</html>
)
}Nächste Schritte
- Benutzerdefinierte Events - Verfolgen Sie benutzerdefinierte Benutzeraktionen
- Besucheridentifikation - Identifizieren Sie angemeldete Benutzer
- Fehlerbehebung - Weitere Hilfe zu häufigen Problemen