- Source vs DOM
- where the diagnosis starts
- SSR
- usually the answer
- Engineering
- this is a code fix
Part of the broader technical SEO practice.
JavaScript SEO
Your page looks complete in a browser and arrives at Google half empty. Content and links injected client-side may never reach the indexer, and nothing in your reporting will say so explicitly.
- Mechanism
- Two-pass indexing, and where it fails.
What actually happens
Google fetches your HTML, queues the page for rendering, and executes JavaScript later when resources allow. That second pass is not guaranteed to be prompt, complete, or to happen at all on low-value pages. Other crawlers — including several that AI assistants rely on — do far less rendering than Google, or none.
So content that only exists after JavaScript executes sits in a queue. On a large site with limited crawl allocation, plenty of pages never reach the front of it. Internal links injected client-side are worse: if a crawler never sees the link, it never discovers the destination.
Diagnosis is straightforward once you know to look. Compare raw HTML against rendered DOM and you can see exactly what is missing. The fix is an engineering change, which is why this work happens with your developers rather than to them.
- Is this you?
- If none of these apply, this probably isn’t the service you need.
Symptoms of a rendering problem
| Symptom | What it usually indicates |
|---|---|
| Google shows a page but the snippet is missing content | Rendering has not completed, or content loads after a user interaction |
| Deep pages are never indexed | Internal links to them exist only after JavaScript executes |
| Product or listing pages rank without their key details | Data fetched client-side is absent from the indexed version |
| Rankings dropped after a front-end rebuild | The rebuild moved server-rendered content to client-side |
| You appear in Google but never in AI assistants | Their crawlers render less than Google does, or not at all |
| Search Console coverage shows “crawled, not indexed” at scale | Rendered pages judged too thin, because much of the content never rendered |
- 8 areas
- One body of work, not a menu.
What’s included
Rendering diagnosis
Systematic comparison of raw HTML against rendered DOM across templates, establishing precisely what is missing and where.
Crawler-specific testing
Checking behaviour across Googlebot and the crawlers used by AI assistants, which differ substantially in rendering capability.
SSR and prerendering scoping
Specifying server-side rendering, static generation or prerendering with your engineers, in terms they can estimate and ship.
Hydration issues
Diagnosing mismatches between server-rendered and client-rendered output, which can cause content to appear then vanish.
Internal link discoverability
Ensuring navigation and pagination produce real crawlable links rather than click handlers.
Routing and history handling
Verifying client-side routes produce genuine, individually addressable URLs with correct status codes.
Performance impact
JavaScript weight is usually the main Core Web Vitals problem on these stacks, so the two get worked together.
Framework-specific guidance
Practical patterns for Next.js, Nuxt, Angular Universal and headless CMS setups.
- Common questions
- Asked on most first calls.
Questions
Does Google not execute JavaScript now?
It does, on a deferred second pass with no guaranteed timing or completeness. Treating rendering as free is the mistake. On large sites, plenty of pages wait a long time or are never fully rendered.
Do we have to rebuild with server-side rendering?
Not always. Sometimes prerendering a subset of templates, or moving specific content into the initial HTML payload, resolves it at a fraction of the cost. We scope the smallest change that fixes the actual problem.
How do we know if this is our issue?
Compare source HTML with rendered output on your key templates. If your main content or navigation only exists in the rendered version, you have this problem. This is the first thing we check.
Our developers say the site is fine because it works in a browser.
A reasonable position that misses the point — browsers execute JavaScript immediately and completely, crawlers do not. Showing them the raw HTML fetch usually ends the discussion quickly.
Does this affect AI visibility?
Considerably. Several crawlers used by assistants do little or no rendering, so client-side content is simply invisible to them. See LLM Optimization.
- Related
- Often scoped alongside this.
Related services
Technical SEO
Crawlability, indexation, rendering and speed. The foundation everything sits on.
Enterprise SEO
Sites above 10,000 URLs where architecture, not content, limits growth.
LLM Optimization
Structuring content so models retrieve, quote and attribute it to you.
SEO Migration
Replatforms and domain moves without the traffic loss.
SEO Audit
Fixed-scope diagnostic. Findings and raw data yours to keep.
- Next step
- We look at your site before the call.
Start with a free audit
An automated crawl plus a 30-minute walkthrough of what we can see from outside your site. If what you need isn’t something we do well, we’ll tell you.