Implementar schema de produto no e-commerce significa adicionar ao HTML de cada página de produto um bloco de dados estruturados (de preferência em JSON-LD) do tipo Product, com uma Offer que informe preço, moeda e disponibilidade. Esse código ajuda o Google a entender, sem ambiguidade, o que está à venda, por quanto e em que condição, e torna a página elegível para resultados enriquecidos com preço, estoque e avaliações.
A marcação não garante destaque na busca, já que o Google decide quando exibir cada recurso. Mas sem ela, ou com ela mal implementada, a loja fica de fora de formatos que concorrentes já ocupam. Este guia é o passo a passo técnico: o que marcar, como estruturar o JSON-LD, como lidar com variações e como validar em escala.
Snippet de produto e listagem do comerciante: dois usos do mesmo schema
A documentação do Google separa a marcação de produto em duas experiências, e entender a diferença evita marcação incompleta:
- Snippet de produto (product snippet): vale para páginas que falam de produtos, inclusive reviews e comparativos que não vendem nada. Pode exibir avaliação, faixa de preço e prós e contras.
- Listagem do comerciante (merchant listing): vale para páginas onde o usuário pode comprar o produto. Exige mais dados e pode alimentar experiências de Shopping, painéis de produto e resultados com informações de frete e devolução.
Para uma loja virtual, o alvo é a listagem do comerciante. Por isso, siga a lista de propriedades dela, que é mais exigente, e você automaticamente cobre o snippet de produto.
Propriedades obrigatórias e recomendadas
Segundo a documentação de listagem do comerciante do Google Search Central, a base é esta:
| Propriedade | Onde fica | Status | Observação prática |
|---|---|---|---|
name | Product | Obrigatória | Igual ao nome visível na página |
image | Product | Obrigatória | URLs absolutas; várias proporções ajudam |
offers | Product | Obrigatória | Use Offer, não AggregateOffer, na listagem do comerciante |
price | Offer | Obrigatória | Número sem símbolo de moeda, ponto como separador decimal |
priceCurrency | Offer | Obrigatória | BRL para real |
availability | Offer | Recomendada | Valores do schema.org, como InStock e OutOfStock |
itemCondition | Offer | Recomendada | NewCondition, UsedCondition, RefurbishedCondition |
shippingDetails | Offer | Recomendada | Custo e prazo de entrega |
hasMerchantReturnPolicy | Offer | Recomendada | Política de devolução |
brand, gtin, sku | Product | Recomendadas | Identificadores que ajudam a casar o produto com o catálogo do Google |
aggregateRating, review | Product | Recomendadas | Só com avaliações reais exibidas na página |
Uma regra vale para todas: o que está no schema precisa estar visível na página. Preço diferente, estoque desatualizado ou avaliação que o usuário não vê são motivos clássicos para o Google ignorar a marcação ou, em casos de abuso, aplicar ação manual.
Exemplo de JSON-LD de produto completo
O exemplo abaixo é hipotético (uma loja fictícia vendendo um tênis), mas segue a estrutura que o Google documenta. Ele vai dentro de uma tag <script type="application/ld+json"> no HTML da página de produto:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Tênis de Corrida Leve Pro - Azul",
"description": "Tênis de corrida com cabedal em malha respirável e entressola de espuma para treinos de média distância.",
"image": [
"https://www.lojaexemplo.com.br/img/tenis-leve-pro-azul-1x1.jpg",
"https://www.lojaexemplo.com.br/img/tenis-leve-pro-azul-4x3.jpg",
"https://www.lojaexemplo.com.br/img/tenis-leve-pro-azul-16x9.jpg"
],
"sku": "TLP-AZ-42",
"gtin13": "7890000000000",
"brand": {
"@type": "Brand",
"name": "Marca Exemplo"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "38"
},
"offers": {
"@type": "Offer",
"url": "https://www.lojaexemplo.com.br/tenis-de-corrida-leve-pro-azul",
"priceCurrency": "BRL",
"price": "399.90",
"priceValidUntil": "2026-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "BRL"
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "BR"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 2,
"maxValue": 7,
"unitCode": "DAY"
}
}
},
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "BR",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 7,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
}
}
Pontos de atenção no exemplo:
- O GTIN acima é um valor ilustrativo. Use o código real do produto ou omita o campo; GTIN inventado é pior que nenhum.
aggregateRatingsó deve existir se as avaliações estiverem publicadas na própria página e vierem de clientes reais.- Frete e devolução também podem ser declarados uma única vez, no nível da organização, em vez de repetidos em cada produto. Avalie qual opção a sua plataforma gera com mais confiabilidade.
Produtos com variações (cor, tamanho, voltagem)
Variações são o ponto em que mais lojas erram. Existem dois cenários comuns:
- Uma URL por variação (por exemplo,
/tenis-leve-pro-azule/tenis-leve-pro-preto): cada página leva umProductpróprio, com preço e estoque daquela variação. - Uma URL com seletor de variação: o Google documenta o tipo
ProductGroup, comhasVariantlistando cadaProductfilho evariesByindicando o atributo que muda (cor, tamanho etc.). O identificador comum do grupo vai emproductGroupID.
O erro mais frequente é marcar apenas a variação padrão e deixar availability como InStock mesmo quando aquele tamanho está esgotado. Se o estoque é por variação, a marcação também precisa ser. Quando o produto inteiro sai de linha, a forma de tratar a página muda; detalhamos isso no artigo sobre produto esgotado e SEO.
Implementação: renderização, templates e escala
Em uma loja com milhares de SKUs, ninguém escreve JSON-LD à mão. A marcação nasce no template de produto e puxa os campos do banco de dados. Alguns cuidados:
- Prefira o HTML inicial. A documentação de listagem do comerciante recomenda colocar os dados estruturados de produto no HTML inicial e alerta que marcação gerada por JavaScript pode tornar o rastreamento de Shopping menos frequente e menos confiável.
- Uma fonte de verdade. Preço e estoque do schema devem sair do mesmo lugar que alimenta a vitrine e o feed do Merchant Center. Divergência entre os três é uma das causas mais comuns de reprovação de itens.
- Elimine marcações duplicadas. Tema, app de avaliações e plugin de SEO podem gerar, cada um, o seu bloco
Product. Resultado: dois produtos com preços diferentes na mesma página. Escolha uma fonte e desligue as outras. - Formato numérico.
399.90, nuncaR$ 399,90. Vírgula decimal e símbolo de moeda quebram a leitura do preço. - Complemente com outros tipos.
BreadcrumbListna página de produto eOrganizationna home reforçam o contexto. O panorama de todos os tipos está no nosso guia de schema markup e dados estruturados.
Como validar e monitorar
Validar uma vez não basta, porque preço e estoque mudam todo dia. Um fluxo prático:
- Antes de publicar: teste URLs de amostra (produto simples, com variação, esgotado, em promoção) no Teste de pesquisa aprimorada do Google e corrija todos os erros críticos.
- Depois de publicar: use a Inspeção de URL do Search Console para confirmar que o Google vê a marcação na versão renderizada.
- No dia a dia: acompanhe os relatórios de aprimoramento de produtos e de listagens do comerciante no Search Console. Picos de erros costumam coincidir com troca de tema, instalação de app ou mudança no cadastro.
- Amostragem periódica: compare, em uma amostra de produtos, preço e disponibilidade do schema com o que aparece na tela e no feed.
Erros comuns que travam os resultados enriquecidos
- Avaliações marcadas sem estarem visíveis, ou copiadas de outro site.
pricecom zero para produtos “sob consulta”. Se não há preço público, não há listagem do comerciante para aquele item.priceValidUntilcom data já vencida, esquecida desde a última promoção.- Uso de
AggregateOfferna página de um único vendedor, que não atende a listagem do comerciante. - Imagens bloqueadas no robots.txt ou servidas só via JavaScript.
- Marcação de produto em páginas de categoria, apontando vários produtos como se fossem a entidade principal da página.
Perguntas frequentes
Schema de produto melhora o ranqueamento?
Dados estruturados não são, por si, um fator de ranqueamento direto. O ganho está na elegibilidade para resultados enriquecidos, que podem tornar o resultado mais informativo e atrativo no clique. Eles também reduzem a ambiguidade sobre preço e disponibilidade, o que ajuda o Google a exibir o produto nas experiências certas.
Preciso usar JSON-LD ou posso usar microdados?
O Google aceita JSON-LD, microdados e RDFa. Na prática, JSON-LD é o mais simples de manter, porque fica num bloco separado do layout e não quebra quando o tema muda. Para lojas que trocam de tema com frequência ou usam vários apps, essa separação evita muita dor de cabeça.
Posso marcar avaliações importadas de marketplaces?
O caminho seguro é marcar apenas avaliações coletadas e exibidas na própria página do produto, de clientes reais. Importar notas de terceiros sem exibi-las de forma transparente, ou selecionar só as positivas, contraria as diretrizes de dados estruturados e pode levar o Google a desconsiderar a marcação.
Schema de produto bem feito é menos sobre o código e mais sobre consistência: o mesmo preço, o mesmo estoque e as mesmas avaliações na tela, no JSON-LD e no feed. Ele é uma das peças do quadro maior descrito no nosso guia completo de SEO para e-commerce. Se você quer auditar a marcação do catálogo inteiro e corrigir templates sem quebrar a loja, conheça a nossa consultoria de SEO para e-commerce.
Fontes
- Merchant listing (Product, Offer) structured data — Google Search Central
- Product snippet structured data — Google Search Central
- Product variant structured data — Google Search Central
- Include structured data relevant to ecommerce — Google Search Central
- Teste de pesquisa aprimorada — Google
Seu schema de produto está gerando erros no Search Console? Fale com a nossa equipe e receba uma análise gratuita do seu site.