SEO de frameworks JavaScript
SEO para frameworks JavaScript — React, Next.js, Vue, Nuxt, Angular, Svelte e Astro. Como o modo de renderização (SSR, SSG, CSR) determina o que o Google pode indexar e quais frameworks lidam melhor com SEO por padrão.
O SEO de frameworks JavaScript se resume ao modo de renderização: SSG e SSR fornecem ao Googlebot HTML pré-construído; CSR exige execução de JavaScript que pode ou não ser bem-sucedida. Next.js e Nuxt têm o maior suporte integrado de SEO (SSR, SSG, ISR, APIs de metadados). React e Vue puros em modo CSR são os mais arriscados para SEO. A arquitetura de ilhas do Astro é excelente para SEO por padrão. Angular requer SSR via @angular/ssr (antigo Angular Universal) para indexação confiável.
«> TL;DR — Most JavaScript frameworks build pages in your visitor’s browser
(CSR). This works fine for users, but search engines might not run the JavaScript and miss your content. The fix: use a framework mode that builds pages on the server (SSR) or at build time (SSG). Next.js and Nuxt make this easy; pure React and Vue in CSR mode require extra work. » (Tradução) (Síntese localizada do trecho três, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Why JavaScript frameworks have SEO concerns » (Tradução) (Síntese localizada do trecho quatro, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Google processes JavaScript through crawling, rendering, and indexing, and blocked or failed resources can change the rendered result. Evidência desta afirmação Primary standard or official documentation supporting the adjacent article claim. Escopo: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confiança: alta · Verificado: Google: JavaScript SEO basics Rendering mode and metadata implementation matter more than the framework brand alone. Evidência desta afirmação Primary standard or official documentation supporting the adjacent article claim. Escopo: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confiança: alta · Verificado: web.dev: Rendering on the Web » (Tradução) (Síntese localizada do trecho cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Traditional websites send complete HTML from the server. Search engine crawlers download that HTML and index the content immediately. JavaScript frameworks often work differently: the server sends a minimal HTML file, and then JavaScript runs in the browser to build the actual page content. » (Tradução) (Síntese localizada do trecho seis, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«If a search engine crawler doesn’t run your JavaScript (or runs it but something fails), it sees an empty page. That’s the CSR SEO problem. » (Tradução) (Síntese localizada do trecho sete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Rendering modes explained » (Tradução) (Síntese localizada do trecho oito, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«- SSG (static site generation) — pages are built as HTML at deploy time. Crawlers get complete HTML with no JavaScript required. Best for SEO.
- SSR (server-side rendering) — the server builds the HTML fresh for each request. Crawlers get complete HTML. Also excellent for SEO.
- CSR (client-side rendering) — JavaScript builds the page in the browser. Crawlers must run JavaScript to see content. Google can do this, but failures happen and discovery is slower. » (Tradução) (Síntese localizada do trecho nove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Frameworks by SEO safety out of the box » (Tradução) (Síntese localizada do trecho dez, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Safest:
- Astro — generates static HTML by default; JavaScript only where you opt in
- Next.js — offers SSG, SSR, and ISR; full metadata API; industry standard
- Nuxt — same for the Vue ecosystem; excellent SSR/SSG support » (Tradução) (Síntese localizada do trecho onze, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Requires configuration:
- Angular — CSR by default; needs
@angular/ssr(formerly Angular Universal) for safe SEO - React — CSR by default; needs Next.js or React Router (framework mode) for SSR/SSG
- Vue — CSR by default; needs Nuxt for SSR/SSG
- Svelte — CSR by default; SvelteKit adds SSR/SSG support » (Tradução) (Síntese localizada do trecho doze, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«> TL;DR — At the technical level, JS framework SEO is about: (1) rendering
architecture for the initial HTML payload, (2) metadata injection into
<head>before the response is sent, (3) how the framework handles hydration and link discovery, and (4) ISR cache staleness. Next.js has the most complete built-in SEO tooling (Metadata API, built-inapp/sitemap.ts, image optimization). Astro is the most SEO-safe by architecture. » (Tradução) (Síntese localizada do trecho quinze, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Rendering mode, metadata API, and ISR support by framework » (Tradução) (Síntese localizada do trecho dezesseis, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Framework capabilities and defaults change by version; verify them in each framework’s official documentation. Evidência desta afirmação Primary standard or official documentation supporting the adjacent article claim. Escopo: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confiança: alta · Verificado: web.dev: Rendering on the Web No rendering mode guarantees indexing or rankings. Evidência desta afirmação Primary standard or official documentation supporting the adjacent article claim. Escopo: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confiança: alta · Verificado: Google: JavaScript SEO basics When you’re comparing frameworks for a decision, test the same routes, content, deployment target and tooling for each candidate — a benchmark that swaps any of those isn’t measuring the framework, it’s measuring the difference in setup. » (Tradução) (Síntese localizada do trecho dezessete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«| Framework | Default rendering | Built-in metadata API | SSR/SSG support | Ecosystem SEO support |
|---|---|---|---|---|
| Astro | SSG (islands) | Yes (<head> in .astro files, Content Collections for structured data) | Both | Strong |
| Next.js | SSR/SSG (configurable) | Yes (Metadata API in App Router) | Both + ISR | Excellent |
| Nuxt | SSR by default | Yes (useHead, useSeoMeta) | Both + ISR | Excellent |
| SvelteKit | SSR by default | Yes (svelte:head) | Both | Good |
| React Router (framework mode) | SSR by default | Yes (meta export) | SSR + Deferred | Good |
| Angular | CSR by default | Via Angular Meta/Title services | Via @angular/ssr | Moderate |
| React (bare) | CSR | Manual (react-helmet-async; react-helmet is unmaintained) | Via Next.js/Gatsby | Depends on wrapper |
| Vue (bare) | CSR | Manual (@unhead/vue; vue-meta is unmaintained) | Via Nuxt | Depends on wrapper |
» (Tradução) (Síntese localizada do trecho dezoito, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Remix v2 and React Router v7 merged — Remix’s server rendering and data-loading model now ships as React Router’s “framework mode,” and that’s the stable upgrade path for Remix v2 apps. Remix 3 is a separate, experimental React-less rewrite (beta), not the successor to Remix v2 — don’t treat it as a drop-in SSR option for a React codebase. » (Tradução) (Síntese localizada do trecho dezenove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Metadata timing, crawlable links, and ISR cache staleness » (Tradução) (Síntese localizada do trecho vinte, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Metadata injection timing — Metadata (<title>, <meta>) must be in the
server response, not added by JavaScript after page load. Next.js’s Metadata API,
Nuxt’s useSeoMeta, and Astro’s <head> component handle this correctly.
document.title = '...' or React Helmet in CSR mode does not — it runs after the
initial HTML is served.
» (Tradução) (Síntese localizada do trecho vinte e um, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Link discovery — Googlebot discovers links by parsing HTML. Links added via
JavaScript (onClick, dynamic routing without <a> tags) may not be discovered.
Use real <a href> elements for important navigation.
» (Tradução) (Síntese localizada do trecho vinte e dois, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Hydration and duplicate content — If SSR and CSR render different content (hydration mismatch), you may end up with indexed content that doesn’t match what users see. Test for hydration errors in the browser console. » (Tradução) (Síntese localizada do trecho vinte e três, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Soft 404s — Client-side routers can silently render a “page not found” UI while returning a 200 HTTP status. Search engines index these as real pages. Make sure your 404 page returns a real 404 status, and server-side redirects return 301. » (Tradução) (Síntese localizada do trecho vinte e quatro, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«ISR cache invalidation — In Next.js and Nuxt ISR setups, stale pages can be
served to crawlers during the revalidation window. Set a time-based revalidate
interval, and for content that changes on a schedule you don’t control (a CMS save,
for example), pair it with on-demand revalidation triggered from a webhook-backed
route handler — see the Next.js ISR guide
for the full API.
» (Tradução) (Síntese localizada do trecho vinte e cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
// app/blog/[id]/page.tsx — time-based revalidation
export const revalidate = 3600 // re-check this page at most once an hour
// app/api/revalidate/route.ts — on-demand revalidation, called by a CMS webhook
import { revalidatePath } from 'next/cache'
import { NextRequest, NextResponse } from 'next/server'
export async function POST(request: NextRequest) {
const { path, secret } = await request.json()
if (secret !== process.env.REVALIDATE_SECRET) {
return NextResponse.json({ message: 'Invalid secret' }, { status: 401 })
}
revalidatePath(path) // e.g. '/blog/1' — next request regenerates fresh HTML
return NextResponse.json({ revalidated: true })
} «JavaScript framework SEO is primarily determined by rendering mode. SSG (pages built as static HTML at deploy time) and SSR (pages rendered server-side per request) are both safe for search engine indexation. CSR (pages rendered entirely in the browser via JavaScript) is riskier — Google can execute JavaScript, but failures and delays are common, and discovery is slower. » (Tradução) (Síntese localizada do trecho vinte e nove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Next.js (React meta-framework): Most complete built-in SEO support. App Router Metadata API, SSG/SSR/ISR, image optimization, built-in app/sitemap.ts (the next-sitemap package is now only needed for extensions it doesn’t cover), link-level prefetching. Industry standard for SEO-sensitive React apps.
» (Tradução) (Síntese localizada do trecho trinta, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Nuxt (Vue meta-framework): Equivalent capabilities for Vue. Built-in useSeoMeta() and useHead() composables, SSR/SSG/ISR, Nuxt SEO module. Excellent for Vue-based sites.
» (Tradução) (Síntese localizada do trecho trinta e um, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Astro: Island architecture ships zero JavaScript by default. Pages are static HTML; interactivity added via explicit “islands.” Best SEO safety of any JS framework by default. Great for content-heavy sites. » (Tradução) (Síntese localizada do trecho trinta e dois, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«SvelteKit: SSR by default, excellent metadata support via svelte:head. Solid SEO with minimal configuration.
» (Tradução) (Síntese localizada do trecho trinta e três, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Angular: CSR by default, requires @angular/ssr (formerly Angular Universal) for reliable indexation. Historically the most SEO-problematic of the major frameworks.
» (Tradução) (Síntese localizada do trecho trinta e quatro, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«React (bare): CSR by default. Requires Next.js, React Router (framework mode), or Gatsby for SSR/SSG. Note: Remix v2’s server-rendering model has merged into React Router v7/v8 as “framework mode” — that’s the maintained upgrade path, not the separate, experimental React-less Remix 3 beta. Don’t use bare CRA/Vite-React for content that must rank. » (Tradução) (Síntese localizada do trecho trinta e cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Vue (bare): Same issue. Use Nuxt for SEO-critical Vue applications. » (Tradução) (Síntese localizada do trecho trinta e seis, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Svelte (bare): CSR by default. Use SvelteKit for SSR/SSG. » (Tradução) (Síntese localizada do trecho trinta e sete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## JavaScript framework SEO checklist » (Tradução) (Síntese localizada do trecho quarenta, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«### Universal (applies to all frameworks)
- Verify rendering mode:
curl -s URL | grep "<title>"— title must appear in raw HTML - Check that
<title>and<meta name="description">are in the server response - Use real
<a href>tags for all navigable links (not just click handlers) - Ensure 404 pages return HTTP 404, not 200
- Ensure redirects use server-side 301/302, not
window.location.href - Generate and submit an XML sitemap
- Add
robots.txtto your public directory » (Tradução) (Síntese localizada do trecho quarenta e um, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«### Next.js
- Use the App Router Metadata API (
metadataexport orgenerateMetadata()) - Choose SSG (
generateStaticParams) or SSR (dynamic = 'force-dynamic') per route - Add an
app/sitemap.tsfile (App Router’s built-in sitemap support) for most sites; reach for thenext-sitemappackage only if you need cross-domain sitemaps or other extensions the built-inMetadataRoute.Sitemaptype doesn’t model - Use
next/imagefor all images (automatic WebP, sizing, lazy-load) - Verify ISR
revalidatevalues — set short windows for frequently-updated pages » (Tradução) (Síntese localizada do trecho quarenta e dois, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«### Nuxt
- Use
useSeoMeta()oruseHead()in every page component - Install the
@nuxtjs/sitemapmodule - Use Nuxt’s built-in SSR (or
nuxt generatefor SSG) - Configure
robots.txtvia@nuxtjs/robots» (Tradução) (Síntese localizada do trecho quarenta e três, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«### Astro
- Pass SEO props to your
<BaseHead>component on every page - Use Astro’s
@astrojs/sitemapintegration - Keep JavaScript islands minimal — avoid converting static sections to islands » (Tradução) (Síntese localizada do trecho quarenta e quatro, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«### Angular
- Enable SSR via
ng add @angular/ssr - Use
MetaandTitleservices for metadata - Add transfer state to prevent API double-fetching on hydration » (Tradução) (Síntese localizada do trecho quarenta e cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Framework deep dives » (Tradução) (Síntese localizada do trecho quarenta e oito, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«- React SEO
- Next.js SEO
- Vue SEO
- Nuxt SEO
- Angular SEO
- Svelte SEO
- Astro SEO » (Tradução) (Síntese localizada do trecho quarenta e nove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Related reading » (Tradução) (Síntese localizada do trecho cinquenta, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
- Headless CMS SEO » (Tradução) (Síntese localizada do trecho cinquenta e um, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
Registro de alterações
Atualizado em 19 de jul. de 2026.
Resumo editorial e detalhes registrados da alteração.Detalhes da alteração
-
As notas detalhadas sobre as alterações estão disponíveis atualmente em inglês.
-
As notas detalhadas sobre as alterações estão disponíveis atualmente em inglês.
-
As notas detalhadas sobre as alterações estão disponíveis atualmente em inglês.
-
As notas detalhadas sobre as alterações estão disponíveis atualmente em inglês.
-
As notas detalhadas sobre as alterações estão disponíveis atualmente em inglês.
-
As notas detalhadas sobre as alterações estão disponíveis atualmente em inglês.
Não é possível fazer a comparação completa — nenhum instantâneo anterior foi arquivado para esta revisão.