JSON-LD para SEO

JSON-LD é o formato de dados estruturados baseado em script que o Google recomenda — mais fácil de implementar, nunca toca no HTML visível e normalmente é combinado com schema.org para SEO.

Publicado pela primeira vez: 26 de jun. de 2026 · Última atualização: 11 de ago. de 2026 · Avançado
Idiomas
1 sinal de evidência nesta página

JSON-LD (Notação de Objetos JavaScript para Dados Vinculados) é um formato de dados estruturados que vive em uma tag <script type="application/ld+json">; no lado do SEO, normalmente é combinado com o vocabulário schema.org para descrever o conteúdo da página, embora o JSON-LD em si possa carregar outros vocabulários também. É um padrão W3C (2014), e o Google o recomenda em vez de Microdata e RDFa por um motivo: é o formato mais fácil de implementar e manter em escala, porque fica em seu próprio bloco e nunca toca no seu HTML visível. Todos os três formatos funcionam igualmente bem quando implementados corretamente. A espinha dorsal da sintaxe é @context (o vocabulário — schema.org para a maioria das marcações de SEO, mas não o único valor válido), @type (a entidade) e @id (um URI estável útil, mas opcional, para vincular entidades — a base do padrão @graph, que é uma forma válida de organizar múltiplas entidades, não um requisito). O detalhe que a maioria dos guias ignora: o Googlebot renderiza JavaScript, então JSON-LD injetado dinamicamente funciona para o Google, mas vários rastreadores de IA — incluindo GPTBot e ClaudeBot, conforme testado — não executam JavaScript; isso é específico do provedor e da data, não uma regra universal, então verifique diretamente se um rastreador específico é importante para você e renderize no servidor a marcação que você não pode confirmar de outra forma. Dados estruturados não são um sinal de ranqueamento; eles governam a elegibilidade para rich results e o entendimento de entidades, e devem descrever conteúdo realmente visível na página.

TL;DR — JSON-LD (Notação de Objetos JavaScript para Dados Vinculados) é uma Recomendação da W3C de 2014 — construída sobre JSON, mas @context é o que a torna dados vinculados, não apenas JSON. É o formato de dados estruturados que o Google recomenda porque é o mais fácil de implementar e manter em escala e nunca toca o HTML visível; Microdata e RDFa são igualmente válidos quando corretos. A espinha dorsal da sintaxe é @context (vocabulário — schema.org para a maioria das marcações de SEO, embora a especificação permita outros contextos), @type (entidade), @id (um URI estável útil, mas opcional, para referência cruzada de entidades — a base de @graph, em si um padrão válido entre outros, não um requisito). Coloque-o no <head> ou <body> — o Google aceita ambos. O Googlebot renderiza JS, então JSON-LD injetado dinamicamente funciona para Google; vários rastreadores de IA (GPTBot, ClaudeBot incluídos, conforme testado) não executam JS, mas isso é específico do provedor e da data — verifique diretamente em vez de assumir isso para cada rastreador de IA, e renderize no servidor o que você não puder confirmar. Dados estruturados não são um sinal de ranqueamento — eles impulsionam a elegibilidade para rich results e o entendimento de entidades, e devem descrever conteúdo visível na página.

JSON-LD é um formato, não um vocabulário

Primeiro, uma distinção que esclarece muita confusão: JSON-LD é o formato; schema.org é o vocabulário. JSON-LD é como você escreve a marcação; os tipos Article, Product, Organization do schema.org são o que você diz. Os rich results são a camada de recursos sobre ambos. Esta página é sobre o formato. (O ângulo de vocabulário para IA está em Schema Markup for AI.)

JSON-LD é uma Recomendação da W3C, publicada pela primeira vez em 2014 — ela precede sua adoção em SEO e foi projetada para interoperabilidade geral de dados vinculados na web, não especificamente para busca. Essa história é o motivo pelo qual uma propriedade como @id existe, e é o ponto de nível de especificação que a maioria dos guias de SEO ignora: JSON-LD não é apenas JSON. É construído sobre a sintaxe JSON, mas a declaração @context é o que torna os dados vinculados — identificáveis e conectáveis na web. Remova @context e você terá dados que um parser não consegue interpretar.

JSON-LD também não é casado com schema.org. A especificação permite que @context referencie qualquer vocabulário publicado — seus próprios exemplos vinculam a contextos não-schema.org — então JSON-LD é a resposta certa para “qual formato” enquanto schema.org é uma resposta, a comum para marcação de busca e busca por IA, para “qual vocabulário”. Uma página poderia validamente usar JSON-LD com um vocabulário diferente; só não seria mais marcação schema.org.

JSON-LD vs. Microdata vs. RDFa

Há três maneiras de expressar dados estruturados, e o Google suporta todas elas:

