Open source / MIT

Your React app,
visible to search engines.

Search engines crawl HTML. React apps serve an empty shell. Prestruct fixes that: rendering each route to static HTML at build time with correct SEO meta tags, Open Graph, schema.org, and caching headers. No framework migration, no edge runtime, just a smarter build step.

Build pipeline

vite build

Hashed JS + CSS bundles to dist/

inject-brand.js

Global SEO meta into index.html

prerender.js

Each route rendered to static HTML

CF Pages deploy

Globally cached, correct HTTP status

The Prestruct engine is a purpose built tool, that delivers SEO server side rendering (for crawlers), while being completely serverless on Cloudflare Pages.

rank

Crawlable content

Every route serves full HTML to bots. No JavaScript execution required. Googlebot, Bingbot, and social crawlers see exactly what a user sees. Your words are in the code that bots see.

CTR

Rich search previews

Per-route title, description, and canonical baked into HTML. Your search result shows the right snippet for each page, not a generic site-wide fallback.

share

Social cards that work

og:title, og:description, og:url, og:image correct on every route. When someone shares your /features page, the card shows features content, not just your homepage organization.

trust

Structured data

JSON-LD injected from your config into every page head. Organization, WebSite, Product, Article: whatever your app needs to earn rich results.

speed

Correct cache headers

Hashed JS/CSS assets cached immutably. HTML revalidates on every request. Users always get fresh content, browsers never re-download unchanged bundles.

zero cost

No infrastructure change

Prestruct deploys to Cloudflare Pages as static files. No server, no edge worker, no new runtime dependencies. The tradeoff: Build time goes up by about 2 seconds for every 10 prerendered routes.

Prerendered HTML is the same for every visitor. Islands punch holes through it for content that isn't: cart state, recently viewed items, logged-in user widgets. Each island mounts its own React root after hydration. Crawlers see a fallback. Humans see live data.

eager

Immediate

Mounts right after hydration. For above-the-fold widgets that need to be interactive as soon as possible.

visible

On scroll

Mounts via IntersectionObserver when the element enters the viewport. Nothing loads until the user reaches it.

idle

Background

Mounts via requestIdleCallback during browser downtime. No competition with paint or interaction.

The repo running at https://prestruct.creadev.org is the same example app in the Prestruct GitHub repo. Every page you visit here was prerendered by Prestruct at build time. The widget below fetches and parses the live HTML for the current route so you can see exactly what a search engine or social crawler sees.
live head tagshttps://prestruct.creadev.org/

fetching...