isaeo
Home / Blog / Technical SEO
Technical SEO

JavaScript SEO: When Your Content Isn't in the HTML

Published 2026-08-29 · 7 min read · by the isaeo team

In short

Google renders JavaScript but does it on a delay and a budget; most other crawlers, including several AI answer-engine bots, don't render at all. If your main content only exists after client-side JavaScript runs, assume a meaningful share of crawlers see an empty page. Check the served HTML source, not the browser inspector.

The problem in one sentence

If your content is inserted into the page by JavaScript after load, then any crawler that doesn't execute JavaScript sees the shell — nav, footer, an empty <div id="root"> — and nothing else.

Google does render JavaScript, so this is less catastrophic than it was a decade ago. But rendering happens in a second pass, on a budget, and is not guaranteed for every page on every crawl. And Google is not the only consumer of your site anymore.

How to check what crawlers see

The single most useful habit: view source, not inspect element. The browser inspector shows the DOM after JavaScript has run. View-source shows the HTML the server actually sent — which is what a non-rendering crawler receives.

Concretely:

  1. Open view-source on the page.
  2. Search for a distinctive sentence from your main content.
  3. If it isn't there, it isn't in the served HTML.

Repeat for your prices, your H1, your FAQ answers and your schema block — those are the four things most often injected client-side, and all four matter disproportionately.

Why AEO is stricter than SEO here

This is the part that's changed. Google's renderer is sophisticated and patient. The crawlers behind answer engines are generally neither — several fetch the raw HTML and move on.

So a client-side-rendered site can rank acceptably in Google and be effectively invisible to answer engines. The quotable lead passage you carefully wrote doesn't exist as far as they're concerned, and neither does your FAQ schema if it's injected by a tag manager.

If you're investing in AEO at all, server-rendered content is a prerequisite, not an optimisation.

See this on your own site. isaeo audits up to 10 pages free — no card, no trial timer. You get an SEO health score, an AEO score and a prioritised fix list.

Run a free audit →

Your options, in order

  1. Server-side rendering. The real fix. The server returns complete HTML; JavaScript enhances it afterwards. Every modern framework supports this.
  2. Static generation. Better still where content doesn't change per request. Nothing to render at all — it's already a file.
  3. Prerendering for crawlers. A service renders pages and serves the HTML snapshot to bots. Workable, adds a moving part, and you must serve bots the same content as users.
  4. Hybrid. Server-render the content that matters for search and AEO — headings, body copy, prices, schema — and leave genuinely interactive widgets client-side. Usually the pragmatic answer on an existing app.

Patterns that break silently

None of these announce themselves. The page looks perfect in a browser, which is exactly why they survive to production.

Try it on a site you care about

isaeo fetches your pages the way a crawler does, so you can see which content and schema actually made it into the HTML.

Start free — 10 pages, no card

Need full-site crawls, scheduled audits and white-label reports? Compare plans →

Frequently asked questions

Can Google index JavaScript content?

Yes, Google renders JavaScript in a second pass, but on a delay and within a crawl budget, so rendering isn't guaranteed for every page on every crawl. Server-rendered content is indexed faster and more reliably.

Do AI crawlers execute JavaScript?

Generally no, or not consistently. Several answer-engine crawlers fetch raw HTML only, so client-side-rendered content can be invisible to them even when it ranks acceptably in Google.

How do I check if my content is server-rendered?

Use view-source rather than the browser inspector and search for a sentence from your main content. The inspector shows the DOM after JavaScript runs; view-source shows what the server actually sent.