Skip to content
Seotal Research · Original study

5 Best JavaScript Frameworks for SEO [2026 Research + Tested]

5 Best JavaScript Frameworks for SEO [2026 Research + Tested]
On this page 11
  1. Quick comparison
  2. #1 Astro
  3. #2 SvelteKit
  4. #3 Qwik
  5. #4 Next.js
  6. #5 Nuxt
  7. Frameworks that missed the cut
  8. Why the first HTML response matters
  9. How to check what your framework sends
  10. Hire a technical SEO freelancer to audit your framework
  11. JavaScript frameworks for SEO: frequently asked questions

A plain React single-page app scored 100 on Lighthouse's SEO audit in our test, yet its first HTML response held no title, no heading and no article text. Lighthouse runs JavaScript before it audits. GPTBot, ClaudeBot and PerplexityBot do not, so to them that page was empty.

Quick comparison

RankFrameworkVersion testedBuilt onSitemapBest for
1Astro7.3.8Any UI library, or noneOfficial integrationBlogs, docs, marketing sites
2SvelteKit3.0.1Svelte 5Write a routeInteractive sites that stay light
3Qwik1.20.2QwikWritten by the static buildLarge apps that must load fast
4Next.js16.4.0React 19Built in (sitemap.ts)React teams and large ecosystems
5Nuxt4.6.1Vue 3Nuxt SEO moduleVue teams

#1 Astro

Astro homepage with the headline The web framework for content-driven websites and the npm create astro command

Astro fits content sites: blogs, documentation, marketing pages and stores where most of the page is text and images. In our test it sent the full article in the first response and only 108 bytes of JavaScript, all of it inline for the button.

It made zero script requests. Lighthouse gave it 100 for performance with a 0.9 second Largest Contentful Paint (LCP), the fastest of the eight.

The reason is a default the other frameworks do not share. The Astro islands docs say Astro renders every UI component "to just HTML & CSS, stripping out all client-side JavaScript automatically." You opt a component back into the browser only when it needs to be interactive.

Astro shipped 0.1 KB of JavaScript, Qwik 28 KB, SvelteKit 37 KB, Nuxt 70 KB, Angular 77 KB, React Router 114 KB and Next.js 143 KB

Real sites show the same pattern. In August 2026, 71.0% of 43,850 Astro origins passed Core Web Vitals on mobile, the highest of any framework in the HTTP Archive technology report. Sitemaps come from the official @astrojs/sitemap integration, which writes the file at build time. This site runs on Astro.

  • Best for: Content-led sites where search traffic is the main channel.
  • Where it struggles: App-like products with many logged-in, interactive screens.
  • SEO tooling: Official sitemap integration; titles, meta and JSON-LD are plain HTML in the page.

#2 SvelteKit

SvelteKit documentation introduction page on svelte.dev with the Getting started sidebar

SvelteKit suits interactive sites that still need to stay light: dashboards with public pages and product sites with real client-side features. It shipped 37 KB of JavaScript in our test, the least of any framework that hydrates the whole page, and scored 100 for performance.

Svelte compiles components to small JavaScript at build time instead of shipping a runtime library. The SvelteKit SEO docs state that "SvelteKit employs SSR by default", so a new project starts with server-rendered HTML. Any route can be prerendered to static HTML with one line.

Share of origins passing Core Web Vitals on mobile rose from 63.4% to 71% for Astro, 58% to 62.5% for Qwik, 43% to 50.6% for SvelteKit, 27.9% to 35.1% for Next.js and 25% to 28.6% for Nuxt between August 2025 and August 2026

SvelteKit tied Astro for the largest one-year gain among the five, 7.6 points: from 43.0% to 50.6% of mobile origins passing Core Web Vitals, across 9,682 sites in August 2026. One setup note from our build: SvelteKit 3 moved its config into the Vite plugin and renamed the $lib alias to #lib, so older tutorials will not run as written.

  • Best for: Teams that want app features without heavy JavaScript.
  • Where it struggles: No official sitemap package; you write a sitemap route yourself.
  • SEO tooling: SSR by default, per-route prerendering, <svelte:head> for tags.

#3 Qwik

Qwik homepage with the headline Deliver instant apps at scale and a banner announcing Qwik v2