JSON-LDMicrodataRDFa
Onde ficaUm bloco <script> separadoAtributos itemprop inline no seu HTMLAtributos property inline no seu HTML
Toca o HTML visível?NãoSimSim
Pode ser injetado por JS / gerenciador de tags?Sim (limpo)DesajeitadoDesajeitado
Posição do GoogleRecomendadoSuportadoSuportado
Propensão a errosMenorMaior (entrelaçado com a marcação)Maior (entrelaçado com a marcação)

A recomendação do Google é explícita, mas de escopo restrito: “In general, Google recommends using JSON-LD for structured data if your site’s setup allows it, as it’s the easiest solution for website owners to implement and maintain at scale (in other words, less prone to user errors).” (tradução) «Em geral, o Google recomenda usar JSON-LD para dados estruturados se a configuração do seu site permitir, pois é a solução mais fácil para os proprietários de sites implementarem e manterem em escala (em outras palavras, menos propensa a erros do usuário).»

A nuance que os concorrentes geralmente ignoram — e que vale a pena manter — vem da mesma página do Google: “All 3 formats are equally fine for Google, as long as the markup is valid and properly implemented per the feature’s documentation.” (tradução) «Todos os 3 formatos são igualmente aceitáveis para o Google, desde que a marcação seja válida e implementada corretamente de acordo com a documentação do recurso.» Portanto, a recomendação é sobre facilidade de implementação e taxa de erro, não sobre velocidade de análise ou vantagem de ranqueamento. Usar Microdata não é uma penalidade. JSON-LD apenas vence na prática porque não entrelaça dados estruturados com a marcação que um designer pode editar amanhã.

A sintaxe: @context, @type, @id, propriedades, aninhamento

Aqui está um bloco Article anotado:

<script type="application/ld+json">
{
  "@context": "https://schema.org",          // the vocabulary — the common value for SEO
  "@type": "Article",                          // the entity type
  "@id": "https://example.com/post#article",   // a stable URI for this entity
  "headline": "How JSON-LD Works",            // a property (key/value)
  "datePublished": "2026-06-26",
  "author": {                                  // a nested entity
    "@type": "Person",
    "name": "Patrick Stox",
    "url": "https://patrickstox.com/"
  }
}
</script>
  • @context — estabelece a estrutura semântica (o vocabulário). Para marcação SEO do schema.org, normalmente é "https://schema.org", mas isso é uma convenção, não uma regra: @context mapeia termos para identificadores, e a especificação permite que ele aponte para outros vocabulários. Ele informa ao analisador como interpretar cada nome de propriedade que se segue. Esta é a parte que o torna linked data.
  • @type — declara a entidade: Article, Product, Organization, BreadcrumbList, etc. Ele mapeia para um tipo do schema.org. Use o tipo mais específico aplicávelNewsArticle em vez de Article se for adequado.
  • @id — um URI único que identifica o recurso. É o mecanismo que permite referenciar uma entidade a partir de outra (veja @graph abaixo), e vale a pena defini-lo em qualquer coisa que você vá referenciar cruzadamente — mas não é universalmente obrigatório. A especificação JSON-LD permite nós em branco não identificados, então JSON-LD válido pode omitir @id em entidades que você nunca precise referenciar em outro lugar.
  • Propriedades — pares comuns de chave/valor em JSON, usando termos de vocabulário do @context.
  • Aninhamento — entidades filhas são expressas como objetos JSON aninhados (o objeto author acima) ou arrays de objetos.

O padrão @graph (a abordagem escalável)

A maioria das páginas precisa de mais de uma entidade: uma Organization, um WebSite, um BreadcrumbList e o próprio Article ou WebPage. A abordagem ingênua é usar quatro blocos <script> separados que repetem dados. Uma alternativa escalável é um único bloco com @graph — um array de entidades, referenciadas cruzadamente por @id. Nem a especificação JSON-LD nem o Google exigem @graph como o padrão — é sintaxe para expressar um grafo, e outros layouts válidos existem (blocos tipados separados, objetos aninhados sem um @graph de nível superior, nós em branco sem @id algum) — mas em um site com várias entidades referenciadas cruzadamente, é o padrão que evita repetir os mesmos dados de Organization ou WebSite em todas as páginas:

Declare each entity once and connect the graph with stable `@id` references instead of repeating full objects. Fonte: Nested Schema

One Organization is referenced as publisher by the WebSite and Article. The WebPage belongs to the WebSite and is connected to the Article. Each entity is declared once, and the same stable ID string is reused for every reference.

© Patrick Stox LLC · CC BY 4.0 ·

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://example.com/#org",
      "name": "Example Co",
      "url": "https://example.com/"
    },
    {
      "@type": "WebSite",
      "@id": "https://example.com/#website",
      "url": "https://example.com/",
      "publisher": { "@id": "https://example.com/#org" }   // reference, not a copy
    },
    {
      "@type": "WebPage",
      "@id": "https://example.com/post#webpage",
      "isPartOf": { "@id": "https://example.com/#website" },
      "breadcrumb": { "@id": "https://example.com/post#breadcrumb" }
    }
  ]
}
</script>

