Blog Schema -- Geração de Dados Estruturados JSON-LD
Gera marcação de esquema JSON-LD completa e validada para posts de blog usando o padrão @graph. Combina múltiplos tipos de esquema em uma única tag script com referências @id estáveis para vinculação de entidades.
Fluxo de Trabalho
Passo 1: Ler Conteúdo
Leia o post do blog e extraia todos os dados relevantes para o esquema:
- Título (headline)
- Autor (nome, cargo, links sociais, credenciais)
- Datas (datePublished, dateModified / lastUpdated)
- Descrição (meta description)
- Seção de FAQ (pares de pergunta e resposta)
- Imagens (URL da imagem principal, dimensões, texto alternativo; imagens inline)
- Informações da organização (nome do site, URL, logotipo)
- Contagem de palavras (aproximada a partir do comprimento do conteúdo)
- Tags/categorias (para a categoria BreadcrumbList)
- Slug (a partir do nome do arquivo ou frontmatter)
Passo 2: Gerar Esquema BlogPosting
BlogPosting completo com todas as propriedades obrigatórias e recomendadas:
{
"@type": "BlogPosting",
"@id": "{siteUrl}/blog/{slug}#article",
"headline": "Título do post (máx. 110 caracteres)",
"description": "Meta descrição (150-160 caracteres)",
"datePublished": "YYYY-MM-DD",
"dateModified": "YYYY-MM-DD",
"author": { "@id": "{siteUrl}/autor/{slug-do-autor}#person" },
"publisher": { "@id": "{siteUrl}#organization" },
"image": { "@id": "{siteUrl}/blog/{slug}#primaryimage" },
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "{siteUrl}/blog/{slug}"
},
"wordCount": 2400,
"articleBody": "Primeiros 200 caracteres do conteúdo como trecho..."
}
Propriedades obrigatórias: @type, headline, datePublished, author, publisher, image. Propriedades recomendadas: description, dateModified, mainEntityOfPage, wordCount, articleBody (trecho).
Passo 3: Gerar Esquema Person
Esquema do autor com @id estável para referência cruzada:
{
"@type": "Person",
"@id": "{siteUrl}/autor/{slug-do-autor}#person",
"name": "Nome do Autor",
"jobTitle": "Cargo ou Título",
"url": "{siteUrl}/autor/{slug-do-autor}",
"sameAs": [
"https://twitter.com/usuario",
"https://linkedin.com/in/usuario",
"https://github.com/usuario"
]
}
Propriedades opcionais (incluir quando disponíveis):
alumniOf- Instituição de ensino (tipo Organization)worksFor- Empregador (referência ao @id da Organization se for a mesma entidade)
Passo 4: Gerar Esquema Organization
Entidade da organização mãe do blog:
{
"@type": "Organization",
"@id": "{siteUrl}#organization",
"name": "Nome da Organização",
"url": "{siteUrl}",
"logo": {
"@type": "ImageObject",
"url": "{siteUrl}/logo.png",
"width": 600,
"height": 60
},
"sameAs": [
"https://twitter.com/org",
"https://linkedin.com/company/org",
"https://github.com/org"
]
}
Requisitos do logotipo: deve ser uma URL de imagem válida. O Google recomenda que os logotipos tenham no mínimo 112x112px e no máximo 600px de largura. Logotipos retangulares são preferidos para publicadores de BlogPosting.
Passo 5: Gerar BreadcrumbList
Esquema de navegação por trilha mostrando a hierarquia do conteúdo:
{
"@type": "BreadcrumbList",
"@id": "{siteUrl}/blog/{slug}#breadcrumb",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Início",
"item": "{siteUrl}"
},
{
"@type": "ListItem",
"position": 2,
"name": "Nome da Categoria",
"item": "{siteUrl}/blog/categoria/{slug-da-categoria}"
},
{
"@type": "ListItem",
"position": 3,
"name": "Título do Post",
"item": "{siteUrl}/blog/{slug}"
}
]
}
Se nenhuma categoria estiver disponível, use "Blog" como o segundo item da trilha com
{siteUrl}/blog como URL.
Passo 6: Gerar Esquema FAQPage
Extraia pares de Q&A da seção de FAQ do post do blog:
{
"@type": "FAQPage",
"@id": "{siteUrl}/blog/{slug}#faq",
"mainEntity": [
{
"@type": "Question",
"name": "Qual é a pergunta?",
"acceptedAnswer": {
"@type": "Answer",
"text": "O texto completo da resposta (40-60 palavras com estatística)."
}
}
]
}
Nota importante: O Google restringiu os resultados ricos de FAQ a sites governamentais e de saúde desde agosto de 2023. No entanto, a marcação de esquema FAQ ainda oferece valor porque:
- Sistemas de IA (ChatGPT, Perplexity, Gemini) extraem dados de FAQ para citações
- Estrutura o conteúdo para futuras mudanças de elegibilidade de resultados ricos
- Melhora os sinais de organização do conteúdo
Passo 7: Gerar VideoObject (se houver vídeos)
Para cada vídeo do YouTube incorporado no post, gere um esquema VideoObject:
{
"@type": "VideoObject",
"@id": "{siteUrl}/blog/{slug}#video-{indice}",
"name": "Título do vídeo",
"description": "Trecho da descrição do vídeo (primeiros 200 caracteres)",
"thumbnailUrl": "https://img.youtube.com/vi/{videoId}/hqdefault.jpg",
"uploadDate": "{data ISO 8601}",
"contentUrl": "https://www.youtube.com/watch?v={videoId}",
"embedUrl": "https://www.youtube.com/embed/{videoId}",
"duration": "PT{M}M{S}S",
"interactionStatistic": {
"@type": "InteractionCounter",
"interactionType": { "@type": "WatchAction" },
"userInteractionCount": {viewCount}
}
}
Adicione cada VideoObject ao array @graph. Use #video-1, #video-2 etc. para
o fragmento @id. Extraia os metadados do vídeo do fallback noscript da incorporação ou
da API de Dados do YouTube, se disponível via blog-google.
Passo 7.5: Gerar ImageObject
Esquema da imagem principal do post:
{
"@type": "ImageObject",
"@id": "{siteUrl}/blog/{slug}#primaryimage",
"url": "https://cdn.pixabay.com/photo/.../image.jpg",
"width": 1200,
"height": 630,
"caption": "Legenda descritiva correspondente ao texto alternativo"
}
Requisitos da imagem:
- A URL deve ser rastreável e publicamente acessível
- Largura e altura devem refletir as dimensões reais da imagem
- A legenda deve corresponder ou estar alinhada com o texto alternativo da imagem
- Dimensões preferidas: 1200x630 (compatível com OG) ou 1920x1080
Passo 8: Validar e Avisar
Verifique tipos de esquema obsoletos e aplique regras de validação:
NUNCA use estes tipos obsoletos:
- HowTo - Obsoleto desde setembro de 2023 (Google não mostra mais resultados ricos)
- SpecialAnnouncement - Obsoleto desde julho de 2025
- Practice Problem - Obsoleto (marcação educacional)
- Dataset - Obsoleto para uso geral
- Sitelinks Search Box - Obsoleto
- Q&A - Obsoleto desde janeiro de 2026 (distinto de FAQPage)
Verificações de validação:
- Todas as referências @id resolvem para entidades dentro do @graph
- dateModified é igual ou posterior a datePublished
- headline não excede 110 caracteres
- description está entre 50-160 caracteres
- Todas as URLs são absolutas (não relativas)
- As dimensões da imagem são números inteiros positivos
- As posições do BreadcrumbList são sequenciais, começando em 1
- FAQPage tem pelo menos 2 perguntas
Nota de otimização para citação por IA: Páginas que usam 3 ou mais tipos de esquema têm aproximadamente 13% mais chances de serem citadas por IA. Esta skill gera até 7 tipos (BlogPosting, Person, Organization, BreadcrumbList, FAQPage, ImageObject, VideoObject) para maximizar tanto a compreensão dos mecanismos de busca quanto a extração por IA.
Passo 9: Saída
Combine todos os esquemas em uma única tag <script> usando o padrão @graph:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{ "@type": "BlogPosting", ... },
{ "@type": "Person", ... },
{ "@type": "Organization", ... },
{ "@type": "BreadcrumbList", ... },
{ "@type": "FAQPage", ... },
{ "@type": "VideoObject", ... },
{ "@type": "ImageObject", ... }
]
}
</script>
Benefícios do padrão @graph:
- Tag script única em vez de múltiplas — HTML mais limpo
- Vinculação de entidades via referências @id estáveis (ex.: autor referencia Person por @id)
- Google e sistemas de IA analisam arrays @graph corretamente
- Mais fácil de manter e atualizar como um bloco único
Opções de saída:
- HTML embutido - Pronto para colar no
<head>ou antes de</body> - JSON standalone - Para campos de esquema CMS ou injeção via API
- Componente MDX - Se o projeto usar MDX, envolva em um componente
Salve o esquema gerado no arquivo do post do blog ou em um arquivo de esquema separado, conforme a preferência do usuário.