Schema.org Product em JSON-LD: guia e-commerce 2026
O JSON-LD Product ativa rich results no Google: estrelas, preço e stock. Eis a implementação completa em 2026 e os erros a evitar.

Schema.org Product em JSON-LD: guia e-commerce 2026
Já viu aqueles resultados no Google em que uma ficha de produto mostra logo as estrelas, o preço e "Em stock" por baixo do título? Isso é um rich result, e é isso que um schema.org Product bem implementado ativa. Os sites que beneficiam disso veem o CTR subir entre 15 e 40% na mesma posição, face a um resultado sem rich result.
Em 2026, a implementação via JSON-LD é o método oficial e recomendado pela Google. Aqui está a versão completa, testável e pronta para produção.
Porque usar JSON-LD e não Microdata ou RDFa
Há três formatos para adicionar schema.org a uma página web: Microdata (diretamente no HTML), RDFa (atributos HTML5) e JSON-LD (bloco de dados estruturados separado).
A Google recomenda JSON-LD desde 2015, e em 2026 tornou-se o padrão de facto. Razões:
- Separação entre dados e apresentação: o JSON-LD fica num
<script type="application/ld+json">no<head>, independentemente do HTML visível - Mais simples de gerar: um único bloco JSON por página, fácil de manter
- Sem conflito com o seu tema: não é preciso alterar a estrutura HTML dos templates
- Melhor compatibilidade com frameworks modernos (Next.js, Nuxt, etc.)
O Microdata continua a ser lido pela Google, mas já não é recomendado para novas implementações.
Os 7 campos obrigatórios (ou recomendados) para um Product
Eis um JSON-LD Product mínimo que passa nos testes da Google e ativa os rich results:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Sapato Derby em couro para homem",
"description": "Sapato Derby em couro italiano, acabamento manual, disponível do 38 ao 46.",
"image": [
"https://example.com/products/derby-01.jpg",
"https://example.com/products/derby-02.jpg",
"https://example.com/products/derby-03.jpg"
],
"sku": "DERBY-BLK-44",
"brand": {
"@type": "Brand",
"name": "Atelier Maison"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/products/derby-cuir-homme",
"priceCurrency": "EUR",
"price": "149.00",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "38"
}
}
Decomposição:
@contexte@type— declaram que estamos a falar de um Product schema.orgname— o nome do produto (≤100 car. recomendado)description— descrição curta (150-300 car.)image— array de URLs de imagens (mínimo 1, idealmente 3-6 em alta resolução)sku— identificador único do produto (obrigatório para rich results)brand— marca do produtooffers— estrutura de preço e disponibilidade (crítica)aggregateRating— classificação média se tiver reviews (ativa as estrelas nas SERP)
Offer e AggregateRating: os detalhes críticos
Offer
A parte mais sensível. Quatro regras a respeitar:
priceCurrency em ISO 4217: "EUR", "USD", "GBP"… não "€", "$" ou "£". Erro frequente que faz falhar o rich result.
price em string, não em número: "149.00" e não 149.00. A Google aceita ambos em 2026, mas as guidelines recomendam string.
availability em URL schema.org completa:
https://schema.org/InStock→ em stockhttps://schema.org/OutOfStock→ esgotadohttps://schema.org/PreOrder→ pré-encomendahttps://schema.org/BackOrder→ encomenda especial com prazo
priceValidUntil (opcional mas recomendado): data de fim de validade do preço no formato ISO 8601 ("2026-12-31"). A Google valoriza isto para detetar preços desatualizados.
AggregateRating
Ativa as estrelas nas SERP. Requisitos:
ratingValueentre 1 e 5reviewCount: mínimo 1, mas a Google recomenda 3+ para mostrar- As reviews correspondentes têm de estar visíveis na página — falsear o AggregateRating com reviews inexistentes pode levar a penalização manual
Dica: se tiver poucas reviews, mostre-as na página com um widget (Yotpo, Judge.me, Trustpilot) e obtenha o count + rating médio a partir da respetiva API para o JSON-LD.
Testar com Rich Results Test
Antes de colocar em produção, teste cada template de página de produto com o Rich Results Test da Google.
Verifica:
- Sintaxe JSON válida
- Todos os campos obrigatórios presentes
- Valores nos formatos esperados (URLs, datas, moedas)
- Elegibilidade para rich results
Erros frequentes detetados:
"availability" expected schema.org URL→ colocou "In stock" em vez da URL schema.org"priceCurrency" invalid→ moeda fora de ISO 4217Missing field "sku"→ falta SKU na OfferMultiple products in single offer→ tentou colocar vários produtos num único bloco JSON-LD
Depois de o teste passar, a Google Search Console mostra desempenho e erros ao longo de 2-4 semanas em Enhancements → Products.
Implementação por plataforma
Shopify
Desde 2023, a Shopify gera automaticamente um schema Product nas páginas de produto se usar um tema oficial. Problema: o schema por defeito é muitas vezes incompleto (sem AggregateRating, sem brand).
Para um schema completo:
- Edite o seu tema: Online Store → Themes → Edit code
- Abra
snippets/product-structured-data.liquidousections/main-product.liquid - Adicione os campos em falta ou substitua por um template personalizado
Alternativa: instale uma app como SEO JSON-LD Schema ou Smart SEO, que gere o schema em todo o catálogo de forma autónoma.
WooCommerce
O WooCommerce também gera um schema por defeito desde a v5+, mas incompleto. Plugins recomendados para completar:
- RankMath (free): gere schema Product com Offer e AggregateRating
- Yoast WooCommerce SEO (paid): enriquece o schema por defeito do Yoast
- WP SEO Structured Data Schema: mais granularidade se quiser personalizar por template
Next.js / headless
Se estiver num frontend personalizado, injeta o JSON-LD no <head> através de um componente SSR:
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(productSchema)
}}
/>
Atenção: gerar o JSON-LD do lado do cliente (via useEffect) não funciona para SEO — a Google faz o scrape em server-render. Garanta que o JSON-LD está mesmo no HTML inicial devolvido pelo servidor.
Erros típicos a evitar
Contradições entre a página visível e o JSON-LD. Se a página mostra "Em stock" mas o JSON-LD diz OutOfStock, a Google ignora o JSON-LD. Sincronize ambos com a mesma fonte de dados.
Preço diferente no JSON-LD e na página. Mesma lógica: a Google deteta a divergência e ignora o rich result.
Vários Product no mesmo <script>. Apenas um @type: Product por script. Se tiver variantes, use @type: ProductGroup com hasVariant: [...] para as ligar.
Imagens inacessíveis. As URLs das imagens têm de ser públicas (não atrás de login). Teste cada URL com curl para confirmar que devolve um 200.
AggregateRating inventado. Colocar 4.9 estrelas numa ficha sem reviews visíveis pode levar a penalização manual, com risco real.
E as variantes?
Se o seu produto tiver vários tamanhos ou cores, há 2 abordagens:
Abordagem 1: um único schema Product (o pai)
Mais simples, adequada a 90% dos casos. O schema pai descreve o produto genérico, e a página gere as variantes através do seletor. O preço mostrado é o preço por defeito, a availability é InStock se pelo menos uma variante estiver disponível.
Abordagem 2: ProductGroup com hasVariant
Mais precisa, mas mais complexa. Recomendada se as variantes tiverem preços muito diferentes ou disponibilidades divergentes (esgotado no tamanho 44 mas não no 42). A Google suporta ProductGroup desde 2022.
FAQ
Quanto tempo demora até os rich results aparecerem no Google?
Entre 1 e 4 semanas após a publicação do schema correto. A Google tem de voltar a rastrear a página e ativar a elegibilidade do lado do algoritmo. Pode acelerar o processo ao submeter a URL em Search Console → URL Inspection → Request Indexing.
O schema.org Product ajuda a ficha a posicionar-se?
Não diretamente. O schema não é um sinal de ranking. Ativa os rich results (estrelas, preço, disponibilidade nas SERP), que aumentam o CTR, o que pode melhorar o ranking indiretamente através do sinal de engagement.
É preciso incluir as reviews completas no JSON-LD, e não apenas o agregado?
Opcional. Adicionar Review individuais no JSON-LD pode ativar mais rich features, mas torna o código mais pesado. Em catálogos com mais de 5 000 fichas, o AggregateRating por si só é mais do que suficiente.
O schema é penalizado se a minha ficha for gerada por IA?
Não. A Google não penaliza a origem do conteúdo, penaliza a qualidade. Um JSON-LD correto numa ficha de IA com qualidade beneficia dos rich results como qualquer outra ficha.
O meu JSON-LD deve estar no <head> ou no <body>?
Ambos funcionam, mas <head> é a boa prática. Coloque o JSON-LD imediatamente antes da tag de fecho </head> para garantir que é lido cedo pelos crawlers.
Os rich results também aparecem no Bing e no DuckDuckGo?
No Bing, sim, com um atraso maior (por vezes 2-3 meses). O DuckDuckGo usa o Bing como backend, por isso sim, indiretamente. Ambos usam o mesmo padrão schema.org, não é preciso adaptar.
No Ecomptimize, o JSON-LD Product é gerado automaticamente a partir dos dados do seu catálogo Shopify ou WooCommerce. Veja a página Shopify ou WooCommerce.
Gostaste deste artigo?