Índice
- 1. O Que é llms.txt
- 2. Por Que é Necessário -- Diferença em Relação ao robots.txt
- 3. Especificação do Formato -- O Que Escrever e Como
- 4. Informações a Incluir -- Obrigatórias, Recomendadas e Opcionais
- 5. Diferença Entre llms.txt e llms-full.txt
- 6. Arquivo Estático vs Geração Dinâmica -- Qual Escolher
- 7. Implementação -- Exemplos de Código por Framework
- 8. Verificação e Validação Após a Instalação
- 9. Exemplos Reais de llms.txt em Sites
- FAQ
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
| Item | Conteúdo |
|---|---|
| Nome do arquivo | llms.txt |
| Localização | Raiz do domínio (https://example.com/llms.txt) |
| Formato | Markdown (texto puro) |
| Codificação | UTF-8 |
| Proponente | llmstxt.org (Jeremy Howard e outros) |
| Status de padronização | Padrão de fato (não é uma especificação formal como RFC) |
| Bots que leem | GPTBot, 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
| Arquivo | Objetivo | Alvo | Conteúdo |
|---|---|---|---|
| robots.txt | Permitir/bloquear rastreamento | Todos os crawlers | Regras Allow/Disallow |
| sitemap.xml | Fornecer lista de páginas | Mecanismos de busca | URLs, datas de atualização, prioridade |
| llms.txt | Descrever o conteúdo do site | Crawlers de LLM | Visã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
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
| Elemento | Sintaxe Markdown | Função |
|---|---|---|
| Título H1 | # Nome do Site | Nome oficial do site. Apenas um por arquivo |
| Bloco de citação | > Texto de resumo | Descrição geral do site. Colocar logo após o H1 |
| Título H2 | ## Nome da Secao | Agrupamento dos conteúdos |
| Link em lista | - [Titulo](URL): Descricao | Informaçã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ção | Local de Escrita | Exemplo |
|---|---|---|
| Nome do site | Título H1 | # AI Arte |
| Resumo do site | Bloco de citação | > AI learning platform... |
| Seções principais | H2 + lista de links | - [Articles](URL): Descricao |
Informações Recomendadas (melhoram a compreensão da IA)
| Informação | Por Que é Necessária |
|---|---|
| Lista completa de conteúdos | Permite que a IA entenda o escopo total do site |
| Resumo de 1 linha por conteúdo | Permite que a IA entenda o conteúdo da página antecipadamente |
| Estrutura de categorias/tags | Mostra a estrutura da informação do site |
| URL do site | Declaração explícita da URL canônica |
| URL do Sitemap | Direcionamento para a lista detalhada de URLs |
| Idiomas suportados | Importante para sites multilinguisticos |
| Contato | Identifica 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.
| Arquivo | Conteúdo | Tamanho Estimado | Uso |
|---|---|---|---|
| llms.txt | Visão geral, estrutura e lista de links do site | 1 a 50KB | "Sumário" do site inteiro |
| llms-full.txt | Texto completo de todos os conteúdos | 100KB a vários MB | Fornecer 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
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ção | Recomendação |
|---|---|
| Até 10 conteúdos e raramente aumenta | Arquivo 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ção | Geraçã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ção | Como 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 Site | Taxa de Adoção | Razão |
|---|---|---|
| Serviços e ferramentas de IA | Alta | A própria indústria de IA tem alta consciência de LLMO |
| Documentação técnica | Alta | Necessidade de transmitir informações corretas a IA |
| Blogs de tecnologia | Média | Alta sensibilidade a tendências tecnológicas |
| Sites corporativos | Baixa | Nível de conhecimento ainda baixo |
| E-commerce | Baixa | Dados 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.