Outrings
Web observability and evidence

What can't be measured without a browser?

The honest boundary of server-side analysis — what needs JavaScript execution, and why saying so beats guessing.

3 min read
Short answer

Anything that only exists after JavaScript runs: client-rendered content, computed layout, real interaction behaviour, and genuine rendering performance. A server-side audit sees the HTML as delivered — which, importantly, is also what most AI crawlers see.

The two different views of a page

Every page exists in two forms, and confusing them is behind a large share of "why does my site not appear anywhere" questions.

  • As delivered. The HTML the server sends. What an HTTP client receives, and what most AI crawlers work from.
  • As rendered. What exists after scripts run, the DOM is modified and styles are computed. What a person sees.

On a server-rendered site these are nearly the same. On a client-rendered application they can be wildly different — an empty container in the first, a complete page in the second.

What needs a browser

PropertyWhy a browser is required
Client-rendered contentIt does not exist until scripts execute
Computed layout and contrastRequires the CSS cascade to be resolved against a viewport
Core Web VitalsLCP, CLS and INP are rendering and interaction measurements
JavaScript errorsOnly observable at runtime
Interaction behaviourMenus, modals, focus traps — all require events
Cookies set by scriptOnly appear once the script runs
Lazy-loaded contentRequires scroll and viewport intersection
Consent banner behaviourWhat loads before and after consent is a runtime question

What does not need one

Worth stating, because it is most of what determines whether a site works for machines:

  • Every response header — security, caching, cookies, content type.
  • The entire TLS handshake: protocol, cipher, certificate, chain.
  • All DNS: A, AAAA, MX, NS, CAA, SPF, DMARC.
  • robots.txt and its resolution per crawler and per path.
  • The delivered HTML: metadata, headings, structured data, alt attributes, link structure.
  • Redirect behaviour and canonical directives.
  • Server response timing.
The important consequence: the server-side view is not an inferior approximation of the browser view. For the question "can an AI crawler read this site", it is the correct view — because that is precisely what those crawlers get. Googlebot renders JavaScript, slowly and selectively; most AI crawlers do not render at all.

The honest way to report the gap

A check that requires rendering should not be quietly skipped, and it certainly should not be scored as a pass. It should return a distinct state — requires_browser — that says: this is not a failure of your site or of the tool, it is a statement about where the fact lives.

This matters for agents especially. A tool that silently omits browser-dependent checks teaches a model that those areas are fine. A tool that names them lets the model say "this was not evaluated, and here is why".

Covering the difference

  1. Use server-side measurement for configuration, transport, DNS, crawler access and delivered content — the things that decide whether machines can use your site at all.
  2. Compare delivered against rendered yourself: curl -sL your page and search for text you can see in a browser. A mismatch is the finding.
  3. Use a browser-based tool for Core Web Vitals, computed contrast and interaction testing.
  4. Test accessibility with a real assistive technology as well — automated checks of either kind catch perhaps a third of real barriers.

Step two takes ten seconds and resolves more AI-visibility questions than any other single check.

What our audit reports about this

Every item below is measured directly, not inferred. Run it against your own site and the result names the exact rule or header responsible.

  • Checks that genuinely require rendering are returned as requires_browser rather than skipped or scored as passes.
  • How much of your visible text is present in the delivered HTML versus added by JavaScript.
  • A published coverage statement naming rendering, Core Web Vitals and field data as explicitly out of scope.
  • Everything observable without a browser — headers, TLS, DNS, robots resolution, delivered markup — measured directly.

For agents and scripts, the same measurement is at /api/v1/summary?url=yoursite.com — see the API documentation.

Related questions

Is a server-side audit worse than a browser-based one?

It is different, and for machine-readability questions it is the more relevant view, because most AI crawlers do not render either. For rendering performance and computed layout, a browser-based tool is the right instrument. They are complements.

Why not run a headless browser?

It is a substantial infrastructure commitment, and it would change the honest boundary of what is claimed. Rather than partially render and imply completeness, browser-dependent checks are declared out of scope with the reason.

How do I know if my content needs JavaScript?

Run curl -sL on your page and search for a distinctive sentence you can see in a browser. If it is not there, it is built client-side and most AI crawlers will never see it.

Does Google see the rendered version?

Googlebot does render, on a second pass, with delay and not always completely. Most AI crawlers do not render at all — which is why a client-rendered site can rank acceptably in Google while being invisible to every AI assistant.

Read next

All 100 guides · How every check works · API for agents