Tech for Retail 2025 Workshop: From SEO to GEO – Gaining Visibility in the Era of Generative Engines

Back to blog

Choosing the Right JavaScript Rendering Approach for SEO in 2026

SEO

Discover Incremys

The 360° Next Gen SEO Platform

Request a demo
Last updated on

8/10/2026

Chapter 01

Example H2
Example H3
Example H4
Example H5
Example H6

JavaScript SEO means making sure that the content, links and metadata produced by JavaScript remain visible to search engines once the page has been rendered. It applies the fundamentals of organic search to sites built with React, Angular or Vue.js.

 

This page is for the marketing manager, SEO lead or product manager who has to choose a rendering strategy, set acceptance criteria with developers and check what Google, Bing and AI crawlers actually see.

 

Understanding How JavaScript Impacts Organic Visibility

 

According to Google Search Central, Google processes a page in three phases: crawling, rendering, then indexing. Rendering takes place in a headless Chromium environment, and Google only indexes what it sees after rendering. A page can therefore be discovered yet remain thin from an indexing perspective if its essential content only appears when scripts execute and that execution fails. The upstream steps are covered in our guide to website indexing.

 

What Affects Rendering: Delays, Resources and DOM Stability

 

Everything comes down to producing a complete, stable and fast final DOM:

 

  • Rendering queue: Google states that a page can remain in it "for a few seconds or longer", which makes indexing less predictable than for an HTML page.
  • Cost of rendering: executing JavaScript requires significantly more resources than reading HTML, with substantial differences from one site to another.
  • Access to resources: JavaScript or CSS files blocked by robots.txt prevent correct rendering, because Google will not render JavaScript code from blocked files.
  • DOM stability: extreme personalisation, cascading injections or flashing components widen the gap between what the user sees and what the search engine captures.

 

Why Some Pages Exist for Users, but Not for Search Engines

 

For users, the page works after a few seconds or an interaction; for search engines, it resembles an almost empty shell. The causes are recurring:

 

  • content loaded only after an event (scroll, click, tab) and absent from the initial load;
  • navigation relying on onClick handlers without crawlable HTML links;
  • # fragment routes instead of real URLs, which Google does not resolve reliably.

 

AI Crawlers Do Not Execute JavaScript: the Number One Reason for Server-Side Rendering

 

Google points out that not all bots execute JavaScript. This is the case for the AI crawlers that feed generative engines (GPTBot, ClaudeBot, PerplexityBot): they read the HTML returned by the server, not the interface built in the browser. Content injected on the client side remains invisible to them, and an invisible page can neither be reused nor cited in an answer.

 

Server-side or static rendering therefore becomes the first reason to move away from client-only rendering, ahead even of performance. The access rules for these crawlers are covered in our article on Googlebot and AI crawlers, and the citability method in our guide to Generative Engine Optimization.

 

Comparing Rendering Approaches to Protect Indexability

 

Four strategies coexist. They compare on the reliability of the HTML received by crawlers, cost and the type of page served:

 

StrategyIndexabilityCostUse case
CSR (client-side rendering)Fragile: initial HTML almost emptyLow on the server sideLogged-in areas, tools not intended for the index
SSR (server-side rendering)High: complete HTML in the responseServer load, hydration to manageOffer pages, hubs, frequently updated content
SSG and pre-renderingHigh: HTML built in advanceLow, but freshness depends on generationBlog, guides, brand pages, landing pages
HybridHigh on critical contentDiscipline in splitting HTML and JavaScriptSites combining content and rich interactions

 

Client-Side Rendering: When It Is Viable, When It Is Risky

 

CSR delivers a smooth user experience, but exposes SEO when the initial HTML contains little information. It remains viable if:

 

  • critical content appears quickly and deterministically on load;
  • key internal links exist as <a href> in the rendered state;
  • title, meta description and canonical remain consistent and stable.

 

It becomes risky as soon as the page resembles a blank screen without JavaScript, or when part of the site (resource lists, filters, pagination) depends on interactions that cannot be reproduced.

 

Server-Side Rendering and Static Generation: Benefits and Constraints

 

SSR delivers complete HTML in the server response, then "hydrates" it on the client. Google Search Central recommends it, like pre-rendering, for faster access to content. Points to watch: server load and consistency between server and client rendering. The choice of framework (Node.js, Angular Universal…) is a matter for the development team.

 

Static generation and pre-rendering serve HTML that is already built: a robust option for blogs, guides, brand pages and high-stakes landing pages. Their limitation is the freshness of personalised or changing content. For SEO, the test remains the same: a crawl without JavaScript must retrieve the title, H1, meta description, links and content.

 

