Next.js
Installeer het Selgeo-trackingsnippet in een Next.js-applicatie met de eigen next/script-component van het framework. Deze handleiding behandelt zowel de App Router (app/layout.tsx) als de Pages Router (pages/_app.tsx).
API-versie: v1
Als u geen Next.js gebruikt, raadpleeg dan in plaats daarvan de HTML- / eenvoudige-script-handleiding, de React-(Vite)-handleiding of de WordPress-handleiding.
Waarom next/script?
Een gewone <script>-tag in een React-component gedraagt zich niet zoals in puur HTML — Next.js bundelt JavaScript per route en hydrateert pagina's incrementeel. De officiële next/script-component:
- Laadt het snippet precies één keer over client-side navigaties (geen dubbele uitvoering).
- Respecteert een
strategyvoor laden die u zelf bepaalt (wij gebruikenafterInteractive). - Werkt goed samen met de streaming SSR van Next.js en Partial Prerendering.
We gebruiken strategy="afterInteractive" in plaats van lazyOnload zodat het snippet gereed is voordat de eerste ?ref=-parameter wordt verwerkt. Attributienauwkeurigheid weegt zwaarder dan een marginale Lighthouse-score — lazyOnload riskeert een vroege klik te missen die direct converteert.
Installatie — App Router (app/layout.tsx)
Voor projecten op Next.js 13+ die de app/-map gebruiken.
Stap 1: Voeg het snippet toe aan het hoofdlayout
Open app/layout.tsx en voeg de Script-import en het JSX-element toe:
import Script from 'next/script';
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body>
{children}
<Script
async
src="https://cdn.selgeo.com/v1/selgeo.js"
data-merchant="pk_test_YOUR_KEY"
strategy="afterInteractive"
/>
</body>
</html>
);
}
Vervang pk_test_YOUR_KEY door uw publieke API-sleutel uit Instellingen > API-sleutels in het Selgeo-dashboard.

Stap 2: Opslaan en uitvoeren
pnpm dev
# of
npm run dev
Open uw site in de browser. Het snippet laadt nu op elke pagina die door de App Router wordt gerenderd.
Installatie — Pages Router (pages/_app.tsx)
Voor projecten op de oudere pages/-map.
Stap 1: Voeg het snippet toe aan de aangepaste App-component
Open (of maak) pages/_app.tsx:
import type { AppProps } from 'next/app';
import Script from 'next/script';
export default function App({ Component, pageProps }: AppProps) {
return (
<>
<Component {...pageProps} />
<Script
async
src="https://cdn.selgeo.com/v1/selgeo.js"
data-merchant="pk_test_YOUR_KEY"
strategy="afterInteractive"
/>
</>
);
}
Stap 2: Herstart de ontwikkelserver
pnpm dev
Pages-Router-projecten moeten de ontwikkelserver herstarten als _app.tsx voor het eerst wordt aangemaakt. Latere bewerkingen worden normaal hot-reloaded.

Verplichte en optionele attributen
| Attribuut | Verplicht | Beschrijving |
|---|---|---|
src | Ja | CDN-URL. Altijd https://cdn.selgeo.com/v1/selgeo.js. |
data-merchant | Ja | Uw publieke API-sleutel (pk_test_* of pk_live_*). |
async | Ja | Asynchroon laden; blokkeert de hydratatie niet. |
strategy | Ja | Gebruik "afterInteractive". Schakel niet over op "lazyOnload" — vroege referralklikken kunnen worden gemist. |
data-debug | Nee | Schakelt uitgebreide consolelogging in. Verwijderen voor go-live. |
data-api-url | Nee | Overschrijft het API-eindpunt. Alleen aanwezig in staging- / ontwikkelworkspaces — het Selgeo-dashboard voegt dit automatisch in waar nodig. |
Uw installatie verifiëren
- Bouw en start uw project (
pnpm devofpnpm build && pnpm start). - Maak een trackinglink aan in het Selgeo-dashboard onder Programma's > Trackinglinks.
- Bezoek uw site met de trackinglink, bijvoorbeeld:
https://uw-site.com/?ref=UW_TEST_REF
- Open de Developer Tools (F12) en controleer de Console. Met tijdelijk toegevoegde
data-debugzou u moeten zien:[selgeo] ref detected UW_TEST_REF[selgeo] click_id stored xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - Voer in de browserconsole uit:
Dit zou een UUID-string moeten teruggeven.__selgeo.getClickId()
nullbetekent dat het snippet geen?ref=-parameter heeft gedetecteerd. - Open het Selgeo-dashboard. De klik zou binnen enkele seconden moeten verschijnen onder Analytics.

Probleemoplossing
Snippet niet geladen
- Bevestig dat
app/layout.tsx(App Router) ofpages/_app.tsx(Pages Router) daadwerkelijk het<Script>-blok bevat — onbedoelde duplicatie naar een afzonderlijk paginabestand is de meest voorkomende fout. - Verifieer dat
srcexacthttps://cdn.selgeo.com/v1/selgeo.jsis. Een typefout laat het laden stilzwijgend mislukken. - Open het Network-tabblad en filter op
selgeo.js. Een rode regel met status 0 of een CORS-fout duidt meestal op een CSP-overtreding — zie hieronder. - Als u draait met statische export (
output: 'export'), bevestig dat het snippet in de geëxporteerde HTML is opgenomen.next/scriptmetstrategy="afterInteractive"blijft behouden bij statische export.
Klik niet getraceerd
- De bezoeker moet aankomen met
?ref=…bij de initiële paginalading. Zodra het snippet de klik vastlegt, wordt de URL herschreven en verschijnt de parameter niet meer. Laad de pagina opnieuw met een nieuwe trackinglink als u de huidige al hebt verbruikt. - Bevestig dat
data-merchanteen geldigepk_test_*- ofpk_live_*-sleutel bevat. Een afgekapte of met spatie voorafgegane waarde leidt stilzwijgend tot geen-effect. - Als u React Strict Mode gebruikt, zorg ervoor dat het snippet in
app/layout.tsxofpages/_app.tsxstaat, niet binnen een effect dat twee keer kan worden uitgevoerd.next/scriptdedupliceert al correct. - Controleer de Selgeo-dashboardmodus (test vs. live). Een
pk_live_*-sleutel op een in testmodus uitgegeven trackinglink registreert de klik niet.
CSP-blokkering
Als uw Next.js-project een Content-Security-Policy-header instelt (via next.config.js headers(), middleware of een vercel.json-vermelding), sta dan de Selgeo-oorsprongen toe:
script-src 'self' https://cdn.selgeo.com;
connect-src 'self' https://api.selgeo.com;
Voeg voor staging- / dev-workspaces waar data-api-url naar een andere oorsprong wijst, die oorsprong ook toe aan connect-src. Als u de CSP niet kunt versoepelen, overweeg dan het snippet via uw eigen oorsprong te routeren (geavanceerd, buiten de scope van deze handleiding).
Volgende stappen
- Stripe Payment Links — Stripe-integratie zonder backend.
- Stripe Checkout — geef
click_iddoor aan Checkout Sessions vanaf uw server. - Conversion API — traceer niet-Stripe-conversies.
- Snippet-setup — volledige attribuutreferentie en de onderliggende HTML-script-tag.