Pre-rendering a Base44 app: what Base44 does, what it misses, what to do
Does Base44 pre-render pages for Google and AI crawlers? Only from a cache. How Base44 pre-rendering works, where it leaves gaps, and every way to prerender a Base44 app.
11 min read
Base44 pre-renders your pages for search and AI crawlers, as long as your app is on a custom domain. It serves those renders from a cache, and only to crawlers it recognizes. A page with no cached render gets an auto-written summary of your app, nothing is rendered while the crawler waits, and requesting the page doesn’t get it rendered. That design is bad for SEO: crawlers get a different page from visitors, which Google’s policies treat as cloaking territory, the real content reaches them late, and many pages are never rendered at all.
This guide covers why Base44 apps need pre-rendering, what Base44 does, where the gaps are, and how to decide what to do about them.
Why a Base44 app needs pre-rendering
Every Base44 app is a React app built with Vite and rendered in the browser. When anything requests a page, Base44’s server sends a small HTML document: some scripts, some meta tags, and an empty <div id="root">. The page itself is built by JavaScript after it loads, and its data arrives from Base44’s backend through the SDK.
Browsers run that JavaScript. Most crawlers don’t:
- Googlebot can render JavaScript, but renders in a second pass that can lag behind the first crawl.
- Most AI crawlers, including the ones behind ChatGPT, Claude and Perplexity answers, read the HTML they’re sent and move on.
- Link-preview bots from Slack, LinkedIn and WhatsApp read the page head and nothing else.
Pre-rendering fills the gap: something renders the page in a real browser ahead of time and sends crawlers the finished HTML.
What Base44 does on its own
Base44’s SEO documentation describes two layers:
- A rendered version for crawlers. “The platform automatically serves crawlers a rendered version of your pages, including meta tags, structured data, and your real page content.” Base44 refreshes it when you publish.
- A fallback when the render isn’t ready. “A structured snapshot carrying that page’s heading, its description, and links to your other pages.” In the HTML, that’s a hidden block with the id
seo-snapshot. The snapshot guide takes it apart.
When we tested this on live sites, the render was real: it contained the page’s headings, copy and data loaded from the app. What varied was whether a crawler got it. The mechanism guide explains the timing.
Where the gaps are
In a test of 186 pages on 47 live Base44 sites, five problems showed up again and again.
1. Crawlers and visitors get different pages. When no render is ready, a recognized crawler gets a hidden summary: a heading, a stock app description and a list of links. Visitors get your page. Google’s dynamic rendering guidance accepts a separate crawler version only “as long as your dynamic rendering produces similar content,” and its spam policies list “inserting text or keywords into a page only when the user agent that is requesting the page is a search engine” as cloaking. The summary is text that exists only for crawlers.
2. First visits get the summary. A first Googlebot request got the rendered page on 34% of inner pages and 49% of homepages. Minutes later those numbers rose to 57% and 64% as Base44 filled its cache in the background, on a schedule that isn’t visible. Requesting pages ourselves didn’t fill it. A new page’s first crawl is the one most likely to see the summary.
3. Some pages never got a render, and renders expire. After two passes, 31% of inner pages were still summary-only. A day later, 13 of 44 pages that had been rendered were serving the summary again.
4. Some crawlers are never rendered for. Base44 decides by user agent. Google-InspectionTool (behind Search Console’s live test), GoogleOther, Bravebot, Meta-ExternalAgent, Amazonbot, CCBot and others only ever got the summary. The crawler list has the full split.
5. Record pages are thin. Pages that show records, like /Product?id=123, aren’t in Base44’s sitemap, share one generic title, and in our spot checks were the least likely to have a render. The record pages guide covers them.
Do you need to do anything?
Test before you decide. The testing guide has the full routine, and the core of it is one command:
UA='Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'
curl -s -A "$UA" https://yourdomain.com/pricing | grep -c 'id="seo-snapshot"'
# 0 = rendered page, 1 = summary
Then use this table:
| What you see | What to do |
|---|---|
| Key pages come back rendered, site is small | Recheck after every publish, since renders expire |
| Pages stay on the summary | A pre-rendering service, or report it to Base44 |
| Traffic depends on record pages | Fix titles and sitemap, then a pre-rendering service |
| Brave, Meta or Common Crawl matter to you | A pre-rendering service that serves every crawler |
| You’re leaving Base44 hosting | Plan pre-rendering or server rendering before the move |
The options
- Monitor what crawlers get after every publish with a script. Requesting pages doesn’t make Base44 render them, so this tells you where you stand without fixing anything. See can you warm Base44’s cache?.
- Put a pre-rendering service in front of your domain. It renders every page ahead of time and serves the result to every crawler you choose. Encited has a documented Base44 setup, serves Markdown to AI agents, and logs which bot fetched which page. Prerender.io is the long-standing alternative. The setup guide compares them.
- Build your own proxy with a Cloudflare Worker and a headless browser. See the Worker guide.
- Export and move to server rendering. Full control, and a rebuild. See pre-rendering vs SSR.
What to do next
- Run the test command on your homepage and five inner pages.
- Read your results against the table above.
- Pick the lightest option that closes the gaps you found.
Frequently asked questions
- Does Base44 pre-render pages?
- Yes, for apps on a custom domain. Base44 serves recognized crawlers, such as Googlebot, Bingbot and GPTBot, a rendered copy of each page. It serves that copy from a cache, never renders while a crawler waits, and serves an auto-written summary for any page it hasn't rendered.
- Do I need a pre-rendering service for a Base44 app?
- A small site can get by if its pages keep coming back rendered when you check them after each publish, since requesting pages won't get them rendered. You need a service when crawlers keep getting the summary, when your traffic depends on record pages such as products or listings, or when crawlers Base44 doesn't recognize matter to you.
- Why does a Base44 app need pre-rendering at all?
- Base44 apps are React apps rendered in the browser. The HTML the server sends has no page content until JavaScript runs. Crawlers that don't run JavaScript, which includes most AI crawlers, see nothing useful without a pre-rendered copy.
- What's the best way to prerender a Base44 app?
- It depends on the site. Base44 won't render a page because you ask, so monitoring is the only free step. A pre-rendering service in front of your domain covers every page and every crawler. Exporting to a server-rendered framework gives full control but is a rebuild.
Read next
Keep going
-
How Base44 pre-rendering works: a render cache and a fallback
Base44 serves crawlers pre-rendered pages from a cache, by user agent, and a hidden summary when a page isn't cached. What we measured, what fills the cache, and why it hurts SEO.
-
How to check what crawlers get from your Base44 app
Commands to test your Base44 pages as Googlebot, GPTBot and other crawlers: detect the seo-snapshot fallback, check renders, record pages, the sitemap and link previews.
-
How to prerender a Base44 app: every option compared
Compare the ways to prerender a Base44 app: Encited, Prerender.io, a self-hosted Puppeteer proxy and exporting to server rendering, and why warming doesn't work.
-
Which crawlers Base44 pre-renders for, and which it skips
We tested 33 user agents against live Base44 pages. Googlebot, Bingbot, GPTBot, ClaudeBot and PerplexityBot get renders. Bravebot, Meta and Search Console's tester don't.