Free SEO Tool

View as Bot

Compare View as Bot (no JS) with View as Bot (pre-rendered JS) — two HTTP snapshots of the same URL. Use one full-width panel with tabs, or two columns. Each side includes HTML source (highlighted), sandboxed preview, meta tags with JSON-LD, and stats. The preview area is at least 1000px tall so you can read the layout.

Crawler for the pre-render snapshot

Search engine crawlers

AI crawlers

Why compare Chrome HTML with crawler HTML?

JavaScript frameworks often ship a minimal document to browsers while hydrating content on the client. Crawler-specific and pre-render layers may replace that document with fully serialized HTML for bots. When those paths diverge, search and AI systems can read different text than you see in DevTools under a normal tab. For background on rendering strategies, see our JavaScript SEO rendering guide and Google's JavaScript SEO basics.

This page runs two fetches: one with a desktop Chrome User-Agent (left) and one with your selected crawler User-Agent (right). Use it next to the SEO Crawler Checker for single-bot deep dives and the Prerender Checker to confirm ostr.io headers on production URLs.

What “no-JS view” really shows

The left column is what static HTML parsers receive: the document the server returns before any client-side hydration runs. Crawlers that don't execute JavaScript (most AI bots — GPTBot, ClaudeBot, PerplexityBot — and many older search engines) consume exactly this HTML. If the response is a near-empty shell with a <div id="root"></div> and a script bundle, those bots see a blank page. The sandboxed iframe preview blocks scripts so the visual reflects what those parsers parse.

Why prerender HTML can differ

Modern crawlers (Googlebot, Bingbot) are routed through pre-render layers — at the CDN, edge worker, or origin proxy — that intercept bot User-Agents and return a fully serialized snapshot generated by a headless browser. The pre-rendered HTML usually includes the rendered DOM, populated meta tags, JSON-LD blocks, and full text content. The right column shows that bot-facing document. Look for differences in title, description, canonical, structured data, and visible body text — those are the signals search engines and AI systems actually index.

When to worry about a difference

Identical columns mean your site serves the same HTML to humans and bots — fine for static or fully server-rendered sites. A divergence is only a problem if the bot column is missing content the human column has (lost text, missing meta tags, empty JSON-LD). The opposite — bots receive richer HTML than browsers — is the intended behavior for pre-rendered SPAs and is recommended by Google. If your bot column shows missing content, run the Prerender Checker to confirm whether the prerender layer is active for that URL.

Frequently Asked Questions

What does “View as Bot (no JS)” mean?
We request your URL with a desktop Chrome User-Agent so most prerender layers (including typical ostr.io routing) do not activate. The rendered preview iframe uses sandbox without scripts, so you see roughly what static parsers get from the HTML alone — often an empty shell for client-rendered SPAs.
What does “View as Bot (pre-rendered JS)” show?
It is the HTTP response for the same URL using the crawler User-Agent you pick (for example Googlebot). If your edge routes bots through a pre-rendering service, that HTML is usually fully serialized. “Pre-rendered JS” means the bot-facing document you get over the wire — we do not execute JavaScript on our server.
Why might both columns look the same?
If the page is server-rendered or static, Chrome and crawler requests often receive the same HTML. You will also see identical bodies if your infrastructure applies the same response to both traffic types.
Is this the same as running a headless browser twice?
No. Both snapshots are plain HTTP GET responses from our server. We do not execute JavaScript in Node. The left column’s preview intentionally blocks script execution in your browser to mirror non-JS consumers.
How is this different from the SEO Crawler Checker?
The Crawler Checker focuses on one crawler at a time. This tool always fetches two profiles in parallel — Chrome-like vs your chosen bot — so you can contrast HTML, titles, JSON-LD, stats, and pre-render headers in one pass.
What limits apply?
URLs must be http(s), up to 2048 characters, and cannot target private or reserved hosts (SSRF protection). Responses may be truncated at 5 MB. When configured, rate limiting is 10 requests per minute per IP (Upstash Redis).