Integração com Next.js
Integre a Cookield no seu projeto Next.js usando o componente Script nativo. Suporte completo para App Router e Pages Router.
App Router (Next.js 13+)
No App Router, use o componente Script do Next.js no layout raiz:
// app/layout.tsx
import Script from 'next/script';
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="pt-BR">
<head>
<Script
src="https://cdn.cookield.io/banner/SEU_BANNER_ID.js"
strategy="beforeInteractive"
/>
</head>
<body>{children}</body>
</html>
);
}💡 strategy="beforeInteractive" garante que o script seja carregado antes de qualquer outro JavaScript da página, incluindo o hydration do React.
Pages Router
No Pages Router, adicione o script no _document.tsx:
// pages/_document.tsx
import { Html, Head, Main, NextScript } from 'next/document';
import Script from 'next/script';
export default function Document() {
return (
<Html lang="pt-BR">
<Head>
<Script
src="https://cdn.cookield.io/banner/SEU_BANNER_ID.js"
strategy="beforeInteractive"
/>
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
);
}Alternativa: você pode adicionar o script diretamente no _app.tsx com strategy="afterInteractive" se não precisar bloquear antes do hydration.
Com Consent Mode + GTM
Se você usa Google Tag Manager com Next.js, a Cookield funciona em conjunto com o Consent Mode v2:
// app/layout.tsx — com GTM + Cookield
import Script from 'next/script';
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="pt-BR">
<head>
{/* Cookield — DEVE vir antes do GTM */}
<Script
src="https://cdn.cookield.io/banner/SEU_BANNER_ID.js"
strategy="beforeInteractive"
/>
{/* Google Tag Manager */}
<Script
src="https://www.googletagmanager.com/gtm.js?id=GTM-XXXXXXX"
strategy="afterInteractive"
/>
</head>
<body>{children}</body>
</html>
);
}A ordem é importante: Cookield com beforeInteractive garante que os sinais de consent estejam definidos quando o GTM carregar.
Considerações de SSR
A Cookield é um script client-side. Algumas considerações para SSR/SSG:
- →Server Components: O script será incluído no HTML inicial enviado pelo servidor. Não há problemas de hydration.
- →Static Generation (SSG): Funciona perfeitamente — o script é adicionado ao HTML estático.
- →Edge Runtime: Compatível — o script é apenas uma tag no head.
- →Middleware: Se bloqueia requests por geo, a Cookield se adapta à legislação do país do visitante.
Checando consent no servidor
Se precisar verificar o status do consentimento em Server Actions ou Route Handlers, leia o cookie de consent:
// app/api/analytics/route.ts
import { cookies } from 'next/headers';
export async function POST(request: Request) {
const cookieStore = cookies();
const consent = cookieStore.get('cookield_consent');
if (!consent) {
return Response.json({ error: 'No consent' }, { status: 403 });
}
const consentData = JSON.parse(consent.value);
if (!consentData.analytics) {
return Response.json({ error: 'Analytics not consented' }, { status: 403 });
}
// Proceed with analytics processing...
return Response.json({ ok: true });
}Usando variáveis de ambiente
Para diferentes Banner IDs por ambiente (dev, staging, prod):
// .env.local
NEXT_PUBLIC_COOKIELD_BANNER_ID=ban_dev_123
// .env.production
NEXT_PUBLIC_COOKIELD_BANNER_ID=ban_prod_456// app/layout.tsx
import Script from 'next/script';
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="pt-BR">
<head>
<Script
src={`https://cdn.cookield.io/banner/${process.env.NEXT_PUBLIC_COOKIELD_BANNER_ID}.js`}
strategy="beforeInteractive"
/>
</head>
<body>{children}</body>
</html>
);
}Dicas para Next.js
- ✓Use
beforeInteractivepara garantir que o consent seja coletado antes de qualquer analytics. - ✓O script não afeta o Lighthouse score — é carregado de forma assíncrona e otimizada.
- ✓Para monorepos com Turborepo, adicione o script apenas no app que renderiza para o usuário final.
- ✓Em ambiente de desenvolvimento, o banner funciona normalmente em localhost.