Next.js

Bento Next.js Guide

This guide covers adding Bento to your Next.js application: client-side tracking, server-side integration, and TypeScript support for both App Router and Pages Router.

Reference

Getting Started

1Package Installation

Installation

The SDK supports Next.js 12 or later. The App Router component needs Next.js 13 or later. It requires Node.js 18.17 or later.

Install the Bento Next.js SDK in your project:

For server-side integration capabilities, also install:

2Environment Configuration

Basic Setup

Add your Bento credentials to your environment variables:

You can find your keys in your Bento Team Settings. Click Your Private API Keys and generate a key set if needed.

3Client Setup

Configure the analytics component in your app layout:

For Next.js 13+ (App Router):

For the Pages Router (Next.js 12 or later):

Beginner Guide

Page View Tracking

Page views are automatically tracked when you include the Bento analytics components. The SDK handles route changes and sends view events to Bento.

How It Works

The SDK uses Next.js routing hooks to detect navigation:

  • App Router (13+): Uses usePathname() to detect route changes
  • Pages Router: Uses router.events to listen for routeChangeComplete. The script records the first page view when it loads.

Manual Implementation

If you need more control over page view tracking:

App Router:

Pages Router:

User Identification

Identify users to connect their actions across sessions and devices:

Dynamic User Identification

Manual Identification

Event Tracking

Track custom events to understand user behavior and trigger workflows:

Basic Event Tracking

React Hook for Event Tracking

Intermediate Guide

Server-Side Integration

For server-side event tracking and subscriber management, use the Node SDK:

Server-Side Configuration

API Route Examples

Advanced Configuration

Custom Script Loading

For more control over when and how the Bento script loads:

Conditional Loading

Load Bento only in production or for specific user segments:

TypeScript Support

The SDK includes full TypeScript support with proper type definitions:

Type Definitions

Typed Event Tracking

Advanced Guide

Custom Events

E-commerce Events

User Lifecycle Events

Best Practices

Performance Optimization

  1. Lazy Load Analytics: Only load Bento when needed
  2. Batch Events: Group related events when possible
  3. Debounce Tracking: Prevent spam from rapid user actions

Error Handling

API Reference

Client-Side Methods

MethodDescriptionExample
window.bento.view()Track page viewwindow.bento.view()
window.bento.identify(email)Identify userwindow.bento.identify('user@example.com')
window.bento.track(event, data)Track custom eventwindow.bento.track('signup', { plan: 'pro' })
window.bento.tag(tag)Add tag to userwindow.bento.tag('premium_user')

Components

ComponentPropsDescription
BentoAnalyticssiteUuid: string, userEmail?: stringApp Router analytics
BentoLegacyAnalyticssiteUuid: string, userEmail?: stringPages Router analytics

Hooks

HookParametersReturnsDescription
useBentoAnalyticsuserEmail?: stringvoidApp Router page tracking
useBentoLegacyAnalyticsuserEmail?: stringvoidPages Router page tracking

Troubleshooting

Common Issues

IssueSolution
Script not loadingCheck NEXT_PUBLIC_BENTO_SITE_ID is set and accessible in browser
Events not trackingEnsure window.bento exists before calling methods
TypeScript errorsDeclare window.bento in a .d.ts file, as shown in Type Definitions
Hydration mismatchesUse dynamic imports with ssr: false for client-only components

Debugging

FAQ