Content Visibility Without JavaScript
stableCategory: content-structure · Methodology v4.5
It estimates how much of your primary content arrives in the initial HTML response, before client-side rendering kicks in.
Signal Source
- Source
https://{domain}- Kind
- html_dom
Score Bands
| Verdict | Condition |
|---|---|
| Pass | the initial HTML carries rich visible text (about 1500+ characters after stripping scripts, styles, and tags) and is not a script-heavy single-page-app shell |
| Partial | the initial HTML carries a moderate amount of visible text (about 500+ characters) — some content is server-rendered but parts still depend on JavaScript |
| Fail | the initial HTML carries minimal visible text (under about 500 characters), typically a JavaScript-dependent shell with little or no server-rendered content |
Description
This parameter checks how much of your primary content sits in the raw, server-provided HTML before any JavaScript runs. friendly4AI strips out <script> and <style> blocks along with the remaining tags, then measures the visible text that's left. Why it counts: most AI crawlers — the ones behind ChatGPT, Perplexity, and Claude — never execute JavaScript. Anything injected client-side simply isn't there for them.
What does this parameter measure?
It estimates how much of your primary content arrives in the initial HTML response, before client-side rendering kicks in. friendly4AI takes the server-provided HTML, removes the <script> and <style> blocks, strips the remaining tags, and measures the length of the visible text that survives.
It also looks for single-page-app (SPA) markers — id="__next", id="root", id="app", framework hooks like ng-app — and loading placeholders. A near-empty shell carrying those markers is a tell: the real content only shows up once the browser renders it.
Why does it matter for AI-readiness?
Most AI crawlers don't run JavaScript. So if your hero copy, product descriptions, pricing, or FAQ answers get injected client-side, those crawlers receive an empty frame and your content stays invisible to ChatGPT, Perplexity, and AI search features. Server-rendered HTML keeps what a human reads identical to what a machine reads, and that's the biggest single factor in whether your content can be cited at all. Heavy client-side rendering is one of the most common reasons a content-rich site still scores poorly on AI-readiness.
How is it scored?
Under the v4.5 methodology this Content Structure parameter is graded on a gradient, using a visible-text-length heuristic rather than a literal rendered-versus-raw comparison. The processor measures the visible text length of the initial HTML and assigns one of three scores:
- Pass (100): visible text is rich (roughly 1500 characters or more) and the page is not a script-heavy SPA shell. A page does not earn 100 if it shows SPA markers together with more than ten script blocks.
- Partial (50): visible text is moderate (about 500 characters or more) — a mix of server- and client-rendered content.
- Fail (0): visible text falls under about 500 characters, which usually points to a JavaScript-dependent layout.
One caveat: the published "≥80% / 50–80% / <50%" rubric is approximated by these character-length thresholds. The processor doesn't render JavaScript, so it can't compute an exact percentage.
How do you fix it?
- Move to server-side rendering (SSR) or static site generation (SSG) so primary content ships inside the initial HTML response.
- Running a SPA framework (React, Vue, Angular)? Turn on SSR or pre-rendering for your key pages instead of rendering everything in the browser.
- Put server-rendering first for hero content, product and pricing copy, and FAQ sections you want AI systems to read.
- Don't hide core content behind loading placeholders. Text waiting behind a spinner doesn't get counted.
- Re-scan once SSR is live, and check that the visible-text length and
estimated_visibility_pctclimb into the pass band.
Related parameters: Semantic HTML, Heading Hierarchy, and Structured Data.
Version History
- Introduced
- v4.0
- Last changed
- v4.5
Key takeaways
- Signal: https://{domain}
- Category: Content Structure
- Passes when: the initial HTML carries rich visible text (about 1500+ characters after stri…