Dados estruturados e Schema Markup: guia prático com JSON-LD
Dados estruturados são um bloco de código, normalmente em JSON-LD, que descreve o conteúdo da página no vocabulário do Schema.org: "isto é um produto, custa R$ 149,90 e está em estoque". O Google usa essa marcação para entender a página e, quando ela cumpre as diretrizes, pode exibir resultados ricos (rich results) com preço, estrelas, trilha de navegação ou logotipo. Não é fator de ranqueamento direto, mas melhora a leitura do conteúdo pelo buscador e a aparência do snippet.
Se você já tem marcação no site e quer saber se ela está correta, cole a URL no nosso validador de Schema gratuito: ele encontra os blocos JSON-LD e microdata, aponta erros de sintaxe e lista as propriedades recomendadas que estão faltando.
O que é Schema.org e como os dados estruturados funcionam
O Schema.org é um vocabulário criado em conjunto por Google, Microsoft, Yahoo e Yandex. Ele define tipos (Organization, Product, Article, Event...) e as propriedades de cada tipo (name, price, startDate...). Os dados estruturados são a aplicação desse vocabulário ao seu HTML.
Existem três formatos para escrever essa marcação:
| Formato | Como funciona | Quando usar |
|---|---|---|
| JSON-LD | Um <script type="application/ld+json"> separado do HTML visível |
Recomendado pelo Google; mais fácil de manter |
| Microdata | Atributos itemscope, itemtype e itemprop dentro das tags HTML |
Temas antigos e alguns e-commerces |
| RDFa | Atributos vocab, typeof e property no HTML |
Raro em SEO; mais comum em projetos de dados abertos |
O Google aceita os três, mas recomenda JSON-LD. O motivo é prático: o bloco fica isolado, não quebra quando alguém mexe no layout e pode ser gerado por plugin, tema ou pelo back-end sem tocar no template.
Quais tipos ainda geram rich results no Google
Aqui é onde muito guia está desatualizado. O Google mudou bastante as regras nos últimos anos:
- FAQPage: desde agosto de 2023, o resultado rico de perguntas frequentes aparece apenas para sites governamentais e de saúde bem conhecidos e com autoridade. Para uma loja virtual ou blog comum, a marcação continua válida, mas não gera o bloco expandido na busca.
- HowTo: o resultado rico de "como fazer" foi removido (primeiro no mobile, depois no desktop, em 2023).
- Avaliações próprias: desde 2019, estrelas de review "autoatribuídas" em
LocalBusinesseOrganization(avaliações que a empresa publica sobre si mesma no próprio site) não geram snippet.
Os tipos que continuam úteis para a maioria dos sites:
| Tipo | O que pode aparecer na busca |
|---|---|
Product + Offer / AggregateRating |
Preço, disponibilidade, estrelas de avaliação, frete e devolução |
BreadcrumbList |
Trilha de navegação no lugar da URL |
LocalBusiness |
Ajuda o Google a entender endereço, horário e contato |
Organization |
Logotipo e dados da empresa usados pelo Google |
Article |
Informações de título, imagem e data em notícias e posts |
Event |
Data, local e ingressos em experiências de eventos |
Recipe |
Foto, tempo de preparo e avaliação da receita |
WebSite |
Nome do site exibido nos resultados |
Importante: marcação correta torna a página elegível, mas o Google não garante que o resultado rico vai aparecer.
Exemplos prontos de JSON-LD
Troque os dados de exemplo pelos seus e coloque o bloco no <head> ou no <body> da página correspondente.
Organization
Vai na página inicial ou na página "Sobre".
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Loja Exemplo",
"url": "https://www.lojaexemplo.com.br",
"logo": "https://www.lojaexemplo.com.br/logo.png",
"sameAs": [
"https://www.instagram.com/lojaexemplo",
"https://www.linkedin.com/company/lojaexemplo"
]
}
LocalBusiness
Para uma clínica, restaurante ou escritório com endereço físico. Use o subtipo mais específico possível (Dentist, Restaurant, MedicalClinic).
{
"@context": "https://schema.org",
"@type": "Dentist",
"name": "Clínica Sorriso Exemplo",
"url": "https://www.clinicaexemplo.com.br",
"telephone": "+55-48-3000-0000",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "Rua Exemplo, 123",
"addressLocality": "Florianópolis",
"addressRegion": "SC",
"postalCode": "88000-000",
"addressCountry": "BR"
},
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "18:00"
}]
}
Product com Offer
O tipo mais importante para loja virtual. O preço vai com ponto decimal e a moeda em código ISO 4217 (BRL).
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Garrafa Térmica Inox 500 ml",
"image": "https://www.lojaexemplo.com.br/img/garrafa-500.jpg",
"description": "Garrafa térmica de aço inox, mantém a temperatura por até 12 horas.",
"sku": "GT-500",
"brand": { "@type": "Brand", "name": "Exemplo" },
"offers": {
"@type": "Offer",
"url": "https://www.lojaexemplo.com.br/garrafa-termica-500",
"price": "89.90",
"priceCurrency": "BRL",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
}
}
BreadcrumbList
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Início", "item": "https://www.lojaexemplo.com.br/" },
{ "@type": "ListItem", "position": 2, "name": "Cozinha", "item": "https://www.lojaexemplo.com.br/cozinha" },
{ "@type": "ListItem", "position": 3, "name": "Garrafa Térmica Inox 500 ml" }
]
}
O último item pode ficar sem item, porque representa a própria página.
Como implementar passo a passo
- Mapeie os modelos de página. Home, categoria, produto, post, página de contato. Cada modelo recebe um conjunto de tipos, não cada URL individualmente.
- Escolha a forma de gerar a marcação:
- WordPress: Yoast SEO e Rank Math já geram
Organization,WebSite,ArticleeBreadcrumbList. Com WooCommerce, os dados deProducteOffersaem do cadastro do produto. - Shopify: a maioria dos temas modernos já inclui
Productem JSON-LD. Confira se o tema preencheavailabilitye se variantes com preços diferentes estão representadas. - Site próprio: gere o JSON-LD no back-end a partir do mesmo banco de dados que alimenta a página. Assim preço e estoque nunca ficam diferentes do que o cliente vê.
- Evite duplicidade. Plugin de SEO, tema e app de avaliações podem gerar cada um o seu
Product. Dois blocos conflitantes na mesma página confundem o Google. - Valide antes de publicar e depois monitore no Search Console.
Erros comuns em dados estruturados
- Marcar conteúdo que o usuário não vê. Avaliações, perguntas ou preços que existem só no JSON-LD violam as diretrizes do Google e podem gerar ação manual.
- Preço ou disponibilidade divergente. O JSON-LD diz R$ 89,90 e "InStock", a página mostra R$ 99,90 e "esgotado". Acontece muito com cache e promoções. Gere a marcação dinamicamente.
- Formato de preço errado.
"price": "R$ 89,90"está errado; o correto é"price": "89.90"com"priceCurrency": "BRL". - Erros de sintaxe JSON. Vírgula depois do último item de uma lista ou objeto, aspas curvas copiadas do Word, chave sem fechar. Um único erro invalida o bloco inteiro.
- Propriedades obrigatórias ausentes.
Productsemoffers,reviewouaggregateRating;EventsemstartDateoulocation;LocalBusinesssemaddress. - Review markup abusivo. Estrelas em página de categoria, avaliações inventadas ou nota agregada que não corresponde às avaliações exibidas.
- Tipo errado para a página. Marcar a página de listagem inteira como um único
Product, ou um post de blog comoNewsArticlede um site que não é de notícias.
Como validar a marcação
Use três camadas de checagem:
- Validador de Schema da Nord SEO: mostra quais tipos JSON-LD e microdata foram encontrados, erros de sintaxe JSON e propriedades recomendadas ausentes em
Organization,LocalBusiness,Product,Offer,Article,BreadcrumbList,FAQPage,WebSite,EventeRecipe. É o jeito rápido de revisar várias páginas. - Teste de pesquisa aprimorada (Rich Results Test) do Google: confirma se a página é elegível para resultados ricos na visão do próprio Google e renderiza JavaScript.
- Google Search Console: os relatórios da seção de melhorias (Produtos, Breadcrumbs, Eventos etc.) mostram erros e avisos em todo o site ao longo do tempo. Depois de corrigir, use "Validar correção".
Quer ver como o snippet pode ficar na busca? Teste título e descrição no simulador de SERP.
Perguntas frequentes
Dados estruturados melhoram o ranqueamento?
Não diretamente. O Google afirma que a marcação não é um fator de ranqueamento por si só. O ganho vem de o buscador entender melhor a página e de a página ficar elegível a resultados ricos, que tendem a chamar mais atenção na SERP.
Ainda vale a pena usar FAQPage?
A marcação continua válida e não prejudica, mas desde 2023 o resultado rico de FAQ aparece só para sites governamentais e de saúde com autoridade. Para a maioria dos sites, priorize Product, BreadcrumbList, Organization e LocalBusiness.
Posso ter JSON-LD e microdata na mesma página?
Pode, mas não é recomendado descrever o mesmo item duas vezes em formatos diferentes. Se o tema gera microdata e o plugin gera JSON-LD, escolha um e desative o outro para evitar dados conflitantes.
Quanto tempo leva para os rich results aparecerem?
Depende de quando o Google rastrear a página novamente. Pode levar de alguns dias a algumas semanas. Você pode pedir a indexação da URL no Search Console, mas a exibição do resultado rico continua sendo decisão do Google.
Quer que a gente olhe o seu site?
Comece com uma verificação gratuita — depois conversamos sobre uma auditoria completa e um plano.