Next.js
Installa lo snippet di tracciamento Selgeo in un'applicazione Next.js usando il componente nativo del framework next/script. Questa guida copre sia l'App Router (app/layout.tsx) sia il Pages Router (pages/_app.tsx).
Versione API: v1
Se non usi Next.js, consulta invece la guida HTML / script semplice, la guida React (Vite) o la guida WordPress.
Perché next/script?
Un tag <script> semplice in un componente React non si comporta come in HTML puro — Next.js raggruppa il JavaScript per rotta e idrata le pagine in modo incrementale. Il componente ufficiale next/script:
- Carica lo snippet esattamente una volta tra le navigazioni lato client (nessuna esecuzione duplicata).
- Rispetta una
strategydi caricamento che controlli tu (noi usiamoafterInteractive). - Si integra bene con l'SSR in streaming di Next.js e il Partial Prerendering.
Usiamo strategy="afterInteractive" invece di lazyOnload in modo che lo snippet sia pronto prima di elaborare il primo parametro ?ref=. L'accuratezza dell'attribuzione vale più di un guadagno marginale di Lighthouse — lazyOnload rischia di mancare un clic precoce che converte subito.
Installazione — App Router (app/layout.tsx)
Per progetti su Next.js 13+ che usano la directory app/.
Passaggio 1: aggiungi lo snippet al layout radice
Apri app/layout.tsx e aggiungi l'import di Script e l'elemento JSX:
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>
);
}
Sostituisci pk_test_YOUR_KEY con la tua chiave API pubblica da Impostazioni > Chiavi API nella dashboard Selgeo.

Passaggio 2: salva ed esegui
pnpm dev
# oppure
npm run dev
Apri il tuo sito nel browser. Lo snippet ora si carica su ogni pagina renderizzata dall'App Router.
Installazione — Pages Router (pages/_app.tsx)
Per progetti sulla directory legacy pages/.
Passaggio 1: aggiungi lo snippet al componente App personalizzato
Apri (o crea) 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"
/>
</>
);
}
Passaggio 2: riavvia il server di sviluppo
pnpm dev
I progetti Pages Router devono riavviare il server di sviluppo quando _app.tsx viene creato per la prima volta. Le modifiche successive si ricaricano a caldo normalmente.

Attributi obbligatori e opzionali
| Attributo | Obbligatorio | Descrizione |
|---|---|---|
src | Sì | URL del CDN. Sempre https://cdn.selgeo.com/v1/selgeo.js. |
data-merchant | Sì | La tua chiave API pubblica (pk_test_* o pk_live_*). |
async | Sì | Caricamento asincrono; non blocca l'idratazione. |
strategy | Sì | Usa "afterInteractive". Non passare a "lazyOnload" — i clic di referral precoci potrebbero essere persi. |
data-debug | No | Abilita il logging verboso nella console. Rimuovi prima del go-live. |
data-api-url | No | Sovrascrive l'endpoint API. Presente solo nei workspace staging / sviluppo — la dashboard Selgeo lo inietta automaticamente quando necessario. |
Verifica dell'installazione
- Compila ed esegui il tuo progetto (
pnpm devopnpm build && pnpm start). - Ottieni un link di referral. I link di tracciamento vengono creati dai partner nel portale partner (nella sezione Link), non nella dashboard del merchant. Per un rapido test personale, accedi al portale partner come partner di test e creane uno, oppure chiedi a un partner esistente il suo link.
- Visita il tuo sito con il link di tracciamento, ad esempio:
https://tuo-sito.com/?ref=TUO_REF_DI_TEST
- Apri gli Strumenti per sviluppatori (F12) e controlla la Console. Con
data-debugaggiunto temporaneamente, dovresti vedere:[selgeo] ref detected TUO_REF_DI_TEST[selgeo] click_id stored xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - Nella console del browser, esegui:
Questo dovrebbe restituire una stringa UUID.__selgeo.getClickId()
nullsignifica che lo snippet non ha rilevato un parametro?ref=. - Apri la dashboard Selgeo. Il clic dovrebbe apparire in Analytics entro pochi secondi.

Risoluzione dei problemi
Lo snippet non viene caricato
- Verifica che
app/layout.tsx(App Router) opages/_app.tsx(Pages Router) contengano effettivamente il blocco<Script>— la duplicazione accidentale in un singolo file di pagina è l'errore più comune. - Verifica che
srcsia esattamentehttps://cdn.selgeo.com/v1/selgeo.js. Un errore di battitura causa un fallimento silenzioso del caricamento dello script. - Apri la scheda Network e filtra per
selgeo.js. Una voce in rosso con stato 0 o un errore CORS di solito indica una violazione CSP — vedi sotto. - Se stai eseguendo con un export statico (
output: 'export'), verifica che lo snippet sia incluso nell'HTML esportato.next/scriptconstrategy="afterInteractive"viene preservato dall'export statico.
Il clic non viene tracciato
- Il visitatore deve arrivare con
?ref=…al caricamento iniziale della pagina. Una volta che lo snippet cattura il clic, l'URL viene riscritto e il parametro non appare più. Ricarica la pagina con un link di tracciamento nuovo se hai già consumato quello attuale. - Verifica che
data-merchantcontenga una chiavepk_test_*opk_live_*valida. Un valore troncato o con uno spazio iniziale causerà un no-op silenzioso. - Se usi React Strict Mode, assicurati che lo snippet sia in
app/layout.tsxopages/_app.tsx, non dentro un effetto che può eseguirsi due volte.next/scriptgià deduplica correttamente. - Controlla la modalità della dashboard Selgeo (test vs. live). Una chiave
pk_live_*su un link di tracciamento emesso in modalità test non registrerà il clic.
Blocco CSP
Se il tuo progetto Next.js imposta un header Content-Security-Policy (next.config.js headers(), middleware o una voce vercel.json), consenti le origini Selgeo:
script-src 'self' https://cdn.selgeo.com;
connect-src 'self' https://app.selgeo.com;
Per i workspace staging / dev dove data-api-url punta altrove, aggiungi anche quell'origine a connect-src. Se non puoi allentare la CSP, considera di instradare lo snippet attraverso la tua origine (avanzato, fuori scope per questa guida).
Passi successivi
- Stripe Payment Links — integrazione Stripe senza backend.
- Stripe Checkout — passa
click_idalle Checkout Session dal tuo server. - Conversion API — traccia conversioni non Stripe.
- Configurazione snippet — riferimento completo agli attributi e al tag HTML sottostante.