Qwik is for large interactive sites where load speed is the priority. It recorded 0 ms of Total Blocking Time (TBT) in our test, the only framework at zero, while shipping 28 KB of JavaScript. All five SEO elements we checked were in the raw HTML.

Most frameworks hydrate: the browser downloads the code and runs the page logic again before buttons work. The Qwik resumability docs describe the alternative: Qwik "pauses execution on the server, and resumes execution on the client," loading code for a component only when someone uses it.

Total Blocking Time was 0 ms for Qwik, 7 for Astro, 10 for React Router, 40 for SvelteKit, 48 for Nuxt, 179 for Angular and 386 for Next.js

The field data is strong but thin. Qwik passed Core Web Vitals on 62.5% of mobile origins and 92.2% of desktop origins in August 2026, from only 1,334 sites. We tested the stable 1.20.2 release. Qwik 2 is at release candidate 2.0.0-rc.2 on npm and moves to new package names, so expect migration work.

  • Best for: Big storefronts and apps where every interaction must feel instant.
  • Where it struggles: Fewer libraries and tutorials, and a major version change in progress.
  • SEO tooling: A head export per route for title, meta, links and JSON-LD; the static build wrote sitemap.xml without setup.

#4 Next.js

Next.js homepage with the headline The React Framework for the Web and the create next app command

Next.js is the pick for teams already writing React. It is the most used framework in this list. 20.8% of developers in the Stack Overflow 2025 survey used it, against 4.5% for Astro. Its SEO tools are the most complete out of the box.

The Metadata API builds titles, descriptions, canonical tags and Open Graph tags from a metadata object.

sitemap.ts and robots.ts generate those files from code. Our page passed every raw HTML check.

The cost is weight. Next.js shipped 143 KB of JavaScript, including about 9.6 KB of inline data React uses to hydrate. That cost 386 ms of TBT. Its performance score of 91 was the lowest of the eight. Real Next.js sites improved over the year, from 27.9% to 35.1% passing on mobile across 374,612 origins.

  • Best for: React teams that want SEO features built in.
  • Where it struggles: The heaviest JavaScript in our test and the most main-thread blocking.
  • SEO tooling: Metadata API, sitemap.ts, robots.ts, Open Graph image generation.

#5 Nuxt

Nuxt homepage with the headline The Full-Stack Vue Framework and a code sample

Nuxt is the Vue equivalent of Next.js and the right choice for Vue teams. It shipped 70 KB of JavaScript in our test, about half of Next.js, and scored 100 for performance with 48 ms of TBT.

useSeoMeta sets meta tags "as a flat object with full TypeScript support." Sitemaps, robots.txt, structured data and OG images come from Nuxt SEO, a community toolkit that installs as one module.

Mobile and desktop Core Web Vitals pass rates in August 2026: Astro 71% and 83.6%, Qwik 62.5% and 92.2%, SvelteKit 50.6% and 62.6%, Next.js 35.1% and 55.5%, Nuxt 28.6% and 41%

Nuxt sits fifth because of the field numbers. Only 28.6% of 94,069 Nuxt origins passed Core Web Vitals on mobile in August 2026, lower than Next.js. Our lab result shows the framework itself is not heavy, so plugins, images and third-party scripts on real sites likely explain much of the gap.

  • Best for: Vue teams that want SSR and SEO tags with little setup.
  • Where it struggles: Low mobile pass rates across real Nuxt sites.
  • SEO tooling: useSeoMeta, useHead, and the Nuxt SEO module for sitemaps and schema.

Frameworks that missed the cut

React Router, Angular and a plain client-rendered React app also went through the test. None made the top five.

Every framework except the client rendered React SPA put the title, description, canonical, JSON-LD and article text in the first HTML response

React Router 8.4 (the framework that absorbed Remix) passed every raw HTML check with prerendering and scored 99. It shipped 114 KB of JavaScript, and its real sites had the weakest trend here: mobile pass rates fell from 25.6% to 24.3% over the year.

Angular 22.2 passed too, but only after we turned on server rendering with the --ssr flag. The Angular SSR guide warns that client-side rendering "may negatively affect search engine optimization (SEO)." Angular had the lowest field score of the frameworks we looked up: 16.4% of mobile origins passing.

A React single-page app built with Vite sent a 278-byte HTML shell. Everything else arrived by JavaScript.

