CoreWeb
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.

Search Engine Optimization

Being found on Google, in AI answers, on maps and in marketplaces.

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

SymptomWhat it usually indicates
Google shows a page but the snippet is missing contentRendering has not completed, or content loads after a user interaction
Deep pages are never indexedInternal links to them exist only after JavaScript executes
Product or listing pages rank without their key detailsData fetched client-side is absent from the indexed version
Rankings dropped after a front-end rebuildThe rebuild moved server-rendered content to client-side
You appear in Google but never in AI assistantsTheir crawlers render less than Google does, or not at all
Search Console coverage shows “crawled, not indexed” at scaleRendered pages judged too thin, because much of the content never rendered
8 areas
One body of work, not a menu.

All services

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.

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.