DEV Community

Alexandre Caramaschi
Alexandre Caramaschi

Posted on • Originally published at alexandrecaramaschi.com

Como Implementei 30 Tipos de Schema JSON-LD e llms.txt Para Ser Citado por ChatGPT, Gemini e Claude

Como Implementei 30 Tipos de Schema JSON-LD e llms.txt Para Ser Citado por ChatGPT, Gemini e Claude

Quando decidi que meu site precisava ser entendido por IAs, não apenas por humanos, percebi que estava diante de um problema que quase ninguém estava resolvendo. A maioria dos desenvolvedores ainda otimiza exclusivamente para o Google. Mas o tráfego de respostas geradas por IA — ChatGPT, Gemini, Perplexity, Claude — já é uma realidade. E essas engines não leem seu site da mesma forma que o Googlebot.

Eu precisava de duas coisas: uma carteira de identidade estruturada que qualquer máquina pudesse interpretar (Schema JSON-LD) e um currículo legível que eu entregaria diretamente para os LLMs (llms.txt). Este artigo documenta exatamente como implementei ambos nos projetos alexandrecaramaschi.com e brasilgeo.ai, com código real e resultados verificáveis.

O Que é Schema JSON-LD (e Por Que IAs Precisam Disso)

Pense no Schema JSON-LD como a carteira de identidade da sua página na web. Quando você conhece alguém, a pessoa diz o nome, onde trabalha, o que faz. O JSON-LD faz exatamente isso, só que para máquinas.