Defina Organization uma vez e depois aponte para ela com { "@id": "...#org" } em todos os outros lugares, em vez de repetir o nome, o logotipo e a URL. É assim que os principais plugins de schema dos CMS constroem sua saída, e é por isso que @id existe. O Bing faz o mesmo argumento para o aninhamento do JSON-LD: ele “makes defining links and relationships between data and entities… easy because it supports nested data.” (tradução) «torna a definição de links e relacionamentos entre dados e entidades… fácil porque suporta dados aninhados.»

Onde colocá-lo: <head> ou <body>

O Google confirma que ambos funcionam“You can put the JSON-LD data in the <head> or the <body> of the page.” (tradução) «Você pode colocar os dados JSON-LD no <head> ou no <body> da página.» <head> é convencional, mas muitos plugins de CMS injetam-no perto do final do <body>, e isso é aceitável. O Bing concorda que ele pode ficar “in the header, body or foot of the page.” (tradução) «no cabeçalho, corpo ou rodapé da página.» Não perca tempo realocando um bloco válido do corpo para o cabeçalho; isso não muda nada. Evidence for this claim Google permits JSON-LD in either the head or body of an HTML document for supported structured-data features. Scope: Google Search JSON-LD guidance; markup must still match visible page content. Confidence: high · Verified: Google: Structured data introduction

Gerando JSON-LD dinamicamente — e a pegadinha do rastreador de IA

Você pode construir JSON-LD dinamicamente com JavaScript, e o Google documenta duas maneiras de fazê-lo:

Evidence for this claim Dynamically generated structured data is acceptable to Google when it is rendered and complies with content and quality guidelines. Scope: Google Search JavaScript and structured-data guidance; crawlability and rendering remain prerequisites. Confidence: high · Verified: Google: Generate structured data with JavaScript
  1. Google Tag Manager — uma tag HTML personalizada contendo o JSON-LD, extraindo valores de variáveis do GTM. (Evite duplicar dados entre a página e a tag.)
  2. JavaScript personalizado — crie o elemento de script programaticamente:
    const script = document.createElement('script');
    script.setAttribute('type', 'application/ld+json');
    script.textContent = structuredDataText;
    document.head.appendChild(script);

Isso funciona para o Googlebot, porque o Google renderiza a página: “O Google Search pode entender e processar dados estruturados que estão disponíveis no DOM quando renderiza a página.” Até aqui, tudo bem.

Aqui está o detalhe que a maioria dos guias ignora, dito com cuidado. Vários rastreadores de IA — incluindo GPTBot e ClaudeBot, como comumente testados — não executaram JavaScript. Se o seu JSON-LD só existe depois que um script do lado do cliente é executado, um rastreador que ignora JavaScript nunca o vê — ele fica invisível para esse bot, mesmo que Googlebot o leia perfeitamente, porque o Google documenta a renderização do DOM antes de procurar dados estruturados.

Duas ressalvas honestas sobre esse comportamento de rastreadores de IA: é a própria documentação do Google que estabelece o lado do Googlebot; o lado dos rastreadores de IA vem de testes e relatos de provedores individuais, não de uma especificação que qualquer um deles publique, então é específico do provedor e da data — o suporte a JavaScript de um rastreador pode mudar, e eu não verifiquei cada provedor diretamente. Não trate “rastreadores de IA ignoram JS” como uma regra universal para construir em cima; trate como um motivo para verificar o rastreador que você realmente se importa (ou use renderização no servidor por padrão quando não puder verificar). Se não estiver no HTML renderizado no servidor e você não confirmou que o rastreador executa JS, assuma que ele não pode vê-lo. Para visibilidade em busca de IA, renderize JSON-LD no servidor dentro do HTML estático, a menos que você tenha verificado o contrário. (Este é o problema de renderização JavaScript de um ângulo de dados estruturados — veja JavaScript SEO.)

Há uma segunda ressalva para ecommerce: o Google avisa que a marcação Product dinamicamente gerada “pode tornar os rastreamentos do Shopping menos frequentes e menos confiáveis,” o que é um problema real para preço e disponibilidade que mudam rapidamente. Para produtos, prefira renderização no servidor, independentemente de IA.

As políticas (agora elas têm consequências)

As diretrizes de dados estruturados do Google são curtas e essenciais:

  • “Não marque conteúdo que não esteja visível para os leitores da página.”
  • “Não marque conteúdo irrelevante ou enganoso, como avaliações falsas.”
  • “Coloque os dados estruturados na página que eles descrevem.”
  • “Use os nomes de tipo e propriedade mais específicos aplicáveis definidos pelo schema.org.”
  • Não bloqueie suas páginas de dados estruturados do Googlebot via robots.txt ou noindex.

