Skip to main content

Server-Side Rendering

Expo Router supports server-side rendering (SSR) and static site generation (SSG) for web applications, enabling better performance and SEO.
Server rendering features require @expo/server and a compatible server environment.

Rendering Modes

Client-Side Rendering (CSR)

Default mode - all rendering happens in the browser:
app/index.tsx

Server-Side Rendering (SSR)

Render on the server for each request:
app/blog/[slug].tsx

Static Site Generation (SSG)

Pre-render at build time:
app/blog/[slug].tsx
From CLAUDE.md:20-24:

Data Loading

Loader Function

Fetch data on the server:
app/profile/[id].tsx
From the source (hooks.ts:356-372):

Type-Safe Loaders

app/posts/[id].tsx

Static Generation

generateStaticParams

Generate static paths at build time:
app/products/[id].tsx
From CLAUDE.md:20-24:

Incremental Static Regeneration

Revalidate static pages:
app/blog/[slug].tsx

React Server Components

Use React Server Components for server-only code:
app/dashboard.tsx

Client Components

Mark client-only components:
components/InteractiveChart.tsx

Server Configuration

Next.js Adapter

Deploy with Next.js:
next.config.js

Custom Server

Create a custom server:
server.ts

SEO Optimization

Meta Tags

Set meta tags for SEO:
app/blog/[slug].tsx

Sitemap Generation

Generate sitemap.xml:
app/sitemap.xml+api.ts

Performance Optimization

Data Caching

Streaming

Stream data to the client:
app/feed.tsx

Environment Variables

Access server-side environment variables:
app/api/config+api.ts

Error Handling

Custom Error Pages

app/+error.tsx

Loader Error Handling

Testing

Test Loaders

__tests__/loaders/user.test.ts

Best Practices

Minimize Client Bundle

Prefetch Data

Cache Responses

Next Steps

API Routes

Create server-side API endpoints

Typed Routes

Type-safe server routes

Deep Linking

Server-rendered deep links

Navigation

Client-side navigation