CommunityEscrita e Ediçãogithub.com

shaul1991/structured-data

Criação e verificação de dados estruturados JSON-LD: Event (com status de cancelamento/adiamento), Organization + sameAs (canais relacionados do Naver), WebSite (nome do site do Google), BreadcrumbList, ItemList. Inclui diferenças de suporte entre Google e Naver.

O que é structured-data?

Este skill fornece modelos de dados estruturados JSON-LD alinhados com a documentação do Google Search Central e do Naver Search Advisor (verificada em 04/11/2026). Ele cobre os principais tipos de esquema (Event, Organization, WebSite, BreadcrumbList, ItemList) e explica as diferenças críticas de suporte entre Google e Naver, especialmente para o tipo Event, que atualmente não possui suporte oficial para rich results na Coreia do Sul no Google. O skill enfatiza a importância de usar valores que correspondam exatamente ao texto visível na página, não inventar informações e validar os dados com ferramentas como o Google Rich Results Test e o Schema Markup Validator. Ele também orienta sobre como lidar com mudanças de status de eventos (cancelado, adiado, reagendado) e fornece exemplos práticos de código JSON-LD para cada tipo de esquema, incluindo a inclusão de canais relacionados (sameAs) para o Naver. Projetado para ser usado com agentes de IA como Claude Code, Cursor e Codex, este skill garante que os dados estruturados sejam implementados de acordo com as melhores práticas e requisitos específicos de cada mecanismo de busca.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/shaul1991/seo-skills/tree/HEAD/skills/structured-data

Installed? Explore more Escrita e Edição skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Perguntar na sua IA favorita

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

Documentação

Dados Estruturados (JSON-LD)

Base: Documentação de dados estruturados do Google Search Central e Guia de Dados Estruturados do Naver Search Advisor (verificado em 04/11/2026). Se o julgamento for importante, reabra os documentos originais.

Princípios Comuns

  • Insira apenas valores que correspondam ao texto visível no corpo da página. Preços, horários, estoques ou avaliações desconhecidos devem ser deixados em branco e não criados (a documentação de funcionalidades de IA do Google também recomenda "dados estruturados correspondentes ao texto visível").
  • A marcação não garante rich results ou exibição (tanto Google quanto Naver deixam isso claro).
  • O formato padrão é JSON-LD (Google suporta; Naver recomenda Microdata ou JSON-LD). Use <script type="application/ld+json"> dentro de <head> ou <body>.
  • Validação: Rich Results Test do Google, Schema Markup Validator (o guia do Naver orienta o uso de ferramentas schema.org), e o script scripts/seo-check.mjs do skill seo-orchestrator (verifica apenas parsing JSON e atributos obrigatórios).

Diferenças de Suporte (04/11/2026)

TipoGoogleNaver
EventDocumentação de ambiente de busca de eventos existe. ⚠️ A lista de regiões atendidas não inclui a Coreia do Sul (Austrália, Brasil, Canadá, Alemanha, Índia, América Latina, Espanha, Reino Unido, EUA)Sem guia
Organization/Person + sameAsInformações da organizaçãoCanais relacionados do site (página raiz, name·url·sameAs obrigatórios)
WebSiteNome do site (página inicial)—
BreadcrumbListSuportadoSuportado (name obrigatório, position opcional)
ItemList (carrossel)Apenas alguns tiposGuia de carrossel (ListItem) disponível

Para sites de eventos voltados ao público coreano: A marcação Event pode ser mantida para organização de dados precisos e expansão futura para outras regiões, mas não assuma que o Google na Coreia do Sul atualmente exibe rich results de eventos. Avalie o desempenho pelos resultados de busca comuns (título, snippet) e Search Console.

Event (baseado no Google)

