JavaScript SEO
Also known as: JS SEO, JS rendering for search
JavaScript SEO is the discipline of ensuring that JavaScript-rendered content (React, Vue, Angular, Next.js, Svelte) is discoverable, crawlable, and indexable by search engines. Google can render JavaScript but does so in a second-wave crawl that's slower and less reliable than initial HTML crawls; AI engines vary widely in JS rendering support. The fix is usually server-side rendering (SSR), static generation (SSG), or hybrid approaches.
Why JS rendering matters
- Googlebot can render JS but in a delayed second wave — content may take days/weeks to be indexed vs hours for HTML
- Other crawlers (Bingbot, AI crawlers like GPTBot, PerplexityBot, ClaudeBot) have weaker JS support — often see only initial HTML
- AI search engines preferentially cite content visible in initial HTML
- Core Web Vitals suffers when critical content depends on client-side JS
Rendering strategies (best to worst for SEO)
- Static Site Generation (SSG) — pre-rendered HTML at build time. Best for content sites, marketing pages, blogs. Astro, Next.js Static, Gatsby.
- Server-Side Rendering (SSR) — HTML generated on each request. Best for dynamic content (e-commerce, user-specific data). Next.js SSR, Remix.
- Incremental Static Regeneration (ISR) — pre-render + revalidate. Good hybrid.
- Client-Side Rendering (CSR) with prerendering — CSR + pre-rendered HTML snapshots for bots. Acceptable.
- Pure CSR (no fallback) — content only visible after JS execution. Worst for SEO/AI search.
Diagnostic signals
- Google Search Console URL Inspection → “Test live URL” → “View tested page” → check if content appears in rendered HTML
view-source:in browser shows raw HTML — if your content isn’t there, crawlers may miss it- Screaming Frog rendering mode set to “JavaScript” — compare crawl with content vs without
Common patterns to avoid
- Critical content (h1, primary copy, internal links) loaded via fetch after page render
- Lazy-loaded content that depends on scroll/interaction
- Infinite-scroll feeds without
?page=NURLs - Single-page apps (SPAs) without prerendering for bot user-agents
- Resocial service →
/services/seo/technical-seo/ - Read on the blog →
/blog/technical-seo-vs-on-page-seo/