Cursor·Fix

Fix: Next.js Hydration Mismatch Errors

Quick Answer

Wrap client-only code (window, localStorage, browser APIs) in useEffect or use the 'use client' directive. Common cause: rendering dates, random values, or browser-dependent content during SSR.

Quick Fix Summary

IssueHydration errors
Fastest fixIdentify the mismatch
Use this page ifConsole shows 'Hydration failed' or 'Text content did not match'

Symptoms

  • !Console shows 'Hydration failed' or 'Text content did not match'
  • !Page flickers on load
  • !Components render differently on server vs client
  • !Dynamic content causes warnings

Step-by-Step Fix

1

Identify the mismatch

The error message tells you which element differs. Look for dynamic content that changes between server and client renders.

2

Wrap browser APIs in useEffect

Code using window, document, localStorage must run only on the client. Use useEffect(() => { /* browser code */ }, []).

3

Use suppressHydrationWarning

For intentional differences (timestamps, user-specific content), add suppressHydrationWarning to the element.

4

Check for conditional rendering

If rendering differs based on authentication or user data, show a loading state on the server and the real content after hydration.

5

Avoid inline Date/Math.random

new Date().toLocaleString() and Math.random() produce different results on server vs client. Compute these in useEffect.

Frequently Asked Questions

Hydration is when React attaches event handlers to server-rendered HTML. If the HTML doesn't match what React expects, you get a hydration error.

Yes, for intentional mismatches (like timestamps). But don't use it to hide real bugs — fix the actual mismatch.

Related

Weekly Signals

Get the next fix, switch, or warning before it hits your build.

Join builders getting the community signals, fix patterns, and tool shifts that matter before they show up everywhere else.

Follow the signals →