Error: There was an error while hydrating. Because the error happened outside of a Suspense boundary, the entire root will switch to client rendering
The Problem
When using Next.js 13 and the App directory, you might encounter the following error when using the <head> tag in your root component:
Error: There was an error while hydrating. Because the error happened outside of a Suspense boundary, the entire root will switch to client rendering
This occurs because Next.js controls the injection of metadata into the <head> tag of the HTML of your page during hydration. By using the <head> tag directly, the server-rendered HTML does not match what is on the client at the time of hydration.
The Solution
In the App Router, use the Metadata API to manage <head> elements. The next/head component does not work in the App Router.
Export a metadata object from your page or layout:
export const metadata = {
title: "Test Title",
};
export default function Home() {
return (
<main>
<div>
<h1>Hello World</h1>
</div>
</main>
);
}
For dynamic metadata, use the generateMetadata function:
export async function generateMetadata({ params }) {
const { slug } = await params;
return { title: `Page - ${slug}` };
}
Pages Router
If you are using the Pages Router, use the Head component from next/head:
import Head from "next/head";
export default function Home() {
return (
<main>
<Head>
<title>Test Title</title>
</Head>
<div>
<h1>Hello World</h1>
</div>
</main>
);
}
For additional guidance on fixing hydration errors, see this answer.
Related Answers
Considered "not bad" by 4 million developers and more than 150,000 organizations worldwide, Sentry provides code-level observability to many of the world's best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.