TheTriFusion

← Back to Blog
April 25, 202410 min readWeb Development

Mastering React Server Components

A deep dive into the architecture shift in React 18+ and how RSCs optimize performance by reducing bundle size.

T

TheTriFusion Team

Published on April 25, 2024

What React Server Components actually change

React Server Components (RSC), the architecture underneath Next.js's App Router, let a component render entirely on the server and send finished HTML to the browser — with zero JavaScript bundle cost for that component, unless it explicitly needs interactivity via "use client". For a business website, this is not an academic distinction: it directly affects how fast your pages load on a mid-range Android phone on a 4G connection, which is how most Indian visitors reach a site.

Why this matters for SEO and Core Web Vitals

Google's ranking signals include Core Web Vitals — Largest Contentful Paint (LCP), Interaction to Next Paint (INP), and Cumulative Layout Shift (CLS). RSC reduces the JavaScript the browser has to download and execute before content becomes visible, which directly improves LCP on slower connections. It also means your marketing and catalog pages can be crawled and indexed as fully-formed HTML, rather than depending on the crawler executing JavaScript correctly — a smaller, less brittle attack surface for indexing problems.

Server components vs client components: where to draw the line

The practical rule we use: default every component to a server component. Only mark a component "use client" when it genuinely needs browser-only behavior — click handlers, form state, animation libraries, or browser APIs like window. A common mistake is marking an entire page "use client" because one small interactive widget lives inside it; the fix is to isolate that widget into its own small client component and keep everything around it — headings, body copy, images — as server-rendered content.

What this looks like in a real Next.js project

A typical page structure has a server component page.js that fetches data and handles metadata/SEO tags, wrapping a mix of server-rendered content sections and a handful of small client components for things like an accordion, a form, or an animated carousel. This keeps the bulk of visible text and structure server-rendered — crawlable and fast — while interactivity still works exactly where users need it.

Common mistakes we see on Indian business sites

  • Marking the entire page component "use client" out of habit, losing server-rendering benefits for content that never needed to be client-side.
  • Fetching content inside a useEffect after mount instead of fetching it during server rendering — this delays when content actually appears in the page, both for users and for crawlers that do not wait for client-side data fetching.
  • Wrapping static marketing copy in animation libraries that require "use client" for the entire section, when only the animation trigger itself needs to be client-side.
  • Not testing what a search engine actually receives — viewing page source (not just the rendered DevTools view) reveals whether real content is present in the initial HTML.

How we apply this at TheTriFusion

Every route we ship uses Next.js App Router server components for metadata, schema markup (JSON-LD), and the bulk of visible content, with client components reserved for genuinely interactive pieces — forms, accordions, carousels, and animation triggers. This is the same architecture behind our own site's service and blog pages, verified by checking raw HTML responses with a search-engine user agent rather than assuming it works.

FAQ: React Server Components

Does using "use client" break SEO?

Not by itself — Next.js still server-renders client components to HTML on the initial request. SEO breaks when content is fetched or set only inside a useEffect, so it is missing from that initial HTML.

Should I rewrite my entire app to minimize "use client"?

Only where it is cheap to do — isolate interactive widgets into small client components rather than marking whole pages client-side. A full rewrite is rarely necessary if the underlying content is already rendered synchronously.

How do I check if my page is actually server-rendered?

View page source (not the DevTools Elements panel, which shows the post-hydration DOM) or fetch the URL with curl and a realistic user agent — if your visible text and H1 appear in that raw response, it is server-rendered correctly.

What's the next step?

See our website development service for how we architect Next.js builds for speed and SEO, or contact us to audit an existing site.

Next step

Want this built for your business?

Jaipur team · Hindi + English · GST invoicing. Ecommerce live in 48h packages from ₹25,000, or a scoped custom website / app / AI build.

Share this article

Newsletter

Insights Delivered
Directly to You

Join our community of innovators. Get the latest tech trends and digital performance tips twice a month.

Secure & Spam-free. Unsubscribe anytime.