React SPA (Vite)
  • Title tag reads "App"
  • No meta description or canonical
  • No JSON-LD
  • Empty div, 0 paragraphs
  • 278 bytes
vs
Astro
  • Title tag is the article title
  • Description and canonical present
  • Article JSON-LD present
  • All 10 paragraphs present
  • 3,611 bytes
First HTML response, same article

Why the first HTML response matters

Google does run JavaScript, but later. A Vercel and MERJ study of over 100,000 Googlebot fetches on nextjs.org found that 100% of HTML pages were fully rendered. The median page waited 10 seconds in the render queue, the 75th percentile 26 seconds, and the 90th percentile about 3 hours.

Google's JavaScript SEO basics page still recommends server rendering: "server-side or pre-rendering is still a great idea because it makes your website faster for users and crawlers, and not all bots can run JavaScript." Its dynamic rendering page calls the old bot-only workaround "not a recommended solution."

AI crawlers are the bigger gap. Vercel's AI crawler analysis found that "none of the major AI crawlers currently render JavaScript" in December 2024. GPTBot made 569 million requests on Vercel's network in a month and Claude 370 million. Both fetched JavaScript files but did not execute them. Gemini and AppleBot were the exceptions.

Rules in robots.txt can block these bots before rendering even matters. Our study of AI crawler blocking in Southeast Asia measures how many sites block them in robots.txt.

How to check what your framework sends

You can run the same check on any live page in under five minutes.

  1. 1
    View sourceOpen view-source: on the URL, not DevTools Elements
  2. 2
    Find the titleSearch the source for your page title and H1
  3. 3
    Find the textSearch for a sentence from the last paragraph
  4. 4
    Find the tagsLook for canonical, description and ld+json
  5. 5
    Run LighthouseOnly after the raw HTML passes
Check a page the way a non-rendering crawler does

If the title or the article text is missing from view-source, a search engine has to render the page to see it. Most AI crawlers will not.

Structured data is a common miss: our structured data adoption study covers what sites in the region publish. For a wider checklist, see our SEO and AEO principles for front-end developers and the head-to-head of Nuxt vs Next.js vs Astro for SEO.

The per-framework results, including every raw HTML check, Lighthouse metric and the HTTP Archive field figures, are in best-javascript-frameworks-for-seo.csv. The test method and caveats are in the summary JSON.

Hire a technical SEO freelancer to audit your framework

I co-founded Seotal and lead its SEO and GEO work. Crawler access is part of how we screen specialists: AEO/GEO candidates audit a live site for AI crawler access, schema errors and citations before they join.

Hire SEO freelancers from $15 an hour with profiles in 72 hours, or first read what a technical SEO freelancer covers. For AI search visibility, see our AEO/GEO specialists.

JavaScript frameworks for SEO: frequently asked questions

Is React bad for SEO?

No. React rendered on the server, as Next.js and React Router do, sends complete HTML. The risk is a client-only React app, which sends an empty shell until JavaScript runs.

Does Google index JavaScript content?

Google renders pages in headless Chromium after a queue, so it indexes content that JavaScript adds. It arrives later, and most AI crawlers will not see it.

Should I migrate my site to Astro for SEO?

Only if the current site fails the view-source check or its field Core Web Vitals. A Next.js or Nuxt site that sends full HTML and passes Core Web Vitals has no SEO reason to move.

What about Gatsby?

We did not test Gatsby. In the August 2026 HTTP Archive data, 45.3% of 9,545 Gatsby origins passed Core Web Vitals on mobile, down from 12,418 origins a year earlier.

Cite this research

Journalists, researchers and bloggers are free to use these figures and charts under CC BY 4.0, with a link to this page. For custom cuts of the data, contact us.

Ali, Seotal Research (2026). 5 Best JavaScript Frameworks for SEO [2026 Research + Tested]. https://www.seotal.com/blog/best-javascript-frameworks-for-seo

More Seotal Research →

Ali
Research by

Principal SEO Consultant

Ali is Seotal's co-founder and SEO/GEO lead, with over 7 years in search. He has grown organic pipelines from zero to 100+ monthly qualified leads, and specializes in technical SEO, generative engine optimization (LLM and answer-engine visibility), web analytics, and marketing automation.

Technical SEOGenerative Engine OptimizationLLM OptimizationWeb AnalyticsMarketing Automation

More reads

Back to the blog