A era da busca por IA chegou. ChatGPT com busca na web, Perplexity, Google AI Overviews -- as oportunidades de os usuários obterem informações por meio de IA estão crescendo rapidamente, e a importância de "fazer a IA entender corretamente o seu site" está cada vez maior.

E ai que entra o llms.txt. Se o robots.txt e o arquivo que diz aos crawlers de mecanismos de busca como Googlebot "você pode/não pode rastrear esta página", o llms.txt e o arquivo que diz aos crawlers de IA como GPTBot e ClaudeBot "nosso site é assim".

Neste artigo, explicamos em detalhes o formato do llms.txt, quais informações incluir, os critérios para decidir entre arquivo estático e geração dinâmica, e código de implementação para os principais frameworks.

1. O Que é llms.txt

O llms.txt é um arquivo de texto puro (formato Markdown) colocado no diretório raiz do site, cujo objetivo é informar aos LLMs (Modelos de Linguagem de Grande Escala) a visão geral, a estrutura e a lista de conteúdos do site.

Informações Básicas

ItemConteúdo
Nome do arquivollms.txt
LocalizaçãoRaiz do domínio (https://example.com/llms.txt)
FormatoMarkdown (texto puro)
CodificaçãoUTF-8
Proponentellmstxt.org (Jeremy Howard e outros)
Status de padronizaçãoPadrão de fato (não é uma especificação formal como RFC)
Bots que leemGPTBot, ClaudeBot, PerplexityBot, Google-Extended etc.

Em Uma Frase

robots.txt = "Não entre" / llms.txt = "Nosso site é assim"

Enquanto o robots.txt é um arquivo de controle de acesso (permitir/bloquear), o llms.txt é um arquivo de descrição do conteúdo do site (autoapresentacao). Os dois não entram em conflito -- na verdade, são feitos para serem usados juntos.

2. Por Que é Necessário -- Diferença em Relação ao robots.txt

"Mas se eu já tenho sitemap e meta tags, a IA não consegue entender meu site?" -- você pode pensar assim. É verdade, mas o llms.txt tem vantagens próprias.

Comparação de Funções: robots.txt / sitemap.xml / llms.txt

ArquivoObjetivoAlvoConteúdo
robots.txtPermitir/bloquear rastreamentoTodos os crawlersRegras Allow/Disallow
sitemap.xmlFornecer lista de páginasMecanismos de buscaURLs, datas de atualização, prioridade
llms.txtDescrever o conteúdo do siteCrawlers de LLMVisão geral, estrutura, resumo dos conteúdos

3 Razões Pelas Quais o llms.txt é Necessário

Razão 1: LLMs não conseguem rastrear todo o site de forma eficiente

O Googlebot rastreia bilhões de páginas e constrói um índice massivo, mas os crawlers de LLM não são tão abrangentes. Ao colocar o llms.txt, você pode informar a IA de forma eficiente: "os conteúdos mais importantes deste site são estes".

Razão 2: Aumenta a chance de ser citado nas respostas da IA

Quando ChatGPT ou Perplexity geram respostas com busca na web, explicitar no llms.txt a especialidade e o conteúdo do site pode fazer com que o site seja reconhecido como uma fonte de informação confiável. Isso faz parte do LLMO (Otimização para Modelos de Linguagem de Grande Escala).

Para uma explicação detalhada sobre LLMO, confira "O Que é LLMO?".

Razão 3: Permite transmitir metainformacoes que o sitemap.xml não tem

O sitemap.xml é apenas uma lista de URLs. Com o llms.txt, você também pode informar:

  • Tema e área de especialidade do site
  • Resumo e categoria de cada conteúdo
  • Frequência de atualização e tamanho do site
  • Se há suporte multilinguistico
  • Informações de contato

3. Especificação do Formato -- O Que Escrever e Como

Estrutura do Formato llms.txt

H1 nome do site → resumo em blockquote → grupo de seções H2

1. Cabeçalho Obrigatório
# Nome do Site
> Breve descrição do site (1-2 frases)
Apresenta o site com H1 + blockquote
2. Lista de seções Obrigatório
## Lista de Seções
- [Nome da seção](URL): Descrição
- [Nome da seção](URL): Descrição
Agrupamento H2 + lista de links
3. Lista de conteúdo Recomendado
## Lista de Conteúdos
- [Título](URL): Resumo [Categoria]
- [Título](URL): Resumo [Categoria]
 ... (listar todo o conteúdo)
Ajuda a IA com resumos de uma linha por artigo
4. Categorias / Tags Opcional
## Categorias / Estrutura de Tags
- slug-da-categoria: Descrição
- slug-da-categoria: Descrição
Torna explícita a estrutura de informação
5. Informações do site Recomendado
## Informações do Site
- URL: https://example.com
- Sitemap: .../sitemap.xml
- Contact: email@example.com
Mostra o operador e a URL canônica

O llms.txt é escrito em formato Markdown. O formato baseado na especificação do llmstxt.org e o seguinte:

Estrutura Básica

# Nome do Site

> Descricao geral do site. Em 1 a 3 frases, informe de forma concisa o tema, o publico-alvo e o valor oferecido.

## Nome da Secao 1

- [Titulo da Pagina](URL): Resumo da pagina

## Nome da Secao 2

- [Titulo da Pagina](URL): Resumo da pagina
- [Titulo da Pagina](URL): Resumo da pagina

Regras do Formato

ElementoSintaxe MarkdownFunção
Título H1# Nome do SiteNome oficial do site. Apenas um por arquivo
Bloco de citação> Texto de resumoDescrição geral do site. Colocar logo após o H1
Título H2## Nome da SecaoAgrupamento dos conteúdos
Link em lista- [Titulo](URL): DescricaoInformação de cada conteúdo individual

Exemplo Real

# My Tech Blog

> My Tech Blog is a software engineering blog covering web development, cloud infrastructure, and AI tools. Updated weekly with practical tutorials and comparisons.

## Main Sections

- [Articles](https://example.com/articles): 50+ in-depth technical articles
- [Tutorials](https://example.com/tutorials): Step-by-step coding tutorials

## Popular Articles

- [React vs Vue in 2026](https://example.com/articles/react-vs-vue): A detailed comparison of React and Vue.js for modern web development, covering performance, ecosystem, and learning curve.
- [Docker for Beginners](https://example.com/articles/docker-beginners): Complete guide to Docker containers for developers who have never used containerization.

## Site Information

- URL: https://example.com
- Sitemap: https://example.com/sitemap.xml
- Languages: en, ja
- Contact: admin@example.com

Pontos de Atenção

  • Escrever em inglês por padrão. A especificação e os exemplos do llms.txt são em inglês, tornando essa a melhor prática. Para sites multilinguisticos, escreva em inglês e especifique os idiomas suportados com Languages: ja, en, es, .... Porém, para sites em um único idioma (por exemplo, um site inteiramente em francês ou russo), escrever no idioma do site é perfeitamente aceitável. Os principais LLMs (GPT, Claude, Gemini, etc.) processam a maioria dos idiomas com alta precisão, e os usuários desses sites farao consultas no mesmo idioma, garantindo respostas consistentes.
  • A codificação deve ser UTF-8. Com Shift-JIS ou outras codificacoes, os caracteres podem ficar corrompidos
  • Evite caracteres especiais como em-dash (--). Como o arquivo e exibido como texto puro, pode haver problemas de exibição em alguns navegadores. Use hifen (-) ou hifen duplo (--)
  • URLs devem ser caminhos absolutos (URLs completas começando com https://)
  • Apenas um H1 por arquivo. Use H2 para dividir as seções

4. Informações a Incluir -- Obrigatórias, Recomendadas e Opcionais

Muitas pessoas ficam em dúvida sobre o que escrever, então organizamos por prioridade.

Informações Obrigatórias (sem elas, o llms.txt perde o sentido)

InformaçãoLocal de EscritaExemplo
Nome do siteTítulo H1# AI Arte
Resumo do siteBloco de citação> AI learning platform...
Seções principaisH2 + lista de links- [Articles](URL): Descricao

Informações Recomendadas (melhoram a compreensão da IA)

InformaçãoPor Que é Necessária
Lista completa de conteúdosPermite que a IA entenda o escopo total do site
Resumo de 1 linha por conteúdoPermite que a IA entenda o conteúdo da página antecipadamente
Estrutura de categorias/tagsMostra a estrutura da informação do site
URL do siteDeclaração explícita da URL canônica
URL do SitemapDirecionamento para a lista detalhada de URLs
Idiomas suportadosImportante para sites multilinguisticos
ContatoIdentifica o responsável pelo site

Informações Opcionais (desejaveis, mas não obrigatórias)

  • Stack tecnológico: com o que o site foi construído (framework etc.)
  • Frequência de atualização: com que frequência novos conteúdos são adicionados
  • Quantidade total de conteúdos: número de artigos etc.
  • Licença / política de citação: se a IA pode citar ou não
  • Informações de API: se houver acesso programático disponível

Informações Que Não Devem Ser Incluídas

  • Informações confidenciais: URLs do painel de administração, endpoints de APIs internas etc.
  • Dados pessoais: informações pessoais além do necessário (endereço, telefone etc.)
  • Credenciais: chaves de API, senhas etc.

5. Diferença Entre llms.txt e llms-full.txt

A especificação do llmstxt.org define, além do llms.txt, também um arquivo chamado llms-full.txt.

ArquivoConteúdoTamanho EstimadoUso
llms.txtVisão geral, estrutura e lista de links do site1 a 50KB"Sumário" do site inteiro
llms-full.txtTexto completo de todos os conteúdos100KB a vários MBFornecer o texto completo a IA

Quando o llms-full.txt é Necessário

  • Documentação técnica: referências de API, documentação de bibliotecas etc., onde ter a IA entendendo o texto completo melhora a precisão das respostas
  • Base de conhecimento: colecoes de FAQ, glossários etc., conteúdos que são frequentemente citados em fragmentos

Quando o llms-full.txt Não é Necessário

  • Blogs e sites de mídia: com muitos artigos, colocar tudo em um único arquivo ficaria gigantesco. O resumo do llms.txt é suficiente
  • E-commerce: informações de produtos são melhor fornecidas via dados estruturados (JSON-LD etc.)
  • Sites corporativos: com poucas páginas, o llms.txt sozinho já cobre tudo

Para blogs e sites de mídia em geral, o llms.txt sozinho é suficiente. Pense no llms-full.txt como algo voltado para documentação técnica.

6. Arquivo Estático vs Geração Dinâmica -- Qual Escolher

Arquivo Estático vs Geração Dinâmica — qual escolher

Trade-off: esforço de implementação vs manutenção

Arquivo Estático
Colocar public/llms.txt diretamente
+ Simples (basta colocar o arquivo)
+ Zero carga no servidor
+ Não precisa de framework
- Fica desatualizado se esquecer
- Edição manual a cada artigo novo
- Qtd e categorias ficam erradas
Indicado quando
Pouco conteúdo (10 ou menos)
Atualização rara (menos de 1x/mês)
Geração Dinâmica
Gerar automaticamente do banco de dados
+ Sempre atualizado
+ Artigos novos refletidos auto.
+ Qtd e categorias sempre corretos
- Requer trabalho de implementação
- Acesso ao banco a cada requisição
- Necessita de framework
Indicado quando
Muito conteúdo (10+ itens)
Atualização frequente (1x/semana+)
Em caso de dúvida, Geração Dinâmica — «configurar e esquecer» reduz o custo operacional

Existem duas formas principais de operar o llms.txt.

Método 1: Arquivo Estático

Colocar um arquivo de texto diretamente em public/llms.txt (ou caminho equivalente).

Vantagens:

  • Implementação mais simples possível (basta colocar o arquivo)
  • Zero carga no servidor
  • Funciona sem framework

Desvantagens:

  • Precisa atualizar o arquivo manualmente toda vez que adicionar ou modificar conteúdo
  • Se esquecer de atualizar, informações desatualizadas serão passadas a IA
  • A quantidade de conteúdos e categorias fica divergente entre o arquivo e o site real

Método 2: Geração Dinâmica

A aplicação recebe a requisição para /llms.txt e gera o texto dinamicamente, buscando as informações mais recentes do banco de dados.

Vantagens:

  • Informações sempre atualizadas
  • Ao adicionar um artigo, ele é refletido automaticamente no llms.txt
  • Quantidade de conteúdos e nomes de categorias sempre precisos

Desvantagens:

  • Requer esforço de implementação (definição de rota + controller)
  • Acesso ao banco de dados a cada requisição (pode ser mitigado com cache)
  • Necessita de framework

Critérios de Decisão

CondiçãoRecomendação
Até 10 conteúdos e raramente aumentaArquivo estático é suficiente
Mais de 10 conteúdos ou atualização mensal+Geração dinâmica recomendada
Usa WordPress / Laravel / Django etc.Geração dinâmica é fácil de implementar
Site estático (Hugo, Jekyll, Astro etc.)Ideal gerar automaticamente no build
Operação solo e quer minimizar manutençãoGeração dinâmica (uma vez implementada, e só deixar rodar)

Conclusão: na dúvida, geração dinâmica. O custo inicial de implementação é maior, mas como você pode "configurar e esquecer", o custo operacional a longo prazo é menor. O pior cenário e começar com arquivo estático e "esquecer de atualizar, passando informações desatualizadas para a IA".

7. Implementação -- Exemplos de Código por Framework

A partir daqui, apresentamos como implementar a geração dinâmica do llms.txt nos principais frameworks.

Laravel (PHP)

Definição de rota (routes/web.php):

use App\Http\Controllers\LlmsTxtController;

Route::get('/llms.txt', [LlmsTxtController::class, 'index']);

Controller (app/Http/Controllers/LlmsTxtController.php):

class LlmsTxtController extends Controller
{
    public function index()
    {
        $articles = Article::published()
            ->with(['translations' => fn($q) => $q->where('locale', 'en')])
            ->orderBy('published_at')
            ->get();

        $lines = [];
        $lines[] = '# My Site Name';
        $lines[] = '';
        $lines[] = '> Site description here.';
        $lines[] = '';
        $lines[] = '## All Articles (' . $articles->count() . ')';
        $lines[] = '';

        foreach ($articles as $article) {
            $t = $article->translations->first();
            if (!$t) continue;
            $url = 'https://example.com/en/articles/' . $article->slug;
            $lines[] = '- [' . $t->title . '](' . $url . '): ' . $t->meta_description;
        }

        $content = implode("\n", $lines);
        return response($content, 200)
            ->header('Content-Type', 'text/plain; charset=utf-8');
    }
}

O ponto importante é declarar explicitamente Content-Type: text/plain; charset=utf-8. Se não fizer isso, pode ser interpretado como HTML.

Django (Python)

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('llms.txt', views.llms_txt, name='llms_txt'),
]

# views.py
from django.http import HttpResponse
from .models import Article

def llms_txt(request):
    articles = Article.objects.filter(
        status='published'
    ).order_by('published_at')

    lines = ['# My Site', '', '> Description.', '', '## Articles', '']
    for a in articles:
        lines.append(f'- [{a.title}](https://example.com/articles/{a.slug}): {a.meta_description}')

    content = '\n'.join(lines)
    return HttpResponse(content, content_type='text/plain; charset=utf-8')

Next.js (TypeScript)

// app/llms.txt/route.ts (App Router)
import { NextResponse } from 'next/server'

export async function GET() {
  // Buscar dados do DB ou CMS
  const posts = await getAllPosts()

  const lines = [
    '# My Site',
    '',
    '> Description.',
    '',
    '## Articles',
    '',
    ...posts.map(p =>
      `- [${p.title}](https://example.com/posts/${p.slug}): ${p.description}`
    ),
  ]

  return new NextResponse(lines.join('\n'), {
    headers: { 'Content-Type': 'text/plain; charset=utf-8' },
  })
}

WordPress (PHP)

Adicionar no functions.php ou como plugin:

// functions.php
add_action('init', function() {
    add_rewrite_rule('^llms\.txt$', 'index.php?llms_txt=1', 'top');
});

add_filter('query_vars', function($vars) {
    $vars[] = 'llms_txt';
    return $vars;
});

add_action('template_redirect', function() {
    if (!get_query_var('llms_txt')) return;

    header('Content-Type: text/plain; charset=utf-8');
    $posts = get_posts(['numberposts' => -1, 'post_status' => 'publish']);

    echo "# " . get_bloginfo('name') . "\n\n";
    echo "> " . get_bloginfo('description') . "\n\n";
    echo "## Articles (" . count($posts) . ")\n\n";

    foreach ($posts as $post) {
        $url = get_permalink($post);
        $desc = get_the_excerpt($post);
        echo "- [{$post->post_title}]({$url}): {$desc}\n";
    }
    exit;
});

No caso do WordPress, não esqueça de salvar novamente as configurações de permalink (flush das regras de rewrite).

Geradores de Sites Estáticos (Hugo / Astro etc.)

Escreva um script para gerar automaticamente durante o build.

# build-llms-txt.sh (exemplo para Hugo)
#!/bin/bash
echo "# My Site" > public/llms.txt
echo "" >> public/llms.txt
echo "> Site description." >> public/llms.txt
echo "" >> public/llms.txt
echo "## Articles" >> public/llms.txt
echo "" >> public/llms.txt

for file in content/posts/*.md; do
  title=$(grep '^title:' "$file" | sed 's/title: //')
  slug=$(basename "$file" .md)
  desc=$(grep '^description:' "$file" | sed 's/description: //')
  echo "- [${title}](https://example.com/posts/${slug}): ${desc}" >> public/llms.txt
done

Se executar no pipeline de CI (GitHub Actions etc.) antes do build, o arquivo será atualizado automaticamente a cada deploy.

8. Verificação e Validação Após a Instalação

Depois de instalar o llms.txt, verifique os seguintes pontos.

Checklist Básico

Item de VerificaçãoComo Verificar
É possível acessar pela URL?curl https://seusite.com/llms.txt
O Content-Type está correto?curl -I para confirmar text/plain; charset=utf-8
Há problemas de codificação?Abra diretamente no navegador e verifique se o texto aparece corretamente
Os links estão corretos?Verifique se as URLs listadas são acessíveis
O status HTTP e 200?curl -o /dev/null -w "%{http_code}"
O robots.txt não está bloqueando?Confirme que não há Disallow: /llms.txt no robots.txt

Verificações Adicionais para Geração Dinâmica

  • Confira o llms.txt após adicionar um artigo: o novo artigo está refletido?
  • A contagem de conteúdos está correta: o número em "All Articles (27)" bate com a quantidade real de artigos publicados?
  • Artigos não publicados não estão aparecendo: confirme que rascunhos e agendamentos não são exibidos

Ferramentas de Validação

Até abril de 2026, não existe um validador oficial para llms.txt. Porém, você pode validar das seguintes formas:

  • Pedir para ChatGPT ou Claude lerem: pergunte "Leia https://seusite.com/llms.txt e me conte sobre este site"
  • Previsualizador de Markdown: cole o conteúdo do llms.txt em um previsualizador para verificar se a estrutura renderiza corretamente
  • Ferramentas de auditoria SEO: algumas ferramentas de auditoria SEO já estão começando a verificar a existência do llms.txt

9. Exemplos Reais de llms.txt em Sites

Vamos observar as tendências dos sites que adotaram o llms.txt.

Características dos Sites Que Estão Adotando

Tipo de SiteTaxa de AdoçãoRazão
Serviços e ferramentas de IAAltaA própria indústria de IA tem alta consciência de LLMO
Documentação técnicaAltaNecessidade de transmitir informações corretas a IA
Blogs de tecnologiaMédiaAlta sensibilidade a tendências tecnológicas
Sites corporativosBaixaNível de conhecimento ainda baixo
E-commerceBaixaDados estruturados (JSON-LD) tem prioridade

Características de um Bom llms.txt

  • Resumo conciso e claro -- a área de especialidade do site e compreendida de imediato
  • Todo o conteúdo listado com resumos -- a IA consegue entender a visão completa
  • Estrutura de categorias explícita -- a organização da informação fica clara
  • Geração dinâmica -- sempre atualizado

Características de um llms.txt Ruim

  • Apenas nome do site e contato -- informação insuficiente para ajudar a IA a entender
  • Texto completo de todo o conteúdo copiado -- o llms.txt é um "sumário", não o "texto completo". O texto completo e função do llms-full.txt
  • Informações desatualizadas abandonadas -- como dizer "10 artigos" quando na verdade há 50, prejudicando a confiabilidade
  • Informações confidenciais incluídas -- casos em que URLs do painel admin ou chaves de API aparecem no arquivo

FAQ

P. Se eu não instalar o llms.txt, meu site não aparecera nos resultados de busca da IA?

Não. Mesmo sem o llms.txt, a IA consegue rastrear e exibir seu site nos resultados de busca. O llms.txt é apenas um "arquivo auxiliar que ajuda a IA a entender melhor". Porém, ao instala-lo, a IA consegue entender com mais precisão a estrutura e o conteúdo do site, o que pode aumentar a chance de ser citado em buscas de IA. É uma posição semelhante ao sitemap.xml no SEO -- não é obrigatório, mas ter é uma vantagem.

P. Se estou bloqueando crawlers de IA no robots.txt, o llms.txt tem alguma utilidade?

Se você bloqueou com User-agent: GPTBot etc. no robots.txt, esse Bot não rastreara seu site. Porém, o llms.txt em si é independente das regras do robots.txt. Há possibilidade de a IA acessar o llms.txt por outra via (como quando um usuário cola a URL diretamente). Se você está bloqueando crawlers de IA intencionalmente, o mais coerente e também não instalar o llms.txt.

P. Em qual idioma o llms.txt deve ser escrito?

Para sites multilinguisticos, inglês. Para sites em um único idioma, o idioma do site também é válido. A especificação e os exemplos são predominantemente em inglês, o que o torna a escolha mais lógica para sites multilinguisticos. No entanto, se o conteúdo do site é inteiramente em um único idioma, escrever o llms.txt nesse idioma e aceitável. Os principais LLMs processam a maioria dos idiomas com alta precisão, e os usuários consultarao no mesmo idioma do site, obtendo respostas consistentes.

P. Existe limite de tamanho para o llms.txt?

Não há um limite explícito na especificação. Porém, na prática, recomenda-se manter abaixo de 50KB. Mesmo sites com centenas de artigos, usando título + resumo de 1 linha por artigo, cabem facilmente em menos de 50KB. Se quiser incluir o texto completo, prepare um llms-full.txt separado.

P. Qual a frequência ideal de atualização?

Com geração dinâmica, as informações mais recentes são retornadas a cada requisição, então não precisa se preocupar. Com arquivo estático, o ideal é atualizar toda vez que adicionar ou modificar conteúdo. No mínimo, verifique e atualize mensalmente. Se chegar ao ponto de deixar informações desatualizadas, é melhor migrar para geração dinâmica.

P. Afeta o SEO?

O llms.txt não afeta diretamente o SEO tradicional (ranking no Google). O Google usa o Googlebot para rastrear HTML e não considera o llms.txt como fator de ranking. Porém, pode influenciar a possibilidade de citação em buscas de IA como AI Overviews (respostas de IA exibidas nos resultados do Google), ChatGPT e Perplexity. Encare como uma estratégia de uma camada diferente do SEO tradicional (LLMO).

P. Existem plugins para WordPress?

Até abril de 2026, já existem alguns plugins WordPress que geram o llms.txt automaticamente. Porém, a qualidade e os recursos variam bastante, então se optar por plugin, sempre verifique o conteúdo gerado. Adicionar algumas dezenas de linhas de código ao functions.php também resolve o problema, então é perfeitamente possível fazer sem plugin.