Regras (Google Dados estruturados de eventos):

  • Para cada evento, faça a marcação em uma URL única (página de detalhes). Não em páginas de listagem ou calendário com vários eventos.
  • Obrigatório: name (título do evento. Proibido nomes de locais, preços ou frases promocionais como "Compre agora"), startDate (ISO-8601), location (Place + name + address).
  • Recomendado: endDate, eventStatus, description (conteúdo do evento sem repetir data/local), image (largura recomendada de 1.920px, mínimo 720px, proporções 16:9·4:3·1:1, várias imagens), offers, organizer, performer, previousStartDate.
  • Data: Se a hora for desconhecida, use apenas a data ("2026-12-04"). Não preencha com T00:00:00. Se a hora for conhecida, inclua o offset UTC (2026-12-04T10:00:00+09:00).
  • Eventos com vários dias: use startDate e endDate. Se cada dia exigir ingresso separado, crie um Event para cada data.
  • Eventos simultâneos em vários locais: crie um Event por local.
  • Entrada gratuita apenas se oficialmente confirmada: use offers.price: 0. Se a venda ainda não começou, availability pode ser omitido; validFrom indica o início da venda.
  • Ao alterar o status, mantenha os outros valores e altere apenas eventStatus:
    • Cancelado: EventCancelled (não remova startDate·location)
    • Adiado com data indefinida: EventPostponed (mantenha o startDate original)
    • Nova data confirmada: EventRescheduled + novo startDate/endDate + previousStartDate (opcional)
  • Não marque como Event itens que não são eventos (cupons, horário de funcionamento, liquidações). Eventos exclusivos para membros ou por convite não são elegíveis para o ambiente de eventos.
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "<Nome oficial do evento e edição>",
  "startDate": "<YYYY-MM-DD ou YYYY-MM-DDThh:mm:ss+09:00>",
  "endDate": "<YYYY-MM-DD>",
  "eventStatus": "https://schema.org/EventScheduled",
  "location": {
    "@type": "Place",
    "name": "<Nome do local>",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "<Endereço com nome da rua>",
      "addressLocality": "<Cidade·Distrito>",
      "addressRegion": "<Estado·Província>",
      "postalCode": "<CEP>",
      "addressCountry": "KR"
    }
  },
  "image": ["<https://.../16x9.jpg>", "<https://.../4x3.jpg>", "<https://.../1x1.jpg>"],
  "description": "<Resumo do conteúdo do evento. Não repita data/local>",
  "organizer": { "@type": "Organization", "name": "<Organizador>", "url": "<URL oficial do organizador>" }
}
</script>

Adicione offers apenas se preço e informações de venda forem oficialmente confirmados.

Páginas de Listagem

  • Páginas de listagem por região ou mês não devem conter vários Events (o Google suporta apenas páginas de evento único). Em vez disso, use BreadcrumbList e, se necessário, ItemList com URLs de detalhes.
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "url": "https://example.com/events/<id-1>" },
    { "@type": "ListItem", "position": 2, "url": "https://example.com/events/<id-2>" }
  ]
}
</script>

WebSite (Nome do site do Google, apenas página inicial)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "<Nome do site>",
  "alternateName": ["<Abreviação>"],
  "url": "https://example.com/"
}
</script>

Use o mesmo nome de og:site_name e <title> da página inicial. Fonte: Nomes de sites

Organization + sameAs (Canais relacionados do site Naver, página raiz)

Domínios de canais relacionados que o Naver usa para análise (04/11/2026): Naver Blog·SmartStore·Knowledge iN·Chzzk·Clip, Daangn·Threads·Instagram·YouTube·KakaoStory·KakaoTalk Channel·Tistory·TikTok·Facebook·X(Twitter). A exibição não é garantida.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "<Nome do site>",
  "url": "https://example.com/",
  "sameAs": [
    "https://cafe.naver.com/<cafe>",
    "https://pf.kakao.com/<canal>",
    "https://x.com/<conta>"
  ]
}
</script>
  • Inclua apenas canais realmente em operação. Não adicione URLs de canais que ainda serão criados.
  • Daum usa o mesmo formato (Person/Organization + sameAs) com domínios suportados diferentes: YouTube, Facebook, X, Instagram, Google Play, Apple Store, KakaoStory, Daum Cafe, KakaoTV, Tistory, Brunch (daum-search). Você pode colocar canais reais de ambos os mecanismos de busca em um único bloco.
  • O Naver Cafe não está explicitamente na lista de canais relacionados acima (04/11/2026). Pode ser incluído, mas não assuma que o Naver o usará como canal relacionado.
  • Fonte: Canais relacionados do site

BreadcrumbList (Comum Google·Naver)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "<Nome da categoria superior>", "item": "https://example.com/<superior>" },
    { "@type": "ListItem", "position": 2, "name": "<Nome da categoria inferior>", "item": "https://example.com/<superior>/<inferior>" }
  ]
}
</script>
  • Naver: Use nomes que descrevam a página em vez de termos genéricos como "Home" ou "top", ordem do mais amplo ao mais específico, evite nomes muito longos ou compostos apenas por números e caracteres especiais.
  • Fonte: Naver BreadcrumbList, Google Breadcrumb

Individual skills in this repo

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

Habilidades Relacionadas