A regra de conteúdo visível é a que você deve internalizar. Schema que descreve conteúdo não mostrado na página sempre foi uma violação; a aplicação de schema “invisível” foi reforçada. O Bing coloca o aviso de forma direta: “even though the markup is not visible on your page, it is still read by the search engines, and putting spam data in the markup can hamper your presence.” (tradução) «mesmo que a marcação não seja visível na página, ela ainda é lida pelos mecanismos de busca, e inserir dados de spam na marcação pode prejudicar sua presença.»

Erros comuns de JSON-LD

  • Marcação que não corresponde à página visível — o problema nº 1 de política (uma avaliação no JSON-LD que nenhum visitante vê).
  • JSON malformado — uma vírgula final, uma aspa sem escape ou aspas inteligentes do Word (" em vez de ") que quebram silenciosamente todo o bloco. JSON-LD é estrito.
  • Nomes de propriedades errados — inventar propriedades que não estão no schema.org, ou escrever errado as reais, fazendo o parser ignorá-las.
  • Um tipo genérico onde existe um específicoThing ou Article onde Recipe ou NewsArticle era o adequado.
  • Blocos Organization duplicados e inconsistentes entre páginas com nomes/logos conflitantes.
  • Propriedades obrigatórias ausentes para o rich result que você está segmentando (cada recurso lista seus próprios campos obrigatórios).
  • Marcação injetada via JS assumida como visível para todos os crawlers — o Google renderiza, mas alguns crawlers de IA não, e vale verificar por crawler (a ressalva acima).

Validando JSON-LD

Quatro perguntas diferentes são feitas sob “meu JSON-LD é válido”, e elas não são a mesma pergunta — passar em uma não significa passar nas outras:

TesteProvaNão prova
JSON analisa (qualquer linter de JSON, ou a etapa de análise do Rich Results Test)A sintaxe é JSON legal — sem vírgulas finais, aspas sem escape ou quebra por aspas inteligentesQue qualquer nome de propriedade é vocabulário real do schema.org, ou que o Google mostrará algo
Schema.org ValidatorAs propriedades e tipos existem no vocabulário do schema.orgQue o Google suporta o tipo como rich result, ou que os campos obrigatórios para um recurso específico estão presentes
Rich Results TestA marcação atende aos requisitos do Google para um tipo de rich result específico suportado, na página renderizada que você testouQue o Google realmente exibirá o rich result — elegibilidade não é garantia — ou que outros sistemas de busca/IA o analisam da mesma forma
Google Search Console — Relatórios de melhorias / rich resultsO que o Google realmente analisou em páginas vivas e rastreadas, em escala, com erros reaisEstado em tempo real — os relatórios ficam atrás de um novo rastreamento
  • Teste por URL, não por código colado, para páginas renderizadas via JS. O modo de entrada de código do Rich Results Test não executa seus scripts nem resolve referências relativas da mesma forma que o teste de URL ao vivo — ele não pode dizer como um bloco injetado no lado do cliente fica após a renderização.
  • Bing Webmaster Tools — Validador de Marcação — o Bing valida JSON-LD desde agosto de 2018.
  • Nenhum desses testes fala por crawlers que não renderizam JavaScript (veja a ressalva do crawler de IA acima) — testar a URL renderizada confirma o que o Google vê, não o que um bot que ignora JS recebe.

JSON-LD ajuda no SEO?

Defina expectativas honestamente:

  • Não é um sinal de ranqueamento. John Mueller disse que dados estruturados não farão um site ranquear melhor. Ponto final.
  • Elegibilidade para rich results. É o que torna você elegível para recursos aprimorados de SERP (estrelas, preços, FAQs, breadcrumbs) — elegibilidade, não garantia.
  • CTR, indiretamente. Resultados com aparência mais rica podem gerar mais cliques, que é o retorno real para a maioria dos sites.
  • Entendimento de entidades. Ajuda os mecanismos a conectar sua página a entidades conhecidas e ao Knowledge Graph.
  • Busca por IA. Fabrice Canel (Bing) confirmou em 2025 que a marcação de schema ajuda os LLMs da Microsoft a entender conteúdo — mas observe a ressalva do estudo controlado em Schema Markup for AI: é infraestrutura para desambiguação, não uma alavanca direta de citação.

Então: implemente JSON-LD para elegibilidade de rich results, clareza de entidades e compreensão por IA/LLM — não como um truque de ranqueamento.

Este artigo está no hub de dados estruturados. Para a abordagem específica de IA sobre o vocabulário do schema.org, consulte Schema Markup para IA; para os mecanismos de renderização por trás da injeção dinâmica, consulte JavaScript SEO.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.