- Methodology
- Parameters
- Content Visibility Without JavaScript
Content Visibility Without JavaScript
stableCategory: content-structure · Methodology v4.5
How much of your primary content is present in the raw HTML before any JavaScript runs?
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
What this parameter measures
How much of your primary content is present in the raw HTML before any JavaScript runs? That is what this parameter estimates. friendly4AI takes the server-provided HTML, removes <script> and <style> blocks, strips remaining tags, and measures the length of the visible text that survives. It also looks for single-page-app markers (such as id="__next", id="root", id="app", or framework hooks like ng-app) and loading placeholders, because a near-empty shell with these markers indicates content that only appears after client-side rendering.
Why it matters for AI-readiness
Most AI crawlers do not execute JavaScript. If your hero copy, product descriptions, pricing, or FAQ answers are injected client-side, those crawlers see an empty frame and your content is invisible to ChatGPT, Perplexity, and AI search features. Server-rendered HTML guarantees that what a human reads is also what a machine reads, which is the single biggest factor in whether your substance can be cited at all. Heavy client-side rendering is one of the most common reasons a content-rich site scores poorly on AI-readiness.
How we score it
Under the v4.4 methodology, this Content Structure parameter is a gradient based on a text-length heuristic rather than a literal rendered-versus-raw comparison. The processor measures the visible text length of the initial HTML. A page passes (100) when that text is rich (roughly 1500 characters or more) and the page is not a script-heavy SPA shell. It is not flagged 100 if it shows SPA markers together with more than ten script blocks. It earns a partial (50) when visible text is moderate, about 500 characters or more, indicating mixed server- and client-rendered content. It fails (0) when visible text is under about 500 characters, which usually means a JavaScript-dependent layout. Note: the published "≥80% / 50–80% / <50%" rubric is approximated by these character-length thresholds; the processor does not render JavaScript to compute an exact percentage.
How to fix common issues
- Adopt server-side rendering (SSR) or static site generation (SSG) so primary content ships in the initial HTML response.
- If you run a SPA framework (React, Vue, Angular), enable SSR or pre-rendering for key pages instead of rendering everything client-side.
- Prioritize server-rendering for hero content, product and pricing copy, and FAQ sections that AI systems should be able to read.
- Avoid relying on loading placeholders for core content; the text behind a spinner is not counted.
- Re-scan after enabling SSR and confirm the visible-text length and
estimated_visibility_pctrise into the pass band.
Version History
- Introduced
- v4.0
- Last changed
- v4.4
Key takeaways
- Signal: https://{domain}
- Category: Content Structure
- Passes when: the initial HTML carries rich visible text (about 1500+ characters after stri…