Skip to main content
Support home / Integrations

Next.js

Fathom Analytics works well with Next.js with minimal configuration. A huge thank you to Derrick Reimer, founder of SavvyCal for creating the incredible fathom-client package.

If you're using Next.js App Router (v13.4+)

The App Router is the recommended approach for new Next.js applications. Here's how to set up Fathom:

  1. Install the fathom-client package:
npm install fathom-client
  1. Create a Fathom component to load the tracking script. Create a new file at app/components/Fathom.tsx:
'use client';
 
import { load, trackPageview } from 'fathom-client';
import { useEffect, Suspense } from 'react';
import { usePathname, useSearchParams } from 'next/navigation';
 
function TrackPageView() {
const pathname = usePathname();
const searchParams = useSearchParams();
 
useEffect(() => {
load('YOUR-SITE-ID', {
auto: false
});
}, []);
 
useEffect(() => {
if (!pathname) return;
 
trackPageview({
url: pathname + searchParams?.toString(),
referrer: document.referrer
});
}, [pathname, searchParams]);
 
return null;
}
 
export default function Fathom() {
return (
<Suspense fallback={null}>
<TrackPageView />
</Suspense>
);
}
  1. Import and use the Fathom component in your root layout (app/layout.tsx):
import Fathom from './components/Fathom';
 
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
<Fathom />
{children}
</body>
</html>
);
}

For more details, see the fathom-client App Router documentation.

If you're using Next.js Pages Router

If you're using the Pages Router (Next.js 12 or the pages/ directory in newer versions):

Please see the fathom-client Pages Router documentation.

Tracking events

To track custom events, you can use the trackEvent function from fathom-client:

import { trackEvent } from 'fathom-client';
 
// Track a simple event
trackEvent('Button Clicked');
 
// Track an event with a value (in cents for monetary values)
trackEvent('Purchase Completed', { _value: 9900 });

Further customization

To learn about all the options we offer, read our advanced documentation here.


If you still have questions or require help with anything, please reach out to us and we'll happily get things sorted out for you.


Can't find what you're looking for?