blog-schema

Gera marcação JSON-LD Schema.org validada para posts de blog usando o padrão @graph, combinando múltiplos tipos de schema em uma única tag script.

O que é blog-schema?

O blog-schema é uma skill especializada em SEO técnico que automatiza a criação de dados estruturados JSON-LD para posts de blog. Ela gera um script único no padrão @graph, que pode conter até sete tipos de schema: BlogPosting, Person, Organization, BreadcrumbList, FAQPage, ImageObject e VideoObject. Diferente de ferramentas genéricas, esta skill extrai dados diretamente do conteúdo do post (incluindo seções de FAQ, imagens e vídeos embutidos), valida a marcação contra tipos obsoletos (como HowTo e Q&A) e garante que todas as referências @id sejam estáveis e resolvíveis dentro do grafo. O resultado é um código limpo e pronto para ser inserido no HTML, ideal para blogs com foco em SEO e visibilidade em sistemas de IA como ChatGPT e Perplexity, pois posts com três ou mais tipos de schema têm 13% mais chances de serem citados por modelos de linguagem. A skill suporta saída em HTML embutido, JSON standalone ou componente MDX, e funciona em qualquer plataforma (Next.js, Hugo, WordPress, etc.) sem dependências externas.

Funciona com~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-schema

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

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:

  1. Todas as referências @id resolvem para entidades dentro do @graph
  2. dateModified é igual ou posterior a datePublished
  3. headline não excede 110 caracteres
  4. description está entre 50-160 caracteres
  5. Todas as URLs são absolutas (não relativas)
  6. As dimensões da imagem são números inteiros positivos
  7. As posições do BreadcrumbList são sequenciais, começando em 1
  8. 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.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Habilidades Relacionadas