SEO para Next.js
Como tornar um site Next.js rastreável, indexável e ranqueável — os dois roteadores, modos de renderização (SSG/SSR/ISR/Server Components), a API de Metadados do App Router, sitemap.ts, robots.ts, next/image, next/link e os erros que silenciosamente quebram isso.
O Next.js resolve os problemas mais difíceis de SEO em JavaScript por padrão — se você usá-lo corretamente. Os Server Components do App Router e SSG/ISR colocam o conteúdo no HTML, então não há atraso na fila de renderização; a API de Metadados nativa resolve títulos, canônicos e Open Graph no servidor; sitemap.ts e robots.ts são convenções de arquivo. O framework fornece a infraestrutura, mas não escreve nenhuma das suas tags. As falhas são previsíveis: metadataBase ausente, sem prioridade na imagem LCP, metadados exportados de um Client Component (silenciosamente não faz nada) e visualizações 404 retornando 200.
TL;DR — Next.js é um dos melhores frameworks para SEO quando você o usa corretamente. Construa suas páginas no servidor ou no momento da compilação (não inteiramente no navegador), defina um título, descrição e canônico exclusivos em cada página, e use os componentes integrados
next/imageenext/link. O Next.js fornece todas as ferramentas — mas não escreve suas tags de SEO por você.
«## What Next.js SEO is » (Tradução) (Síntese localizada do trecho quatro, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Next.js is a popular framework built on React for making websites and web apps. Because it’s React under the hood, a lot of the page can be built with JavaScript — and that’s where SEO questions come in. Next.js SEO is just the practice of making sure search engines can crawl, render, and index a Next.js site, and using the framework’s built-in features to do that well. » (Tradução) (Síntese localizada do trecho cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«The good news: Next.js can build your pages ahead of time or on the server, so search engines get the finished HTML right away. That avoids the biggest risk with JavaScript sites — content that only shows up after scripts run. (For the broader picture, see JavaScript SEO.) » (Tradução) (Síntese localizada do trecho seis, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## The one big decision: where the page gets built » (Tradução) (Síntese localizada do trecho sete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«When someone — or Googlebot — asks for a page, where does the finished HTML come from? Next.js gives you a few options: » (Tradução) (Síntese localizada do trecho oito, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
- Na compilação (Static/SSG) — HTML pronto, rápido e completo para buscadores.
- No servidor, por requisição (SSR) — página completa e sempre atual.
- Misto (ISR) — páginas estáticas atualizadas por intervalo; bom padrão para conteúdo.
- No navegador (CSR) — shell quase vazio preenchido por JavaScript; arriscado para SEO e inadequado ao conteúdo principal.
«The modern App Router uses Server Components by default, which means your content ends up in the HTML automatically — a great starting point for SEO. » (Tradução) (Síntese localizada do trecho dez, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## The simple checklist » (Tradução) (Síntese localizada do trecho onze, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
- Dê a cada página título e descrição exclusivos.
- Defina uma URL canônica por página.
- Use
next/imagepara imagens enext/linkpara links internos reais. - Não esconda o conteúdo principal atrás de renderização no cliente.
- Crie sitemap e robots.txt pelos recursos de arquivo do Next.js. Evidência desta afirmação Next.js App Router supports special metadata files for sitemap and robots output. Escopo: Next.js App Router file conventions. Confiança: alta · Verificado: Next.js: Metadata files
«## The thing people get wrong » (Tradução) (Síntese localizada do trecho treze, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«“Next.js handles SEO automatically.” It doesn’t — not the parts that matter. Next.js gives you the machinery (a metadata system, sitemap and robots conventions, an image component), but you still have to write your titles, descriptions, and canonicals yourself. Evidência desta afirmação Next.js provides metadata APIs, but developers supply page-specific metadata values. Escopo: Next.js App Router metadata and generateMetadata APIs. Confiança: alta · Verificado: Next.js: Metadata and OG images Every page needs its own. A site where every page shares one title, or has no canonical, is the most common way a Next.js build underperforms. » (Tradução) (Síntese localizada do trecho catorze, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Want the deeper version — the two routers, the Metadata API, metadataBase, the LCP
image trick, and the mistakes that quietly break indexing? Switch to the Avançado
tab.
» (Tradução) (Síntese localizada do trecho quinze, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
TL;DR — O Next.js resolve os problemas mais difíceis de SEO em JavaScript por padrão quando você o usa corretamente. O App Router usa Server Components por padrão e suporta SSG/SSR/ISR — todos os quais enviam HTML renderizado, então não há atraso na fila de renderização. Defina metadados com a Metadata API nativa (
metadata/generateMetadata), e lembre-se demetadataBaseou seus canônicos e imagens OG ficarão relativos. Useapp/sitemap.tseapp/robots.ts, pré-construa rotas dinâmicas comgenerateStaticParams, definapriorityna imagem LCP e mantenha os links como âncoras reais denext/link. O Pages Router também é capaz de SEO vianext/head. As falhas são previsíveis — e a maioria delas não é culpa do Next.js, é sua.
Onde o Next.js se encaixa
«Next.js is a React framework, so everything in JavaScript SEO applies. What makes it worth its own guide is that Next.js ships first-class answers to most JS-SEO problems: server rendering, static generation, a metadata system, and sitemap/robots conventions. The hard part isn’t whether Google can read it — Google has rendered JavaScript for years — it’s choosing the right rendering mode and not leaving the SEO basics unwired. This is a specialized case of headless CMS SEO: the CMS barely matters, the frontend’s rendering decisions decide everything. » (Tradução) (Síntese localizada do trecho vinte, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«One framing to keep straight: “this is a Next.js site” doesn’t tell you how any single URL is delivered. Rendering mode, caching, and Server/Client Component boundaries are set per route (sometimes per segment) — a project can mix a static marketing page, an SSR product page, and a Client Component dashboard. Don’t extrapolate one route’s behavior to “the whole app”; test the specific URL. » (Tradução) (Síntese localizada do trecho vinte e um, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Two routers, two sets of mechanics » (Tradução) (Síntese localizada do trecho vinte e dois, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Next.js has two routers, and they handle SEO differently: » (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.)
«- Pages Router (the older model) — data fetching via getStaticProps /
getServerSideProps; metadata via <Head> from next/head (or the next-seo
package); no Server Components.
- App Router (v13+, the current and recommended approach) — React Server Components
by default; the native Metadata API (
metadataexport /generateMetadata); file conventions forapp/sitemap.tsandapp/robots.ts;generateStaticParamsfor dynamic routes. Evidência desta afirmação The App Router uses Server Components and supports generateStaticParams plus metadata file conventions. Escopo: Current Next.js App Router behavior; route rendering can become dynamic based on APIs used. Confiança: alta · Verificado: Next.js: Server and Client Components Next.js: generateStaticParams » (Tradução) (Síntese localizada do trecho vinte e quatro, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Both can rank well. The App Router gives you a cleaner, integrated metadata system (no
next/head juggling) and Server Components out of the box, which is why I’d reach for it
on a new build. But “App Router or you can’t do SEO” is a myth — plenty of Pages Router
sites rank fine.
» (Tradução) (Síntese localizada do trecho vinte e cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
Modos de renderização e o que cada um significa para SEO
«How Google handles JavaScript is a three-phase pipeline — crawl, then a deferred render wave, then index. “All pages with a 200 HTTP status code are sent to the rendering queue.” The whole game in Next.js is choosing a mode that puts your content in the HTML before that render wave, so there’s nothing to wait for. Evidência desta afirmação Google crawls, renders, and indexes JavaScript pages, and successful pages can enter the rendering queue. Escopo: Google Search processing, not a promise that a URL will be indexed. Confiança: alta · Verificado: Google: JavaScript SEO basics » (Tradução) (Síntese localizada do trecho vinte e sete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
- SSG — pré-renderização na compilação, sem fila de renderização.
generateStaticParams()/getStaticPaths()define rotas dinâmicas. - ISR — páginas estáticas revalidadas por intervalo (
export const revalidate = 3600). Após o intervalo, a primeira requisição ainda pode receber conteúdo antigo; para preços/estoque voláteis, prefira SSR. - SSR — HTML por requisição; completo, mas exige atenção a TTFB/LCP.
export const dynamic = 'force-dynamic'ou APIs de requisição ativam SSR. - React Server Components — padrão do App Router; HTML inicial sem lacuna de hidratação. Interatividade fica em componentes com
'use client'. - CSR — depende do navegador. Google pode renderizar depois, mas Bingbot, bots de IA e prévias sociais podem receber vazio. Evite
useEffectpara conteúdo principal.
«A reminder I keep coming back to: “Googlebot can render it” is not the same as “you should make Googlebot render it.” Rendering is expensive, deferred, and not universal across crawlers. » (Tradução) (Síntese localizada do trecho vinte e nove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## The Metadata API (App Router) » (Tradução) (Síntese localizada do trecho trinta, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«The Metadata API is Server Component only — metadata resolves on the server before
the page renders, so it lands in the initial HTML. Export metadata from layout.js or
page.js:
» (Tradução) (Síntese localizada do trecho trinta e um, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
export const metadata: Metadata = {
title: 'My Page',
description: 'Page description',
}«Or, when the tags depend on fetched data, use generateMetadata():
» (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.)
export async function generateMetadata({ params }) {
const post = await getPost(params.slug)
return { title: post.title, description: post.description }
}«The fields that matter for SEO: » (Tradução) (Síntese localizada do trecho trinta e cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
title— aceita string, template ('%s | Brand'), padrão e substituição absoluta. Defina o template no layout raiz.description,alternates.canonical,openGraph,twittererobotscontrolam metadados e prévias.metadataBase— necessário para canônicas e imagens OG absolutas; esquecê-lo gera URLs relativas e sinais canônicos confusos.
«A title-template example: » (Tradução) (Síntese localizada do trecho trinta e sete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
// app/layout.tsx
export const metadata: Metadata = {
metadataBase: new URL('https://example.com'),
title: { template: '%s | Brand Name', default: 'Brand Name' },
}
// app/blog/page.tsx
export const metadata: Metadata = { title: 'My Blog Post' }
// Output: <title>My Blog Post | Brand Name</title>«Two gotchas. First, metadata is shallowly merged from layout to page — a nested
object like openGraph defined in a child segment replaces the parent’s entirely, so
a page-level openGraph: { title: 'Home' } quietly drops any openGraph.images set in
the layout. Second — and this one bites people — metadata only works in Server
Components. Export it from a 'use client' file and it silently does nothing.
» (Tradução) (Síntese localizada do trecho trinta e nove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Streaming metadata. For dynamically rendered pages, generateMetadata can stream the
metadata after the initial HTML. Googlebot executes JavaScript and inspects the full DOM,
so streamed metadata works for Google. But Next.js detects “HTML-limited bots” —
Bingbot, Twitterbot, Slackbot, facebookexternalhit — and ships them blocking
metadata in the <head> instead. Per the Next.js docs, “streaming metadata is disabled
for bots and crawlers that expect metadata to be in the <head> tag.” This is automatic;
no configuration needed. It’s a detail almost no competing guide covers, and it’s why
streaming metadata isn’t a risk for the bots that can’t wait for it. Prerendered pages
are a different case entirely — metadata there resolves at build time, so there’s no
stream to worry about. This behavior is version-specific (current as of Next.js 16.2.10);
re-check the generateMetadata docs when you upgrade. And because delivery paths differ
by entry point, verify metadata two ways, not one: a direct/production request (curl -I
or View Source) and a client-side navigation to the same route — the head can update
differently between the two.
» (Tradução) (Síntese localizada do trecho quarenta, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Metadata with next/head (Pages Router) » (Tradução) (Síntese localizada do trecho quarenta e um, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«On the Pages Router, metadata lives in <Head> from next/head:
» (Tradução) (Síntese localizada do trecho quarenta e dois, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
import Head from 'next/head'
export default function Page() {
return (
<>
<Head>
<title>My Page | Brand</title>
<meta name="description" content="Description" />
<link rel="canonical" href="https://example.com/my-page" />
</Head>
{/* page content */}
</>
)
}«Set title and description per page (not just in _app.js), and put a canonical on
every page including paginated variants. The next-seo package standardizes this with a
<NextSeo> component and structured-data helpers. Migrating to the App Router mostly
means trading next/head and next-seo for the native metadata export.
» (Tradução) (Síntese localizada do trecho quarenta e quatro, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Do you need the next-seo package? It’s a third-party plugin (not part of Next.js
itself) — actively maintained, at v7.2.0 as of this writing, not archived. Its own docs
are explicit about where it fits: for standard meta tags on the App Router, the package’s
README recommends using Next.js’s built-in generateMetadata/metadata export instead of
<NextSeo>; on the Pages Router, <NextSeo> is still a reasonable convenience layer
over next/head. The one App Router use case the package still covers is its JSON-LD
helper components (ArticleJsonLd, FAQPageJsonLd, etc. with useAppDir), which some
teams prefer over hand-rolling <script type="application/ld+json">. Bottom line: on a new
App Router build, reach for the native Metadata API first — the package is optional, not a
requirement, and its own maintainers say so.
» (Tradução) (Síntese localizada do trecho quarenta e cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Sitemaps » (Tradução) (Síntese localizada do trecho quarenta e seis, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«In the App Router, app/sitemap.ts is a file convention that outputs /sitemap.xml:
» (Tradução) (Síntese localizada do trecho quarenta e sete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
import type { MetadataRoute } from 'next'
export default function sitemap(): MetadataRoute.Sitemap {
return [
{ url: 'https://acme.com', lastModified: new Date(), priority: 1 },
{ url: 'https://acme.com/blog', lastModified: new Date(), priority: 0.8 },
]
}«For large sites, generateSitemaps() shards into multiple files (Google’s limit is
50,000 URLs per sitemap), each served at /.../sitemap/[id].xml. The sitemap output also
supports image sitemaps, video sitemaps, and localized alternates.languages. On the
Pages Router, use next-sitemap or generate pages/sitemap.xml.js with
getServerSideProps.
» (Tradução) (Síntese localizada do trecho quarenta e nove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## robots.txt » (Tradução) (Síntese localizada do trecho cinquenta, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«app/robots.ts generates your robots file programmatically:
» (Tradução) (Síntese localizada do trecho cinquenta e um, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
export default function robots(): MetadataRoute.Robots {
return {
rules: [{ userAgent: '*', allow: '/', disallow: '/private/' }],
sitemap: 'https://acme.com/sitemap.xml',
}
}«Per-user-agent rules and multiple sitemaps are supported. The Pages Router uses a static
public/robots.txt. The rule you cannot get wrong on either router: never disallow your
JavaScript or CSS — Google won’t render from blocked files, and on a JS framework that
can blank out the page entirely.
» (Tradução) (Síntese localizada do trecho cinquenta e três, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## next/image and Core Web Vitals » (Tradução) (Síntese localizada do trecho cinquenta e quatro, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«next/image is one of the strongest reasons to use the framework for SEO. It lazy-loads
below-the-fold images, requires width/height (or fill) so it reserves space and
prevents layout shift / CLS, serves WebP/AVIF automatically, and emits a proper
srcset from the sizes prop. The single most important CWV optimization is the
priority prop on your hero / above-the-fold image, which preloads it for a faster LCP:
» (Tradução) (Síntese localizada do trecho cinquenta e cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
<Image src="/hero.jpg" width={1200} height={630} priority alt="Hero" />«Forgetting priority on the LCP image is the most common Next.js CWV mistake — and CWV
problems are widespread on real Next.js sites (see the Stats tab for the Salt Agency
data). alt is required: empty for decorative images, descriptive for content images.
» (Tradução) (Síntese localizada do trecho cinquenta e sete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## next/link and internal linking » (Tradução) (Síntese localizada do trecho cinquenta e oito, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«next/link renders standard <a href> anchors in the HTML, so Google follows them
normally, and it adds client-side navigation plus background prefetching of in-viewport
links in production. The SEO rule is simple: use next/link for internal links, and never
substitute an onClick handler or JavaScript navigation that doesn’t produce a real
anchor — those links aren’t crawlable. Use prefetch={false} on low-value links to save
bandwidth if you need to.
» (Tradução) (Síntese localizada do trecho cinquenta e nove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Dynamic routes and generateStaticParams » (Tradução) (Síntese localizada do trecho sessenta, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«generateStaticParams() tells Next.js which dynamic routes to pre-render at build time:
» (Tradução) (Síntese localizada do trecho sessenta e um, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
// app/blog/[slug]/page.tsx
export async function generateStaticParams() {
const posts = await getPosts()
return posts.map((post) => ({ slug: post.slug }))
}Páginas construídas dessa forma são HTML totalmente estático — o melhor para SEO. Sem isso, as rotas dinâmicas são renderizadas sob demanda (SSR) por padrão, o que é aceitável, mas reintroduz latência do servidor. Combine com revalidate (ISR) para conteúdo que é atualizado regularmente. Certifique-se de que todas as URLs dinâmicas importantes estejam em generateStaticParams para que nada fique esperando na fila de renderização.
«## Structured data (JSON-LD) » (Tradução) (Síntese localizada do trecho sessenta e quatro, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
A Metadata API não tem campo de dados estruturados — você injeta JSON-LD como um <script> em um Server Component, o que o mantém no HTML renderizado no servidor sem custo no bundle do cliente:
const jsonLd = { '@context': 'https://schema.org', '@type': 'Article', /* … */ }
return <script type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />«Article/BlogPosting, BreadcrumbList, Product, and FAQPage are the usual types. Validate with the Rich Results Test after any rendering change. » (Tradução) (Síntese localizada do trecho sessenta e sete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Common Next.js SEO mistakes » (Tradução) (Síntese localizada do trecho sessenta e oito, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Drawn from real audits and the patterns above: » (Tradução) (Síntese localizada do trecho sessenta e nove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
- Canônicas ausentes ou relativas — frequentemente por um
metadataBaseesquecido, que também quebra as URLs de imagem OG. - Sem
priorityna imagem LCP — a maior falha de CWV. - Views de 404 retornando
200— use onotFound()embutido para retornar um status real; soft 404s são comuns em sites Next.js. metadataexportado de um Client Component — silenciosamente não faz nada; é apenas para Server Component.- CSR para conteúdo principal — buscar conteúdo crítico em
useEffectsignifica que crawlers não-Google recebem páginas vazias. - Roteamento por hash (
#) em vez da History API — essas views não são rastreáveis separadamente. - Não exportar
generateStaticParams— rotas dinâmicas são renderizadas sob demanda em vez de serem pré-construídas. openGraphsobrescrito pela herança de layout — segmentos filhos substituem, não mesclam.- JS/CSS bloqueados em robots.txt ou via Content Security Policy que impede o Chrome headless do Googlebot de carregar scripts — teste com URL Inspection.
Observações sobre implantação
O Next.js é desenvolvido pela Vercel; hospedar lá oferece integração estreita (CDN de borda para
páginas estáticas e ISR, com bom TTFB), mas não é obrigatório. Defina redirecionamentos permanentes
em redirects() no next.config.js (retorna 308, ou 301 com permanent: true) para enviar sinais
confiáveis aos rastreadores, configure cabeçalhos de segurança e cache por headers() e use o
cabeçalho de resposta X-Robots-Tag para regras noindex baseadas em caminho quando a metadata
robots por página for inconveniente.
«What to check where. Cache state, status codes, redirects, and streamed metadata don’t all show up in the same test — a route can look fine in one check and still be broken in another: » (Tradução) (Síntese localizada do trecho setenta e três, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«| Check | Where to look | Why it can differ from what you see rendered |
| --- | --- | --- |
| Cache/revalidation age | Response headers on a direct request (curl -I) | ISR can serve a stale page on the request right after the window expires |
| Direct HTTP status | curl -I on the production URL, not the rendered UI | A “not found” view without notFound() still returns 200 |
| Redirect behavior | The actual context that fires it — redirect() in a Server Action, a Route Handler, vs. a client onClick | Status code and response path differ by invocation context, not just the destination |
| Streamed metadata | Direct request and client-side navigation to the same route | Ordinary clients can get streamed metadata; HTML-limited bots get blocking metadata; the two paths aren’t identical |
| Client-side transitions | Navigate in-app, then re-check the <head> | A route that’s correct on first load can drift after a client transition |
» (Tradução) (Síntese localizada do trecho setenta e quatro, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«None of this is guaranteed by the framework — Next.js gives you the mechanisms
(redirects(), notFound(), revalidation, streaming), but cache keys, invalidation,
preview state, and deployment configuration are still your responsibility to get right and
to test in production, not just locally.
» (Tradução) (Síntese localizada do trecho setenta e cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«One last note on dynamic rendering — serving prerendered HTML to bots and JavaScript to users. Google has deprecated it as a recommendation: “dynamic rendering was a workaround and not a long-term solution.” You don’t need it on Next.js anyway — SSR, SSG, ISR, and Server Components all put content in the HTML natively. Mention it so you recognize it in an audit; don’t build on it. » (Tradução) (Síntese localizada do trecho setenta e seis, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«The happy path: App Router + Server Components + ISR + the Metadata API (with
metadataBase) + next/image with priority. Get those right and most of Next.js SEO is
handled.
» (Tradução) (Síntese localizada do trecho setenta e sete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## AI summary » (Tradução) (Síntese localizada do trecho oitenta, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
Uma versão condensada do conteúdo avançado:
- O Next.js resolve a maioria dos problemas de SEO em JavaScript por padrão — se você escolher o modo de renderização certo e configurar o básico. O framework fornece a infraestrutura; ele não escreve nenhuma das suas tags.
- Dois roteadores: App Router (v13+, recomendado) usa Server Components e a Metadata API nativa; Pages Router usa
next/head/next-seo. Ambos podem ranquear. - Modos de renderização: SSG e Server Components são o melhor padrão (conteúdo no HTML, sem atraso na fila de renderização). ISR é um meio-termo forte, mas tem uma armadilha de conteúdo obsoleto na primeira solicitação após a revalidação. SSR para dados voláteis. CSR é arriscado — crawlers que não são do Google podem receber uma página vazia.
- Metadata API (App Router): exportação
metadataougenerateMetadata(), somente em Server Component.metadataBaseé obrigatório ou canonicals e imagens OG ficam relativas.openGraphem um segmento filho substitui o do pai; metadata em um arquivo'use client'não faz nada. - Metadata em streaming funciona para o Google, mas o Next.js envia metadata bloqueante para bots com limitação de HTML (Bingbot, Twitterbot, Slackbot, facebookexternalhit) automaticamente.
- Convenções de arquivo:
app/sitemap.ts(comgenerateSitemaps()para mais de 50 mil URLs) eapp/robots.ts. Nunca bloqueie.js/.css. next/imageprevine CLS, serve WebP/AVIF; definapriorityna imagem LCP — a maior vitória de CWV.next/linkrenderiza âncoras<a href>reais e rastreáveis e faz prefetch.generateStaticParamspré-constroi rotas dinâmicas; sem ele, elas renderizam sob demanda.- JSON-LD é injetado como um
<script>em um Server Component (sem campo na Metadata API). - O pacote
next-seoé opcional, não obrigatório. É um software de terceiros ativamente mantido (v7.2.0, não arquivado), e sua própria documentação recomenda a exportaçãogenerateMetadata/metadataintegrada para meta tags do App Router —<NextSeo>continua útil principalmente no Pages Router, ou para seus componentes auxiliares de JSON-LD. - O modo de renderização é definido por rota, não por projeto — não assuma o comportamento de uma URL com base em outra; teste a rota específica (solicitação direta e navegação do cliente).
- Principais erros: falta de
metadataBase, sempriorityno LCP, 404 retornando200(usenotFound()),metadataem um Client Component, conteúdo principal em CSR. - Renderização dinâmica está obsoleta — você não precisa dela; SSR/SSG/ISR/Server Components cobrem isso.
Documentação oficial
- Fundamentos de JavaScript SEO — rastrear, renderizar e indexar.
- Renderização dinâmica (solução obsoleta) — por que foi descontinuada e alternativas.
- Como a Pesquisa Google funciona — posição da renderização no processo.
Next.js
- Metadata e imagens OG — o sistema de metadata do App Router,
metadataBasee geração de imagens OG. - Referência da API generateMetadata —
metadataestática em comparação comgenerateMetadata, metadata em streaming e a lista de bots com HTML limitado. - Convenção do arquivo sitemap.xml —
app/sitemap.ts,generateSitemaps()e sitemaps de imagens, vídeos e versões localizadas. - Convenção do arquivo robots.txt —
app/robots.ts, regras por agente do usuário e vários sitemaps. - Aprenda: SEO — o percurso de aprendizagem de SEO do próprio Next.js (introdutório; parte dele é anterior ao App Router).
«Bing / Microsoft
- IndexNow / indexnow.org — the push protocol to wire to a Next.js publish/revalidation event. » (Tradução) (Síntese localizada do trecho oitenta e nove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Quotes from the source » (Tradução) (Síntese localizada do trecho noventa e dois, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«On-the-record statements from Google, Next.js, and Google reps. Each link is a deep link that jumps to the quoted passage on the source page. » (Tradução) (Síntese localizada do trecho noventa e três, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
Google — como as páginas com JavaScript são processadas
«- “All pages with a 200 HTTP status code are sent to the rendering queue, no matter whether JavaScript is present on the page.” — Google Search Central docs. Jump to quote » (Tradução) (Síntese localizada do trecho noventa e cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Google — dynamic rendering is deprecated » (Tradução) (Síntese localizada do trecho noventa e seis, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«- “Dynamic rendering was a workaround and not a long-term solution for problems with JavaScript-generated content in search engines.” — Google Search Central docs. Jump to quote
- “…creates additional complexities and resource requirements.” — Google Search Central docs. Jump to quote » (Tradução) (Síntese localizada do trecho noventa e sete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Next.js — streaming metadata and HTML-limited bots » (Tradução) (Síntese localizada do trecho noventa e oito, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«- “Streaming metadata is disabled for bots and crawlers that expect metadata to be in the <head> tag (e.g. Twitterbot, Slackbot, Bingbot).”
— Next.js docs, generateMetadata.
Jump to quote
» (Tradução) (Síntese localizada do trecho noventa e nove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«John Mueller, Google (via Search Engine Journal coverage) » (Tradução) (Síntese localizada do trecho cem, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«- On the growing role of JavaScript in SEO: “You’re going to run into significantly more JavaScript over the next years than in the 2-ish decades in SEO before. If you’re keen on technical SEO, then past HTML you’re going to need to understand JS more and more.” Read the coverage » (Tradução) (Síntese localizada do trecho cento e um, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Note: several source pages (Google’s JavaScript SEO and dynamic-rendering docs, and the Next.js docs) are themselves JavaScript-rendered and can resist automated text-fragment checking, and the Mueller quote is relayed through secondary coverage rather than a primary transcript. Confirm any of these against the live source before treating the exact wording as final. » (Tradução) (Síntese localizada do trecho cento e dois, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
- Conteúdo principal no HTML da primeira resposta (Server Components/SSG/SSR/ISR), não apenas após JavaScript.
- Nenhuma página importante depende de CSR.
- Título/descrição exclusivos e
metadataBaseno layout raiz. - Canônica por página via
alternates.canonicalou<link rel="canonical">. -
metadataapenas em Server Components. -
generateStaticParamscobre rotas dinâmicas importantes. -
app/sitemap.tsatualizado e dividido acima de 50 mil URLs. -
app/robots.ts/robots.txtnão bloqueia.jsou.css. - Imagens usam
next/image, dimensões/fill,altepriorityno LCP. - Links internos usam
next/linke<a href>. - 404 usa
notFound(); JSON-LD passa no teste; redirecionamentos permanentes ficam emredirects()(308).
«A quick pass to confirm a Next.js site is crawlable, indexable, and fast: » (Tradução) (Síntese localizada do trecho cento e seis, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## The mental models » (Tradução) (Síntese localizada do trecho cento e dez, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
1. O modo de renderização é o produto. Antes de depurar qualquer coisa em um site Next.js, responda a uma pergunta: como esta rota é renderizada? Server Components / SSG / SSR / ISR colocam o conteúdo no HTML e são de baixo risco; CSR é o arriscado. Quase todo problema de SEO do Next.js se resume a isso.
«2. The framework gives infrastructure, not content. Next.js ships the Metadata API, sitemap/robots conventions, and the Image component — but it writes none of your titles, descriptions, canonicals, or structured data. “Next.js handles SEO automatically” is the most expensive myth here. » (Tradução) (Síntese localizada do trecho cento e doze, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«3. One source of truth for URLs.
Set metadataBase once and build canonicals, OG images, and sitemap entries from it
(absolute, never relative). One base URL kills the relative-canonical and broken-OG-image
class of bugs.
» (Tradução) (Síntese localizada do trecho cento e treze, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«4. Server Components first, Client Components only where needed.
Default to Server Components so content and metadata land in the HTML. Reach for
'use client' only for interactivity — and remember metadata can’t come from a Client
Component.
» (Tradução) (Síntese localizada do trecho cento e catorze, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«5. The decision rule for rendering. Mostly static (blogs, docs, marketing) → SSG (or ISR on a timer). Always-fresh / volatile (prices, stock) → SSR. Changes hourly/daily, want static speed → ISR (mind the stale-first-request trap). Interactive, behind a login, not indexed → CSR is fine. Public content you want ranked → never CSR. » (Tradução) (Síntese localizada do trecho cento e quinze, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Next.js SEO — cheat sheet » (Tradução) (Síntese localizada do trecho cento e dezoito, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Rendering modes » (Tradução) (Síntese localizada do trecho cento e dezenove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«| Mode | Where HTML is built | SEO | Best for | Watch out for | | --- | --- | --- | --- | --- | | SSG | Build time → static | ✅ Best | Mostly-static content | Stale until rebuild | | Server Components | Server (App Router default) | ✅ Best | Most content | Interactivity needs Client Components | | ISR | Static + timed regen | ✅ Good | Hourly/daily content | First request post-revalidation is stale | | SSR | Server, per request | ✅ Good | Always-fresh data | Higher TTFB / infra cost | | CSR | In the browser | ⚠️ Risky | Logged-in dashboards | Empty page to non-Google crawlers | » (Tradução) (Síntese localizada do trecho cento e vinte, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
Regras rápidas
- Defina
metadataBase. metadatasó funciona em Server Component.openGraphfilho substitui o pai.- Use
priorityna imagem LCP. - Links internos =
next/linkcom<a href>. - 404 =
notFound(). - Nunca bloqueie
.js/.css. - Metadados transmitidos bloqueiam para Bingbot, Twitterbot, Slackbot e facebookexternalhit.
- Renderização dinâmica está obsoleta; use SSR/SSG/ISR/Server Components.
«| Feature | App Router | Pages Router |
| --- | --- | --- |
| Metadata | metadata / generateMetadata | next/head + next-seo |
| Server Components | Default | Not available |
| Streaming metadata (bot-aware) | Yes | No |
| Sitemap | app/sitemap.ts | next-sitemap / manual |
| Robots | app/robots.ts | public/robots.txt |
| Canonical | alternates.canonical | <link rel="canonical"> in <Head> |
| Data fetching | async Server Components | getStaticProps / getServerSideProps |
» (Tradução) (Síntese localizada do trecho cento e vinte e dois, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Quick checks for a Next.js build » (Tradução) (Síntese localizada do trecho cento e vinte e seis, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«A few command-line checks before you reach for a full crawler. » (Tradução) (Síntese localizada do trecho cento e vinte e sete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Is your content in the raw HTML (or only after JS runs)? » (Tradução) (Síntese localizada do trecho cento e vinte e oito, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«macOS / Linux: » (Tradução) (Síntese localizada do trecho cento e vinte e nove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
# Raw HTML as the server sends it — the "first fetch", before any client JS
curl -sL -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" \
https://example.com/page/ -o raw.html
# Is your headline actually in the raw HTML? (empty result = CSR / JS-dependent)
grep -o "Your headline text" raw.html
# Did metadataBase do its job? Canonical and OG URLs should be absolute, not relative
grep -iE 'rel="canonical"|og:(url|image)' raw.html«Windows (PowerShell): » (Tradução) (Síntese localizada do trecho cento e trinta, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
$ua = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Invoke-WebRequest -Uri "https://example.com/page/" -UserAgent $ua -OutFile raw.html
Select-String -Path raw.html -Pattern "Your headline text"
Select-String -Path raw.html -Pattern 'rel="canonical"','og:url','og:image'«If the headline is missing from raw.html but shows in your browser, that route is
client-rendered. If canonicals or OG image URLs come out relative, you’ve forgotten
metadataBase.
» (Tradução) (Síntese localizada do trecho cento e trinta e um, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Confirm you aren’t blocking JS/CSS (including the Next.js _next directory)
» (Tradução) (Síntese localizada do trecho cento e trinta e dois, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«macOS / Linux: » (Tradução) (Síntese localizada do trecho cento e trinta e três, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
curl -sL https://example.com/robots.txt | \
grep -iE "disallow.*\.(js|css)|Disallow:\s*/_next"«Windows (PowerShell): » (Tradução) (Síntese localizada do trecho cento e trinta e quatro, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
(Invoke-WebRequest "https://example.com/robots.txt").Content |
Select-String -Pattern "Disallow.*\.(js|css)","Disallow:\s*/_next"«Any match here is almost always a mistake — Google won’t render from blocked files. A plain
curl can’t run JavaScript, so for the rendered DOM use URL Inspection’s “View Crawled
Page → rendered HTML.”
» (Tradução) (Síntese localizada do trecho cento e trinta e cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Tools for auditing a Next.js site » (Tradução) (Síntese localizada do trecho cento e trinta e oito, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
- URL Inspection (Google Search Console) — a fonte da verdade. Execute um teste ao vivo,
depois veja o HTML renderizado, screenshot e recursos da página (o que carregou vs.
o que foi bloqueado) para pegar lacunas de CSR e recursos
_nextbloqueados. - Rich Results Test — confirme que o JSON-LD entrou na saída renderizada após qualquer mudança de renderização.
- Lighthouse / Chrome DevTools — meça LCP, CLS e INP; verifique se sua imagem hero
está pré-carregada (
priority). - Ahrefs Site Audit — rastreia com renderização de JavaScript, revelando canônicos ausentes/relativos, metadados quebrados, cadeias de redirecionamento e problemas de indexabilidade no frontend.
- Screaming Frog SEO Spider — rastreie com renderização de JS ligada/desligada para comparar HTML bruto vs. renderizado, e construa comparações pré/pós rastreamento para migrações.
- Bing Webmaster Tools — a URL Inspection do Bing e onde as submissões do IndexNow aparecem.
«## Mistakes to avoid on Next.js » (Tradução) (Síntese localizada do trecho cento e quarenta e dois, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
Padrões concretos que quebram silenciosamente o SEO em builds reais de Next.js — previna-os antes de entregá-los, em vez de depurá-los após uma queda de tráfego.
«### Shipping without metadataBase in the root layout
» (Tradução) (Síntese localizada do trecho cento e quarenta e quatro, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Why it’s wrong: without metadataBase, alternates.canonical and openGraph.images
resolve to relative paths instead of absolute URLs. A relative canonical can confuse
canonicalization signals, and relative OG image URLs break link previews on social and
messaging apps.
» (Tradução) (Síntese localizada do trecho cento e quarenta e cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«What to do instead: set metadataBase: new URL('https://example.com') once in
app/layout.tsx and let every page inherit it. Check it with grep -iE 'rel="canonical"|og:(url|image)' against a raw HTML fetch — the URLs should start with https://.
» (Tradução) (Síntese localizada do trecho cento e quarenta e seis, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«### Overwriting a layout’s openGraph from a child segment
» (Tradução) (Síntese localizada do trecho cento e quarenta e sete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Why it’s wrong: metadata merges shallowly from layout to page. A page-level
openGraph: { title: 'Home' } doesn’t merge with the layout’s openGraph.images — it
replaces the whole object, silently dropping the images.
» (Tradução) (Síntese localizada do trecho cento e quarenta e oito, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«What to do instead: either repeat the full openGraph object (images included) at
every level that overrides it, or only override the specific top-level metadata fields you
actually need to change, and leave openGraph untouched where the layout’s default is fine.
» (Tradução) (Síntese localizada do trecho cento e quarenta e nove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«### Exporting metadata from a Client Component
» (Tradução) (Síntese localizada do trecho cento e cinquenta, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Why it’s wrong: the Metadata API is Server Component only. Add 'use client' to a file
that also exports metadata and the export does nothing — no error, no warning, just a
page with no title or description.
» (Tradução) (Síntese localizada do trecho cento e cinquenta e um, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
O que fazer no lugar: mantenha as exportações metadata / generateMetadata em um arquivo
de Server Component comum (page.tsx ou layout.tsx sem 'use client'). Se uma página precisar
de interatividade no cliente, coloque-a em um componente filho separado e importe-o — não adicione
'use client' ao arquivo responsável pela exportação de metadata.
Buscar o conteúdo principal em useEffect (ou depender totalmente de CSR)
«Why it’s wrong: content rendered only in the browser isn’t in the initial HTML. Google will eventually render it, but the median render delay is real and the 90th percentile stretches to hours — and non-Google crawlers (Bing, social preview bots, most AI crawlers) often don’t render JavaScript at all, so they see an empty page. » (Tradução) (Síntese localizada do trecho cento e cinquenta e quatro, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«What to do instead: default to Server Components, SSG, ISR, or SSR for anything you
want indexed. Reserve 'use client' and useEffect data-fetching for interactive UI that
doesn’t need to be crawlable — a filter widget, not the article body.
» (Tradução) (Síntese localizada do trecho cento e cinquenta e cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«### Returning 200 for a “not found” view
» (Tradução) (Síntese localizada do trecho cento e cinquenta e seis, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Why it’s wrong: rendering a “not found” message without calling notFound() returns a
normal 200 status. That’s a soft 404 — Google can index the empty-content page instead of
recognizing it as missing, and soft 404s are one of the most common real-world Next.js SEO
problems.
» (Tradução) (Síntese localizada do trecho cento e cinquenta e sete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«What to do instead: call the built-in notFound() function so the route returns a real
404. Confirm with curl -I on a known-missing URL and check the status code directly,
not just what renders in the browser.
» (Tradução) (Síntese localizada do trecho cento e cinquenta e oito, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«### Skipping generateStaticParams on important dynamic routes
» (Tradução) (Síntese localizada do trecho cento e cinquenta e nove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Why it’s wrong: without it, dynamic routes fall back to on-demand rendering (SSR), which still works for SEO but adds server latency to every first request for that URL — including Googlebot’s. » (Tradução) (Síntese localizada do trecho cento e sessenta, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«What to do instead: enumerate the URLs that matter (product pages, blog posts,
category pages) in generateStaticParams() so they’re pre-built, and pair it with
revalidate (ISR) for content that changes after launch.
» (Tradução) (Síntese localizada do trecho cento e sessenta e um, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Test yourself: Next.js SEO » (Tradução) (Síntese localizada do trecho cento e sessenta e quatro, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Five quick questions on making a Next.js site crawlable, indexable, and fast. Pick an answer for each, then check. » (Tradução) (Síntese localizada do trecho cento e sessenta e cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
Meus textos relacionados
- JavaScript SEO: guia definitivo — renderização, paridade do DOM, canônicas, sitemaps e modos que sustentam o Next.js.
- Guia para iniciantes de SEO técnico — contexto de renderização e rastreamento.
Outras referências do setor
- Metadados e imagens OG — sistema do App Router.
- API generateMetadata — metadados estáticos/dinâmicos.
- Convenção sitemap.xml — sitemaps localizados e de imagens.
- Problemas comuns de SEO em Next.js — estudo de 50 sites.
- Como o Google processa JavaScript — dados de tempo.
- Guia completo de SEO para Next.js — modos, metadados e dados estruturados.
- App Router versus Pages Router — comparação.
- r/TechSEO — comunidade de depuração.
«## Resources worth your time » (Tradução) (Síntese localizada do trecho cento e sessenta e nove, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«My speaking
- JavaScript SEO — Ungagged 2019 (SlideShare) — my walkthrough of how frameworks separate frontend from backend and how Googlebot renders. (Standing disclaimer: the dynamic-rendering recommendation in that deck is now outdated — Google deprecated it.) » (Tradução) (Síntese localizada do trecho cento e setenta e um, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«## Stats worth citing » (Tradução) (Síntese localizada do trecho cento e setenta e cinco, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«- Render timing is usually fast, occasionally very slow. Vercel’s analysis of 37,000+ server-beacon pairs on nextjs.org found a median render time of ~10 seconds, but a 90th percentile of ~3 hours and a 99th percentile of ~18 hours — which is exactly why you don’t want primary content waiting on the render queue. Source
- CWV and soft 404s are widespread on real Next.js sites. Salt Agency’s audit of 50
Next.js sites found 41/50 returning soft 404s (404 views at a
200status) and only 3/50 passing LCP thresholds — a reminder that the framework’s CWV advantages only help if you usenext/imagewithpriorityand return real status codes. Source » (Tradução) (Síntese localizada do trecho cento e setenta e seis, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
«Note: these figures come from Vercel’s and Salt Agency’s published studies and are relayed from the brief’s research; treat them as directional and confirm the exact numbers against the live source before quoting them verbatim. » (Tradução) (Síntese localizada do trecho cento e setenta e sete, parte um: o texto-fonte foi preservado para conferência na revisão nativa.)
Registro de alterações
Atualizado em 18 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.
Não é possível fazer a comparação completa — nenhum instantâneo anterior foi arquivado para esta revisão.