โš›๏ธ
SEO & marketing

JavaScript SEO: how Google reads React, Vue, Angular sites

05.04.2026
โ† All articles

JavaScript SEO is a special SEO approach for sites built with React, Vue, Angular or other JS frameworks. The content of such sites is not simple HTML but is created after JavaScript runs in the browser. Googlebot can also run that JavaScript and read content, but it is a complex process with many errors. Choosing the right approach is critical for site SEO.

The difference between classic HTML and a JS site

A classic HTML site sends a fully formed HTML document from the server. The browser (or Googlebot) reads it immediately and the content is visible at once.

A JS framework site (SPA) works differently. The server returns empty or minimal HTML and the content is built by JavaScript in the browser. For the user it is smooth. For Googlebot it is harder.

How Googlebot reads JavaScript

Googlebot performs a two-stage rendering process. First โ€” a normal HTML crawl. Googlebot fetches the initial HTML and reads it. That HTML has no JS-generated content โ€” just structure and loader.

Second โ€” render. Googlebot queues the page for JS execution and eventually renders it with a Chrome-based render engine. JS runs, content builds, then Googlebot indexes the result. But the second-stage delay can be days or weeks.

The two-stage problem

This is the biggest JS SEO issue. When you add a new product or post, Googlebot first sees the initial HTML (no content), and only 1-2 weeks later renders and indexes. New content is invisible in Google for 2 weeks or more.

Also, if JS errors or rendering breaks, Googlebot may not get the content at all. Statistics show 30%+ JS SPAs are not rendered correctly and content goes unindexed.

Server-Side Rendering (SSR)

SSR is the main solution. JavaScript runs on the server (Node.js) and fully rendered HTML is sent to the browser. The browser gets ready HTML โ€” for Googlebot the same; no rendering needed.

For React โ€” Next.js; for Vue โ€” Nuxt.js; for Angular โ€” Angular Universal. Benefits of SSR: faster first load, better Core Web Vitals (LCP), better UX.

Static Site Generation (SSG)

SSG is more radical. At build time the site is converted to static HTML files. No server rendering โ€” every page is a stored HTML file served instantly via CDN. Ultra-fast, ultra-cheap.

Tools: Next.js, Gatsby, Hugo, Jekyll, Astro. Suitable for millions of pages.

Hybrid approaches: ISR and dynamic SSG

Incremental Static Regeneration (ISR, Next.js) โ€” pages are static but periodically refreshed. The build produces initial HTML; on visits the old page shows instantly while a fresh build runs in the background. Ideal for e-commerce.

Vercel and Netlify support ISR natively.

JavaScript SEO testing

In GSC, URL Inspection's \"View tested page\" shows how Googlebot sees the page. Mobile-Friendly Test and Rich Results Test do the same. Lighthouse in Chrome DevTools surfaces SEO errors.

Manual test: disable JS in Chrome (chrome://settings/content/javascript) and open the site. If you don't see content, neither does Googlebot.

Practical JS SEO advice

Rule 1: for a new SEO-critical site, choose SSR or SSG. CSR (client-side only) is the worst for SEO. CSR fits dashboards and internal tools, not public sites.

Rule 2: if you already run CSR, at least pre-render the main SEO pages. Prerender.io and Rendertron serve pre-rendered HTML to Googlebot.

Sayt.uz technical choice

Sayt.uz is not a JS SPA โ€” we built a PHP classic HTML site. The reason: SEO caution and technical simplicity. PHP returns full HTML, Googlebot needs no rendering, indexing is immediate. For UX we use Alpine.js (lightweight JS).

Result: new blog posts get indexed in 1-2 days, no rendering issues, fast server. We give up SPA UX advantages, but SEO and technical simplicity were our priorities.

Related articles

๐Ÿ›’ Product Schema markup: showing products with rich results in Google ๐Ÿ“‹ HowTo Schema markup: showing step-by-step guides in Google ๐Ÿ† Google Lighthouse site audit ๐Ÿ“‘ Duplicate content: the problem and canonical tags
๐ŸŒ Language
๐Ÿ‡บ๐Ÿ‡ฟ O'zbek ๐Ÿ‡บ๐Ÿ‡ฟ ะŽะทะฑะตะบ ๐Ÿ‡ท๐Ÿ‡บ ะ ัƒััะบะธะน ๐Ÿ‡ฌ๐Ÿ‡ง English โœ“