Shwetank Ojha
Technical SEOAdvanced

Hydration

Hydration is the process where a browser attaches JavaScript event listeners and interactive behavior to server-rendered HTML that has already been sent to the page, combining fast initial content with full client-side interactivity afterward.

7 April 20262 min read
Hydration: JavaScript attaching interactivity to already-visible server-rendered HTML
TL;DR. Hydration takes server-rendered HTML that's already visible on the page and attaches JavaScript event listeners to it, turning static markup into a fully interactive interface without re-rendering the content itself. It combines server-side rendering's SEO and speed advantages with client-side rendering's interactivity, though a large hydration bundle can itself become the bottleneck, delaying when a page actually becomes responsive to clicks even after it visually appears complete.

What is hydration?

Hydration is the step where a browser takes HTML the server already rendered and sent down, content already visible and readable, and layers JavaScript onto it so buttons click, forms submit, and dropdowns open. The name reflects the metaphor: static HTML is the dry skeleton, and JavaScript execution hydrates it into something alive and interactive, without needing to rebuild the content from scratch the way pure client-side rendering would.

Key highlights

  • Hydration is what lets a page pass server-side rendering's content immediately to crawlers while still delivering the same rich interactivity a client-side rendered app would offer once JavaScript finishes attaching.
  • A large hydration bundle creates its own performance problem, since the browser has to download, parse, and execute JavaScript for the whole page before any of it becomes clickable, even though the content was visible the entire time.
  • Selective hydration prioritizes attaching interactivity to the elements a visitor is most likely to touch first, rather than hydrating the entire page in one uniform, blocking pass.
  • Partial hydration goes further, deliberately leaving some components, a footer, a static sidebar widget, entirely non-interactive and never hydrated at all, since not every piece of a page needs JavaScript behavior attached to it.
Selective and partial hydration: prioritizing which page elements get JavaScript interactivity first

Why hydration overhead directly hurts responsiveness

A visitor who taps a button before hydration completes on that section experiences exactly the kind of unresponsive delay Interaction to Next Paint measures, even though the page looked fully loaded the whole time. This visible-but-not-yet-interactive gap is one of the most common causes of a poor INP score on otherwise fast-loading server-rendered pages, which is exactly why selective and progressive hydration strategies exist.

Reducing hydration overhead in practice

  • Prioritize hydrating above-the-fold interactive elements first, deferring below-the-fold widgets until after they're actually visible.
  • Skip hydration entirely for genuinely static components that never need to respond to interaction.
  • Split the JavaScript bundle so unrelated components don't all wait on the same monolithic script to finish loading before any of them can hydrate.
Hydration: full vs partial
Hydration: gap and inp

Frequently asked questions

What is hydration, in one sentence?

Hydration is the process of attaching JavaScript interactivity to HTML that a server already rendered and sent to the browser as visible content.

Does hydration slow down SEO the way client-side rendering does?

No, not for indexing purposes. Crawlers already see the complete content in the initial HTML, since hydration only affects interactivity, not what content exists on the page in the first place.

Why does a page sometimes look loaded but not respond to clicks?

Because the visible HTML arrived before hydration finished attaching event listeners; the content and the interactivity are two separate steps, and a heavy JavaScript bundle can leave a visible gap between them.

Real-world example

A media site's server-rendered article pages loaded instantly and read correctly to crawlers, but the comment section and share buttons stayed frozen for a noticeable beat after the page appeared, since a large hydration bundle had to fully execute before any interactive element would respond. Switching to selective hydration, prioritizing the comment box and deferring the share widget, closed most of that visible lag. (Illustrative example, not a documented case.)

SO

Shwetank Ojha

SEO & AIO Strategist

Helping businesses dominate search results through data-driven SEO strategies, AI-powered optimization, and content systems that compound growth.