Aide · Installer
Installer sur Next.js
Dans le layout racine, avec next/script. Les changements de page sont comptés automatiquement.
App Router
Ajoutez le script à votre layout racine, app/layout.tsx :
import Script from "next/script";
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="fr">
<body>
{children}
<Script defer src="https://bearingstats.com/s.js" data-site="YOUR_SITE_ID" strategy="afterInteractive" />
</body>
</html>
);
}Pages Router
Ajoutez le même Script dans pages/_app.tsx, à côté de votre Component.
Événements personnalisés
Envoyez vos événements par une seule petite fonction. Un événement envoyé à l'affichage d'une page (dans un useEffect) arrive souvent avant que s.js soit chargé : cette fonction le garde dans une file d'attente au lieu de le perdre, et déclare window.bearing pour TypeScript. Créez lib/analytics.ts :
// lib/analytics.ts : une seule porte pour vos événements
type Props = Record<string, string | number | boolean>;
type Bearing = ((name: string, options?: { props?: Props }) => void) & { q?: unknown[][] };
declare global {
interface Window {
bearing?: Bearing;
}
}
/** Envoie un événement à Bearing. Les appels faits avant le chargement de s.js attendent dans une file. */
export function track(name: string, props?: Props) {
if (typeof window === "undefined") return;
if (!window.bearing) {
const queue: Bearing = (...args) => {
(queue.q ??= []).push(args);
};
window.bearing = queue;
}
window.bearing(name, props ? { props } : undefined);
}Puis appelez-la depuis n'importe quel composant client :
"use client";
import { useEffect } from "react";
import { track } from "@/lib/analytics";
export function Pricing() {
useEffect(() => track("pricing_view"), []);
return <button onClick={() => track("signup", { plan: "pro" })}>…</button>;
}Bon à savoir
- Les navigations côté client (
Link,router.push) comptent comme des pages vues, sans code en plus. - Événements personnalisés : utilisez
track()ci-dessus. Ce que vous pouvez envoyer est dans Événements personnalisés. - En développement sur
localhost, rien n'est compté sauf si vous ajoutezdata-allow-localhost.