What Causes This Error?
This error occurs when your adapter configuration doesn’t match your output mode, or when you have server-rendered pages but the adapter is configured for static output only.
The Problem
// astro.config.mjs
import { defineConfig } from 'astro/config';
import adapter from 'some-static-only-adapter';
export default defineConfig({
output: 'server', // ❌ Requires SSR
adapter: adapter(), // ❌ Adapter only supports static
});
The Fix
Use Compatible Adapter
// astro.config.mjs
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
output: 'server',
adapter: vercel(), // ✅ Supports SSR
});
Or Change Output Mode
// astro.config.mjs
export default defineConfig({
output: 'static', // ✅ Match adapter capabilities
});
Common Scenarios
Vercel Static vs Serverless
// For static sites
import vercel from '@astrojs/vercel/static';
export default defineConfig({
output: 'static',
adapter: vercel(),
});
// For SSR
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
output: 'server',
adapter: vercel(),
});
Server Routes Require SSR Adapter
---
// src/pages/api/data.ts
export const prerender = false;
export async function GET() {
return new Response(JSON.stringify({ data: 'hello' }));
}
---
// ❌ Static adapter won't work
import vercel from '@astrojs/vercel/static';
// ✅ Use serverless adapter
import vercel from '@astrojs/vercel/serverless';
Hybrid Mode
// astro.config.mjs
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
output: 'hybrid', // Static by default, SSR opt-in
adapter: vercel(),
});
---
// Most pages are static
// Opt-in to SSR per page:
export const prerender = false;
---
Remove SSR Pages for Static Build
---
// If you need static output, ensure all pages can prerender
// ❌ This prevents static build
export const prerender = false;
// ✅ Remove or set to true
export const prerender = true; // or remove entirely
---
Check Adapter Documentation
// Different adapters have different capabilities
// @astrojs/vercel/static - Static only
// @astrojs/vercel/serverless - SSR support
// @astrojs/netlify - Both static and SSR
// @astrojs/node - SSR only (needs server)
// @astrojs/cloudflare - SSR with edge functions
Move Dynamic Logic to Client
---
// Instead of server-side data fetching
// export const prerender = false;
---
<div id="data"></div>
<script>
// ✅ Fetch on client instead
fetch('/api/data.json')
.then(res => res.json())
.then(data => {
document.getElementById('data').textContent = JSON.stringify(data);
});
</script>
Quick Checklist
- Match
outputmode with adapter capabilities - Use serverless adapters for SSR
- Use static adapters for static sites
- Check if pages have
prerender = false - Consider hybrid mode for mixed needs