SSR, SSG, and CSR Explained for AI Builders and Vibe Coders
Why This Matters for AI Builders and Vibe Coders
Many AI coding platforms like Lovable, Replit, and Bolt.new default to client-side rendering for speed and simplicity. That's great for rapid prototyping, but it's exactly why Google can't "see" your app content.
Understanding the difference between SSR, SSG, and CSR is step one to fixing SEO for apps built on Lovable, Replit, or Bolt.new.
What Is Client-Side Rendering (CSR)?
Client-Side Rendering means the browser builds the page using JavaScript after the initial HTML loads.
How it works:
- Server sends a minimal HTML file (usually just
<div id="root"></div>) - Browser downloads JavaScript bundles
- React (or another framework) builds the UI in the browser
- User sees the fully interactive app
The SEO problem:
If you "view source" on a CSR app with Javascript disabled, you'll see almost nothing. Just the document headers and an empty <div id="root"></div>. Google's and other search engine crawlers may not wait for JavaScript to execute, or it may execute it partially, meaning your content is invisible for indexing.
Common on:
- Lovable
- Replit
- Bolt.new
- Most Vite + React setups
Best for: Rapid prototyping, dashboards, internal tools where SEO doesn't matter.
What Is Server-Side Rendering (SSR)?
Server-Side Rendering means HTML is generated on the server for every request, then sent fully rendered to the browser.
How it works:
- User requests a page
- Server executes React (or your framework) and generates HTML
- Fully rendered HTML is sent to the browser
- Browser displays content immediately
- JavaScript "hydrates" to make it interactive
The SEO advantage:
Googlebot receives fully rendered HTML instantly. No waiting for JavaScript execution. Every page is crawlable and indexable immediately.
The catch:
SSR requires backend infrastructure. Most AI coding platforms don't support it out of the box because they're optimized for static hosting or client-side apps.
Common on:
- Next.js (with
getServerSideProps) - Remix
- SvelteKit
- Custom Node.js/Express + React setups
Best for: Production web apps, e-commerce, content-heavy sites where SEO is critical.
What Is Static Site Generation (SSG)?
Static Site Generation means pages are pre-built into static HTML at build time, not at request time.
How it works:
- At build time, framework generates HTML for every page
- Static HTML files are deployed to a CDN
- User requests a page and gets pre-rendered HTML instantly
- JavaScript hydrates for interactivity
The SEO advantage:
Super fast and SEO-friendly. Pages load instantly, and crawlers see full HTML immediately.
The limitation:
Static means static. If your app has user-specific content, dynamic dashboards, or real-time data, SSG won't work. You'd need to rebuild and redeploy every time content changes.
Common on:
- Next.js (with
getStaticProps) - Astro
- 11ty
Best for: Blogs, marketing sites, documentation, portfolios where content doesn't change frequently.
Why CSR Breaks SEO (and Why It's Common on AI Platforms)
Lovable, Replit, Bolt.new, and other AI coding platforms emphasize fast iteration, not full-stack hosting. That's why they default to client-side rendering.
The result? SEO invisibility.
What developers assume:
"Google can execute JavaScript, so my CSR app will rank fine."
The reality:
- Google can execute JavaScript, but may not do so reliably
- Heavy JavaScript frameworks can fail to render on slower networks or older crawler infrastructure
- LLM crawlers like those of Perplexity and Claude do not render Javascript
The bottom line: If you built your app on Lovable, Replit, or Bolt.new, you probably have a CSR app. And that means Google and other crawlers see an empty page.
Where Dynamic Rendering and Prerendering Fits In
You don't need to rebuild your app with SSR or SSG. There's a simpler solution: dynamic rendering.
What is dynamic rendering?
Serve bots a pre-rendered HTML snapshot, while serving users the normal CSR app. While it is considered a workaround, Google officially approves this approach and it is recommended for those who do not want to spend their time migrating their CSR apps to be SSR and losing access to their AI coding platform like Lovable.
Two options:
Option 1: Traditional Dynamic Rendering
- Detect bot user agents (Googlebot, Bingbot, etc.)
- Route bot requests to a headless browser (like Puppeteer or Rendertron)
- Serve fully rendered HTML to bots
- Serve normal CSR to users
The problem: Requires backend infrastructure, headless browser setup, maintenance, and losing access to vibe coding platforms.
Option 2: DNS Prerendering (Hado SEO)
- Point your domain to Hado SEO's managed rendering and caching infrastructure
- No code changes required
- No backend setup
- Keep building client-side on Lovable/Replit/Bolt.new
- Bots automatically get pre-rendered HTML
- Users get your normal CSR app
The advantage: You stay entirely in your AI coding platform workflow. No SSR migration. No server management. Hado SEO handles the security, maintenance, rendering, and caching infrastructure so you can focus on shipping more features.
CSR vs. SSR vs. SSG vs. Prerendering
| Rendering Type | SEO Friendly | Requires Server | Best For |
|---|---|---|---|
| CSR | ❌ | No | Rapid prototyping, internal tools |
| SSR | ✅ | Yes | Production web apps, e-commerce |
| SSG | ✅ | Sometimes | Blogs, marketing sites, docs |
| DNS prerendering (for CSR apps) | ✅ | No | AI-coded apps (Lovable, Replit, Bolt.new) |
Next Step
If your Lovable, Replit, or Bolt.new app isn't ranking, you don't need to rebuild it with SSR or SSG.
You just need to render it for bots.
That's what DNS prerendering does. No code changes. No backend. Just point your domain and ship.
Try DNS Rendering with Hado SEO → and make your AI-coded app crawlable in minutes.