Hybrid Approach: HTML for Understanding, JavaScript for Interaction

 

A realistic hybrid approach renders in HTML everything that drives understanding and internal linking (headings, introductions, navigation, content lists, core FAQ sections) and reserves JavaScript for interactivity: sorting, display filters, micro-interactions. The result is deterministic for search engines without impoverishing the interface.

 

Implementing JavaScript SEO: A Step-by-Step Method

 

The method starts from templates: fixing one template can secure thousands of pages at once.

 

Map Templates and Prioritise High-Impact Pages

 

On a B2B site, a useful template segmentation distinguishes:

 

  • offer and solution pages, which convert;
  • hubs and categories, which structure internal linking;
  • evergreen content (guides, comparisons, FAQs), which stabilises traffic;
  • deep pages (pagination, filters), which depend most on JavaScript.

 

Then prioritise with the impact × effort × risk matrix described in the pillar: a partially rendered solution page matters far more than a secondary page.

 

Define an "SEO-Ready Page" Standard: Titles, Metadata and Critical Content

 

A page is "SEO-ready" if, at the point the search engine renders it, the following are present without user interaction:

 

  • a unique, descriptive title, which JavaScript can set or change;
  • a consistent meta description, even if Google may replace it with a snippet;
  • an H1 and the main content of the page;
  • structural internal links as <a href>;
  • a correct HTTP status from the server, never an empty 200 page that fakes an error.

 

Secure Routing and URLs: Navigation, Parameters and Canonical Versions

 

On a single-page application, routing is the first cause of indexing losses. Google recommends the History API (history.pushState()) and paths such as /offers rather than fragments such as #/offers. A canonical can be set via JavaScript, but it belongs in the HTML; if a script changes it, it must never contradict the HTML version.

 

Control Asynchronous Loading: Critical Content, Dependencies and Graceful Degradation

 

Asynchronous loading is controlled through three rules:

 

  • Critical content first: title, description, main copy, FAQ and breadcrumbs display without waiting;
  • Managed dependencies: no SEO-critical component relies on a fragile chain of network requests;
  • Controlled degradation: if a third-party service fails (reviews, recommendations), the page remains understandable and indexable.

 

On performance, JavaScript payload is one of the major sources of slowness. Minification, compression, splitting by route and removing unused code are the practical levers. Core Web Vitals thresholds (LCP ≤ 2.5 s, INP ≤ 200 ms, CLS ≤ 0.1, measured at the 75th percentile) and their real, modest weight belong to technical SEO.

 

Essential Best Practices for Indexable JavaScript Pages

 

Losses concentrate on indexing directives, links and structured data.

 

Handle Meta Robots Tags and Canonical Signals Correctly

 

Google allows adding or changing the meta robots tag via JavaScript, with an important consequence: if it detects noindex in the initial code, it may skip rendering and JavaScript execution. A page you want indexed therefore never ships noindex at the outset. For canonicals, the rule is one tag only, a consistent value and stable behaviour regardless of state (sorting, filters, pagination).

 

Internal Linking in Dynamic Interfaces: Links, States and Discoverability

 

Google discovers URLs through HTML links: a link must be an <a> element with an href attribute. Buttons, clickable divs and JavaScript events are not a substitute for a crawlable URL. In practice:

 

  • pagination never relies solely on onClick;
  • filters intended for indexing have persistent, crawlable URLs;
  • menus and footers are not injected late.

 

Structured Data: Keep Visible Content and Mark-up Consistent

 

Google confirms that JSON-LD can be generated in JavaScript and injected into the page. The rule is not "JavaScript or not", but consistency: entities and properties must match what is visible in the render. If breadcrumbs are displayed, the mark-up reflects their exact levels and labels.

 

Common Mistakes to Avoid with JavaScript SEO

 

The most costly mistakes look alike from one site to another; each has an identifiable effect and a known fix:

 

MistakeEffect on indexingFix
Content that loads too late (placeholders, cascading requests)Incomplete render, partial indexingServe the main content in the initial HTML
Lazy loading applied to text or linksText and pagination missing from the renderReserve lazy loading for images and secondary blocks
States without a stable URL (sort, filter, tab)No indexable entry, signals not consolidatedGive a persistent URL to states that should be indexed
Multiple routes and parameters for the same contentDuplicates, diluted signals, unstable canonicalisationDecide per template: index, consolidate or canonicalise

 

