Web Design

Do single-page apps hurt SEO?

Updated April 22, 2026
Quick Answer

Single-page applications (SPAs) built with React, Vue, or similar frameworks can rank well, but they require either server-side rendering (SSR) or static prerendering to do so reliably. Pure client-side rendering — where the HTML is empty until JavaScript hydrates the page — still indexes worse than rendered HTML in 2026, particularly for AI assistants (which mostly do not execute JavaScript) and for second-tier search engines like Bing and DuckDuckGo.

What Google does and doesn't render

Googlebot does execute JavaScript, but in a two-pass system: it first crawls the raw HTML, then queues the page for a separate rendering pass that can lag by hours or days. For a low-priority site that rendering pass can be infrequent, which means new content appears in the index much more slowly than on a server-rendered site.

Even when rendering succeeds, Google's signals — internal links, structured data, anchor text — are computed from the rendered HTML. If your SPA renders a different navigation structure than the raw HTML, internal-linking and crawl-budget allocation suffer. Across audits we've run, pure-CSR SPAs index 30–60% fewer pages on average than equivalent server-rendered sites.

AI assistants do not render JavaScript

ChatGPT, Perplexity, Claude, and most other LLM crawlers fetch raw HTML and do not execute JavaScript. If your content only exists after JS hydration, those assistants see an empty page and cannot cite you. This is a hard ceiling on AI-search visibility for pure CSR sites.

Server-side rendering or static prerendering solves this completely. Even partial prerendering of the most important pages (homepage, top landing pages, top blog posts) is enough to unlock AI citations for those pages.

Practical patterns that work in 2026

Use a meta-framework that handles SSR or static generation natively: Next.js, Remix, Nuxt, SvelteKit, or Astro. For React-only or Vue-only SPAs, add a prerendering step at build time (we use headless Chromium to render and snapshot a curated URL list) so static HTML is served on first request.

Avoid the 'mostly client-rendered with a Helmet head' pattern. Without server-rendered content in the body, the Helmet-injected title and description help only marginally. The body content has to be present in the initial HTML for both Google's first-pass indexing and AI-retriever crawling.

Want this applied to your site?

Book a free 60-minute strategy call. We'll review your site live and walk you through exactly what to fix first.

People also asked

Web Design

Do I need a new website to improve my SEO?

Usually no — most Toronto sites can rank well with their existing build, optimized properly. You only truly need a rebuild if your site is on an outdated platform with no schema support, fails Core Web Vitals after every fix attempt, has unfixable architecture problems, or runs on a CMS that prevents technical SEO work entirely.

Read answer
Web Design

WordPress vs Webflow vs Shopify: which is best for SEO?

All three can rank well in 2026 with proper configuration. WordPress wins on flexibility and plugin ecosystem (Yoast/Rank Math, custom fields, programmatic SEO). Webflow wins on Core Web Vitals out of the box and clean code. Shopify is required if you sell physical products. Choose based on business model first, SEO capability second.

Read answer
Web Design

How much does a website cost in Toronto?

Template-based small business sites in Toronto run C$3,000–C$8,000. Custom-designed marketing sites range from C$10,000 to C$40,000. Ecommerce builds typically start at C$15,000 and scale to C$80,000+ depending on integrations. Enterprise rebuilds (50+ pages, custom CMS work, complex integrations) commonly exceed C$100,000.

Read answer
Web Design

What makes a website fast?

Fast websites combine three things: a fast host, optimized assets (images, fonts, JavaScript), and clean code architecture. The biggest wins for most Toronto sites are switching to a CDN-backed host, serving images in WebP/AVIF with proper sizing, and reducing third-party scripts (chat widgets, analytics, ads) that block the main thread.

Read answer