É um bloco de dados estruturados em formato JSON que você insere no <head> da sua página. Ele não aparece visualmente para o usuário — é invisível. Mas para crawlers de busca e pipelines RAG (Retrieval-Augmented Generation) que alimentam LLMs, é ouro puro.

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "name": "Brasil GEO",
      "url": "https://brasilgeo.ai",
      "founder": {
        "@type": "Person",
        "name": "Alexandre Caramaschi",
        "jobTitle": "CEO"
      }
    },
    {
      "@type": "WebSite",
      "name": "Alexandre Caramaschi",
      "url": "https://alexandrecaramaschi.com"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

O segredo está no @graph: em vez de ter múltiplos scripts JSON-LD espalhados pela página, eu consolido tudo em um grafo único. Isso facilita a interpretação tanto por motores de busca tradicionais quanto por sistemas de IA que montam contexto para geração de respostas.

Os 30 Tipos de Schema Que Implementei

No alexandrecaramaschi.com — construído com Next.js 16 + React 19, com 41 artigos publicados — implementei 30 tipos de Schema.org organizados em um único @graph. Aqui está a lista completa com a função de cada um:

Identidade e Entidade Principal

  • Organization — Define a Brasil GEO como entidade com sameAs para Wikidata (Q138755989)
  • Person — Alexandre Caramaschi com credenciais, vínculos e Wikidata (Q138755507)
  • WebSite — Metadados do site, SearchAction para busca interna
  • ProfilePage — Página "Sobre" como perfil canônico da entidade

Conteúdo Editorial

  • Article — Cada um dos 41 artigos com autor, data, imagem
  • BlogPosting — Posts do blog com datePublished e dateModified
  • TechArticle — Artigos técnicos com proficiencyLevel
  • NewsArticle — Conteúdo com caráter noticioso
  • HowTo — Guias passo a passo com steps estruturados
  • FAQPage — Perguntas frequentes com mainEntity em array

Educação e Cursos

  • Course — Cursos sobre GEO com provider e hasCourseInstance
  • CourseInstance — Instâncias específicas com datas e modalidade
  • EducationalOrganization — Brasil GEO como provedora educacional
  • LearningResource — Recursos educacionais complementares

Mídia

  • VideoObject — Vídeos com thumbnailUrl, duration, uploadDate
  • ImageObject — Imagens estruturadas com contentUrl e caption
  • MediaObject — Objetos de mídia genéricos

Navegação e Estrutura

  • BreadcrumbList — Trilha de navegação hierárquica em cada página
  • SiteNavigationElement — Menu principal estruturado
  • ItemList — Listas ordenadas de conteúdo (ex: top artigos)
  • CollectionPage — Páginas de coleção (categorias, tags)

Eventos e Interação

  • Event — Webinars, palestras e workshops
  • Review — Avaliações estruturadas de serviços
  • ContactPoint — Canais de contato com tipo e idioma

SEO Avançado e IA

  • Service — Serviços oferecidos pela Brasil GEO
  • Offer — Ofertas vinculadas a cursos e serviços
  • AggregateRating — Avaliação agregada de serviços
  • SpeakableSpecification — Trechos otimizados para leitura por voz
  • ClaimReview — Verificação de afirmações (fact-checking)
  • DefinedTerm — Termos do glossário GEO com definição formal

O Que é llms.txt (O Currículo Para IAs)

Se o Schema JSON-LD é a carteira de identidade, o llms.txt é o currículo que você entrega diretamente para a IA. É um arquivo em texto simples, hospedado na raiz do seu domínio (/llms.txt), que resume toda a estrutura do seu site em formato que LLMs conseguem consumir eficientemente.

Enquanto o robots.txt diz ao crawler o que ele pode acessar, o llms.txt diz ao LLM o que ele deveria ler e como seu conteúdo está organizado.

No brasilgeo.ai — construído com Cloudflare Workers e 28 artigos HTML — mantenho dois arquivos:

  • llms.txt — 258 linhas, 23KB — mapa conciso com links e descrições
  • llms-full.txt — 42KB — conteúdo expandido para LLMs com janela de contexto grande

A estrutura segue um formato markdown simplificado:

# Brasil GEO

> Consultoria especializada em Generative Engine Optimization (GEO).
> Ajudamos empresas a ganhar visibilidade em ChatGPT, Gemini,
> Perplexity e outros motores de IA generativa.

## Artigos

- [O Guia Completo de GEO](https://brasilgeo.ai/artigos/guia-completo-geo): Estratégias para otimizar conteúdo para motores de IA generativa.
- [Schema JSON-LD para IA](https://brasilgeo.ai/artigos/schema-jsonld-ia): Como estruturar dados para visibilidade em LLMs.

## Cursos

- [Fundamentos de GEO](https://brasilgeo.ai/cursos/fundamentos-geo): Curso introdutório sobre Generative Engine Optimization.

## Repositórios Open-Source

- [geo-checklist](https://github.com/alexandrebrt14-sys/geo-checklist): Checklist completo de GEO com 80+ itens verificáveis.
- [llms-txt-templates](https://github.com/alexandrebrt14-sys/llms-txt-templates): Templates reutilizáveis para llms.txt.
- [entity-consistency-playbook](https://github.com/alexandrebrt14-sys/entity-consistency-playbook): Playbook para consistência de entidades em GEO.
Enter fullscreen mode Exit fullscreen mode

Implementação Prática no Next.js

No alexandrecaramaschi.com, criei um componente JsonLd.tsx que renderiza o grafo completo no <head> via layout.tsx. Aqui está a versão simplificada:

// components/JsonLd.tsx
interface JsonLdProps {
  graph: Record<string, unknown>[];
}

export function JsonLd({ graph }: JsonLdProps) {
  const jsonLd = {
    "@context": "https://schema.org",
    "@graph": graph,
  };

  return (
    <script
      type="application/ld+json"
      dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
    />
  );
}
Enter fullscreen mode Exit fullscreen mode

No layout.tsx, o componente recebe o grafo montado dinamicamente com base na rota:

// app/layout.tsx
import { JsonLd } from "@/components/JsonLd";
import { buildGraph } from "@/lib/schema";

export default function RootLayout({ children }) {
  const graph = buildGraph(); // monta Organization, Person, WebSite

  return (
    <html lang="pt-BR">
      <head>
        <JsonLd graph={graph} />
      </head>
      <body>{children}</body>
    </html>
  );
}
Enter fullscreen mode Exit fullscreen mode

Cada página de artigo adiciona seus próprios tipos ao grafo (Article, BreadcrumbList, FAQPage), e o componente consolida tudo em um único <script type="application/ld+json">.

Implementação no Cloudflare Workers

No brasilgeo.ai, o llms.txt e o llms-full.txt são servidos diretamente pelo Cloudflare Worker. A lógica é simples:

// worker.js
async function handleRequest(request) {
  const url = new URL(request.url);

  if (url.pathname === "/llms.txt") {
    return new Response(LLMS_TXT_CONTENT, {
      headers: {
        "Content-Type": "text/plain; charset=utf-8",
        "Cache-Control": "public, max-age=86400",
      },
    });
  }

  if (url.pathname === "/llms-full.txt") {
    return new Response(LLMS_FULL_TXT_CONTENT, {
      headers: {
        "Content-Type": "text/plain; charset=utf-8",
        "Cache-Control": "public, max-age=86400",
      },
    });
  }

  // ... demais rotas
}
Enter fullscreen mode Exit fullscreen mode

O cache de 24 horas (max-age=86400) garante performance sem sacrificar a atualização do conteúdo.

Resultados Verificáveis

Implementar Schema JSON-LD e llms.txt não é um exercício teórico. Aqui estão os resultados concretos:

  • Entity consistency score validado automaticamente pelo lint-content.js com 44+ checks por execução — verifica se nomes, credenciais e vínculos estão consistentes em todo o conteúdo
  • Presença no Wikidata — Person (Q138755507) e Organization (Q138755989) vinculados via sameAs no Schema, criando uma âncora de entidade que LLMs reconhecem
  • 6 repositórios open-source no GitHub referenciados no llms.txt, criando sinais de autoridade distribuídos: geo-checklist, llms-txt-templates, entity-consistency-playbook, geo-taxonomy, geo-orchestrator e landing-page-geo
  • Pipeline multi-LLM com o geo-orchestrator usando 5 LLMs (Perplexity para pesquisa, GPT-4o para redação, Gemini para análise, Groq para classificação, Claude para revisão) — garantindo que o conteúdo produzido já nasce otimizado para múltiplos motores
  • Crosslinks estruturados entre os 41 artigos do alexandrecaramaschi.com e os 28 do brasilgeo.ai, com referências mútuas que reforçam a topical authority

Guia Passo a Passo Para Começar Hoje

Se você quer implementar Schema JSON-LD e llms.txt no seu projeto, siga estes 5 passos:

1. Defina sua entidade principal

Crie um Schema Organization ou Person com name, url, description e sameAs (LinkedIn, GitHub, Wikidata). Essa é a fundação de tudo.

2. Implemente o @graph único

Em vez de múltiplos <script type="application/ld+json">, consolide tudo em um @graph. Isso evita conflitos e facilita a manutenção.

3. Adicione tipos por página

Cada página deve ter seus tipos específicos: Article para posts, FAQPage para FAQs, Course para cursos. Use o Schema.org Validator para verificar.

4. Crie seu llms.txt

Comece com a estrutura básica: título, descrição em blockquote, seções com links. Use o template do repositório llms-txt-templates como ponto de partida.

5. Automatize a validação

Implemente um script de lint que verifique a consistência das entidades. O entity-consistency-playbook tem um guia completo de como fazer isso.

Conclusão

Schema JSON-LD e llms.txt não são tendências passageiras — são a infraestrutura de visibilidade para a era da IA generativa. Se o seu site não tem dados estruturados que LLMs consigam interpretar, você está invisível para uma parcela crescente do tráfego digital.

Comecei com um tipo de Schema. Hoje tenho 30. Comecei sem llms.txt. Hoje tenho dois arquivos que somam 65KB de contexto estruturado. Cada adição foi incremental, testável e verificável.

Se quiser um roteiro completo, o geo-checklist tem mais de 80 itens verificáveis para GEO. E o entity-consistency-playbook mostra como manter a consistência de entidades que faz diferença real na citação por IAs.


Alexandre Caramaschi é CEO da Brasil GEO, ex-CMO da Semantix (Nasdaq) e cofundador da AI Brasil. Especialista em Generative Engine Optimization, ajuda empresas a serem citadas por ChatGPT, Gemini, Perplexity e Claude.

Top comments (0)