We use cookies. Privacy Policy

    PageGlass - JavaScript SEO Rendering for React & Vue Sites

    Partial prerendering: when you'd rather not implement it yourself

    Partial prerendering combines a static shell with dynamic content streamed at request time. It's a clean primitive, it lives behind an experimental flag in Next.js, and rolling it out across an existing app is a real engineering project.

    This is a known problem, and the fix is simpler than you think.

    100+ bots supportedPre-rendered by PageGlassFive-minute setupBuilt on Cloudflare's edge
    Curious how a Next.js or SPA URL appears to bots today? Paste any public URL - yours, a competitor's, or any site at all - to see the static shell vs the hydrated DOM.

    Don't want an external tool? We understand.

    Partial prerendering done well is a clean primitive. It also means migrating to App Router, marking every dynamic boundary correctly, debugging streaming behaviour in production, and accepting that your rendering strategy is now coupled to one framework's decisions. PageGlass takes a different angle - render the whole page for bots from the outside, leave your application code alone.

    Fix this in three steps

    1. Run a free JavaScript scan. Confirm the bot visibility gap caused by the dynamic parts of your route that bypass the static shell - the scan takes ten seconds and needs no signup. You get exactly what Googlebot, Bingbot, and the AI crawlers see when they hit your URLs today, side by side with what your users see.
    2. Add one CNAME record. Point your JavaScript site's domain through PageGlass in your DNS provider. The change takes thirty seconds and is fully reversible. Zero code changes, no deploy, no impact on the bundle your real users download.
    3. JavaScript content is now indexable. Bot traffic now receives fully-rendered HTML for every URL on your JavaScript site, while human visitors keep getting the exact same dynamic experience as before. Come back to PageGlass and run the scan again to confirm the fix.

    What partial prerendering is for

    Partial prerendering targets a specific problem: pages that have stable shell content (navigation, layout, hero copy) and dynamic regions (recommended products, signed-in user state, real-time prices). Before PPR, the answer was either Static Site Generation (which serves stale data) or Server-Side Rendering (which makes every request hit the server). PPR streams the static shell from a CDN and the dynamic regions over HTTP, giving you the best of both for human users.

    This is a genuinely good primitive when your bottleneck is LCP and user-perceived speed. The catch is that it's tightly coupled to Next.js App Router and requires explicit Suspense boundaries around every dynamic region. Mistakes are subtle - put a boundary in the wrong place and a region that should be dynamic gets baked into the static shell, or vice versa.

    Where it doesn't help with SEO

    • Non-streaming crawlers. Bingbot, GPTBot, ClaudeBot, PerplexityBot, and most social card fetchers read the initial HTML response and stop. Whatever's in the static shell, they see; whatever streams afterwards, they don't.
    • Dynamic-region content that matters for ranking. If your H1, structured data, or primary product description lives in a dynamic region, PPR makes the user-side faster but leaves the bot-side unchanged.
    • Personalised meta tags. Per-user titles or descriptions that depend on auth or session can't go in the static shell, so they only resolve in the dynamic stream that crawlers don't read.

    The simpler path when SEO is the real goal

    If the actual problem you're trying to solve is "bots and AI crawlers don't see my content," PageGlass is a five-minute alternative to a multi-month framework migration. We render every URL for bots in a headless browser - dynamic regions included - and serve the resolved HTML at the edge. Human visitors keep the dynamic experience exactly as built. Stack it with partial prerendering if you want, or skip the PPR work entirely if SEO is the only outcome you needed.

    Related resources

    Frequently asked questions