Google does not wait indefinitely for rendering to finish: content that arrives after multiple network requests or long animations risks being ignored, and the page risks being judged thin. A state without an address, meanwhile, can be neither indexed, shared nor tracked.

 

Pre-Release QA: Acceptance Criteria

 

Reliable optimisation depends on testable checks, written into the definition of "done" shared by developers, the content team and SEO. Acceptance criteria per template:

 

  • rendered HTML contains the H1, the main descriptive block and navigation and pagination links as <a href>;
  • no critical JavaScript or CSS resource is blocked by robots.txt;
  • error pages return a genuine server-side 404, or receive noindex via JavaScript, to avoid soft 404s;
  • JavaScript files are versioned by fingerprinting (for example main.2bb85551.js), because Google's rendering system may ignore certain cache headers and use stale resources;
  • tickets specify measurable criteria: presence in rendered HTML, HTTP status, canonical, links.

 

Diagnosing Rendering: Source HTML vs Rendered HTML

 

Diagnosis always compares the source HTML returned by the server with the rendered HTML after scripts execute. The Search Console URL Inspection tool (live test, crawled page, rendered HTML) shows what Google actually sees; the Rich Results Test validates the rendering of structured data. Common symptoms are handled as follows:

 

SymptomTestFix
Content missing from the renderURL Inspection: rendered HTML of the crawled pageServe the content via SSR, SSG or pre-rendering
Internal links not followedURL Inspection: links in the rendered HTMLReplace onClick handlers with real links
Canonical ignoredURL Inspection: user-declared and Google-selected canonicalSet the canonical in the HTML, without JavaScript rewriting
Empty indexed page or soft 404Live test and indexing reportCorrect HTTP status, noindex on error pages
Partial or broken renderLive test: resources not loadedUnblock JavaScript and CSS in robots.txt

 

At site level, a crawl without JavaScript execution tests HTML robustness; a rendered crawl detects gaps, slowness and timeouts. To prevent regressions, check on every release:

 

  • a set of URLs representative of key templates;
  • indexing anomalies and soft 404s;
  • the presence of critical elements in rendered HTML (H1, content blocks, links, canonical), through automated tests.

 

Depending on Your Situation

 

Your starting point determines the next workstream:

 

 

To connect the symptoms of a JavaScript site (non-indexed pages, partial content, duplicated routes) to template-level decisions, the Incremys SEO & GEO 360° audit produces a prioritised action plan, backed by evidence.

 

JavaScript SEO FAQ

 

What is JavaScript SEO and why does it matter?

 

JavaScript SEO is the set of practices that ensure content, links and metadata produced by JavaScript remain crawlable, rendered and indexable. It matters because most modern sites rely on JavaScript frameworks, and an incomplete render deprives pages of visibility in Google as well as in the answers of generative engines.

 

What impact does JavaScript have on search engine visibility?

 

JavaScript can delay access to content, prevent URL discovery and create mismatches between initial HTML and rendered HTML. These effects come from the rendering queue, navigation without <a href> links or blocked scripts. When managed well, with server-side rendering, pre-rendering and structured HTML, it enables rich interfaces without sacrificing indexability.

 

How do you roll out JavaScript SEO safely for a JavaScript application?

 

Work by template and check every release. Define an "SEO-ready" standard, choose a rendering strategy suited to each template and secure routing with the History API. Then test rendering with the Search Console URL Inspection tool, and write the acceptance criteria into every ticket.

 

Which best practices help prevent indexing losses?

 

The main content must appear quickly in the render, without user interaction. Do not block JavaScript and CSS resources, expose internal links as <a href> and prefer real URLs to # routes. Keep a single, stable canonical and never ship noindex in the initial code of a page you want indexed.

 

How do you compare rendering alternatives for a dynamic site?

 

Compare CSR, SSR, pre-rendering and SSG against three criteria: reliability of rendered HTML, performance and implementation constraints. CSR is the most fragile for indexing, SSR and SSG the safest. In practice, a hybrid approach, with critical content in HTML and JavaScript reserved for interaction, offers the best compromise.

 

Do AI crawlers execute JavaScript?

 

No, the AI crawlers that feed generative engines read the HTML returned by the server without executing JavaScript. Content injected on the client side remains invisible to them and cannot be cited in an answer. This is the first reason to serve critical content through server-side rendering, static generation or pre-rendering.

Discover other items

See all

Next-Gen GEO/SEO starts here

Complete the form so we can contact you.

The new generation of SEO
is on!

Thank you for your request, we will get back to you as soon as possible.

Oops! Something went wrong while submitting the form.