Hydration is React attaching interactivity to the HTML the server already sent — and it only works if the first client render produces the same tree. When it doesn't, React throws the hydration error and re-renders from scratch. The mismatch is deterministic: something in the render output depends on an input that differs between server and browser.
new Date() / Date.now() in a component: the server rendered one second (or timezone), the browser another. Even “x minutes ago” strings differ.Math.random(), generated IDs, or shuffled lists computed during render.window, localStorage, screen size, or a theme read during the first render. The server assumed one thing; the browser knows another.<div> inside a <p>, a <table> missing its <tbody> structure, nested <button> or <a> elements. Browsers “repair” invalid nesting in the parsed HTML, so the DOM React hydrates against isn't the DOM React described. This cause is silent and extremely common.data-* attributes) — production users hit this; your dev machine may not.toLocaleString() without an explicit locale: server locale ≠ user locale.useEffect + state, or pass a fixed value from the server (a prop generated once server-side) so both sides agree.next/dynamic and ssr: false, or gate on a mounted flag (const [mounted, setMounted] = useState(false) + effect) rendering a placeholder first.p > div with valid structure; this class of fix is permanent and free.suppressHydrationWarning is for one narrow case — a single text node (like a timestamp) that is allowed to differ. On that element only, knowingly. Spraying it across a tree hides real bugs.Disable browser extensions for the site and retest (extension-injected attributes are invisible in your code, so this eliminates a whole class in one step). If it reproduces only in production, compare the deployed HTML against dev — minification plus extension repair is a different beast than the dev mismatch, and the raw deployed source is the evidence.
Does a hydration error break the page? React recovers by re-rendering the whole tree on the client — the page works, but slower, with a visible flicker, and the SEO/perf benefits of server rendering are lost for that page. Worth fixing, not an outage.
Why does it only happen for some users? Extensions, timezones, and locales differ per user — the inputs that differ between server and their browser. Reproducing needs their conditions, which is why the report's details (browser, page, time) matter.