Todos os dias, mais e mais pessoas estão usando o ChatGPT, Perplexity e outras ferramentas de IA para pesquisar e resumir conteúdo. Como discutido em uma das minhas postagens anteriores sobre SEO para SAO, é apenas uma questão de tempo até que a maioria das visitas a sites e blogs venha de agentes de IA.
Quando se trata de tornar seu conteúdo acessível a modelos de linguagem, há uma maneira mais simples do que soluções complexas de rastreamento - especialmente para sites gerados estaticamente construídos com Astro. Nesta postagem, mostrarei como criar um arquivo llms.txt que expõe o conteúdo do seu blog para LLMs em um formato limpo e estruturado.
O que é llms.txt?
Um arquivo llms.txt é conceitualmente semelhante ao robots.txt, mas projetado especificamente para modelos de linguagem. Ele fornece uma representação estruturada e baseada em texto do seu conteúdo que é fácil para os LLMs analisarem e entenderem.
Os LLMs não são muito bons em navegar por várias páginas por meio de links. Em vez disso, os LLMs são muito bons em extrair conteúdo de uma única página e armazená-lo em sua memória. É aqui que o llms.txt se torna inestimável.
Por que ferramentas de rastreamento como o Crawl4AI podem ser exageradas
Ferramentas como Crawl4AI oferecem poderosos recursos de rastreamento de sites para LLMs. Embora sejam ideais para gerar llms.txt para sites dinâmicos, eles podem ser exagerados para sites estáticos.
Para sites Astro especialmente, onde o conteúdo é normalmente armazenado como arquivos markdown com frontmatter, você já tem conteúdo perfeitamente estruturado pronto para ser exposto diretamente.
Implementando um Endpoint llms.txt no Astro
Veja como você pode gerar arquivos LLMs.txt para o seu site Astro.
Crie um arquivo em src/pages/llms.txt.ts (ou src/pages/api/llms.txt.ts, dependendo da sua configuração do Astro) e adicione o seguinte código:
import { getCollection } from "astro:content";
import type { APIRoute } from "astro";
export const GET: APIRoute = async () => {
try {
// Fetch all content collections
const [blogs, features, transcriptions, alternatives, help] = await Promise.all([
getCollection("blog"),
getCollection("features"),
getCollection("transcription"),
getCollection("alternatives"),
getCollection("help")
]);
// Sort blogs by date (newest first)
const sortedBlogs = blogs
.filter(post => !post.data.draft)
.sort((a, b) => new Date(b.data.date).getTime() - new Date(a.data.date).getTime());
// Filter non-draft content
const activeFeatures = features.filter(item => !item.data.draft);
const activeTranscriptions = transcriptions.filter(item => !item.data.draft);
const activeAlternatives = alternatives.filter(item => !item.data.draft);
const content = `# Nome do seu site - Guia de Conteúdo Completo
Este documento contém o conteúdo completo do seu site.
Website: https://seusite.com
Última atualização: ${new Date().toISOString().split('T')[0]}
## Conteúdo do Blog
${sortedBlogs
.map((post) => `#
## ${post.data.title}
URL: https://seusite.com/blog/${post.data.slug || post.id}
Publicado: ${post.data.date}
Categoria: ${post.data.category}
Autor: ${post.data.author}
Descrição: ${post.data.description}
${post.body}
---`).join('\n\n')}
## Seções de Conteúdo Adicionais
${activeFeatures
.map((feature) => `#
## ${feature.data.title}
URL: https://seusite.com/${feature.data.slug}
Categoria: ${feature.data.category}
${feature.data.description}
${feature.body}
---`).join('\n\n')}
---
Este conteúdo é fornecido para ajudar os assistentes de IA a entender as ofertas do seu site e fornecer informações precisas.`;
return new Response(content, {
headers: {
"Content-Type": "text/plain; charset=utf-8",
"Cache-Control": "public, max-age=3600" // Cache por 1 hora
},
});
} catch (error) {
console.error('Erro ao gerar llms.txt:', error);
return new Response('Erro ao gerar llms.txt', { status: 500 });
}
};
Como este código funciona
Este código cria um endpoint de API que:
- Busca todas as postagens de suas coleções de conteúdo usando
getCollection() - Filtra o conteúdo de rascunho para incluir apenas artigos publicados
- Classifica o conteúdo por data para mostrar o conteúdo mais recente primeiro
- Cria um arquivo de texto estruturado começando com o título do seu site
- Inclui para cada postagem:
- O título da postagem como um cabeçalho
- Um link direto para a postagem
- Metadados (data, categoria, autor, descrição)
- O conteúdo completo da postagem
- Lida com erros de forma elegante com registro de erros adequado
- Define cabeçalhos apropriados incluindo o armazenamento em cache para desempenho
Personalizando para a sua estrutura de conteúdo
Ajustando os nomes da coleção
O exemplo acima usa várias coleções. Se você tiver apenas uma coleção de blog, simplifique-a:
export const GET: APIRoute = async () => {
const posts = await getCollection("blog"); // Ajuste para o nome da sua coleção
const publishedPosts = posts
.filter(post => !post.data.draft)
.sort((a, b) => new Date(b.data.date).getTime() - new Date(a.data.date).getTime());
const content = `# Nome do seu blog
${publishedPosts
.map((post) => `# ${post.data.title}
https://seusite.com/blog/${post.data.slug || post.id}
${post.data.description}
${post.body}
`).join('\n\n')}`;
return new Response(content, {
headers: { "Content-Type": "text/plain; charset=utf-8" },
});
};
Adicionando filtragem de conteúdo
Você pode querer excluir certas categorias ou incluir apenas conteúdo em destaque:
// Inclua apenas postagens em destaque
const featuredPosts = posts.filter(post => post.data.featured && !post.data.draft);
// Exclua categorias específicas
const filteredPosts = posts.filter(post =>
!post.data.draft && !['internal', 'private'].includes(post.data.category)
);
Benefícios de usar llms.txt
1. Melhor capacidade de descoberta de IA
As ferramentas de IA podem entender rapidamente toda a sua biblioteca de conteúdo sem rastrear várias páginas.
2. Melhor contexto para respostas de IA
Quando os usuários fazem perguntas relacionadas ao seu conteúdo, os modelos de IA têm acesso a informações abrangentes e estruturadas.
3. SEO para a Era da IA
À medida que a pesquisa evolui para resultados baseados em IA, ter conteúdo estruturado para o consumo de IA torna-se crucial.
4. Benefícios de desempenho
A geração estática significa que seu arquivo llms.txt é criado no momento da compilação, fornecendo tempos de resposta rápidos.
Testando sua implementação de llms.txt
Após implementar o endpoint, teste-o:
- Visite o endpoint diretamente:
https://seusite.com/llms.txt - Verifique a estrutura do conteúdo para garantir que todas as postagens estejam incluídas
- Verifique se a formatação está limpa e legível
- Teste com ferramentas de IA pedindo que analisem o conteúdo do seu llms.txt
Melhores práticas para llms.txt
Mantenha o conteúdo atualizado
Atualize seu llms.txt regularmente, reconstruindo seu site quando você publicar novo conteúdo.
Inclua metadados relevantes
Adicione datas de publicação, categorias e descrições para ajudar a IA a entender o contexto.
Estruture o conteúdo de forma clara
Use formatos de cabeçalho consistentes e separadores claros entre as seções.
Monitore o tamanho do arquivo
Para sites com centenas de postagens, considere paginar ou filtrar o conteúdo para manter o arquivo gerenciável.
Conclusão
Criar um arquivo llms.txt para o seu site Astro é uma maneira direta de tornar seu conteúdo acessível aos modelos de linguagem de IA. Esta abordagem aproveita as coleções de conteúdo do Astro para criar uma visão estruturada e abrangente do conteúdo do seu site.
À medida que a IA se torna cada vez mais importante para a descoberta de conteúdo, a implementação do llms.txt posiciona seu site para uma melhor visibilidade no cenário de pesquisa alimentado por IA. A implementação é simples, de bom desempenho e fácil de manter como parte do seu processo de construção do Astro.
Comece a implementar o llms.txt hoje mesmo para garantir que seu conteúdo esteja pronto para o futuro da pesquisa e descoberta alimentadas por IA.
Perguntas Frequentes
Qual é a diferença entre llms.txt e sitemap.xml?
Enquanto sitemap.xml lista suas páginas para rastreadores de mecanismos de pesquisa, llms.txt fornece o conteúdo real em um formato otimizado para que os modelos de linguagem entendam e processem.
Com que frequência devo atualizar meu arquivo llms.txt?
Seu arquivo llms.txt é atualizado automaticamente quando você recompila seu site Astro, para que ele permaneça atualizado com sua programação de publicação de conteúdo.
Posso incluir imagens e mídia no llms.txt?
llms.txt é baseado em texto, portanto, inclua descrições de imagens e mídia em vez dos próprios arquivos. Concentre-se no conteúdo textual que a IA pode processar de forma eficaz.
O llms.txt afetará meu SEO?
Não, llms.txt não afetará negativamente o SEO tradicional. Ele foi projetado para complementar sua estratégia de SEO existente, tornando o conteúdo acessível às ferramentas de IA.
Qual deve ser o tamanho do meu arquivo llms.txt?
Não há um limite estrito, mas mantenha-o razoável. Para sites com centenas de postagens, considere filtrar para incluir apenas seu conteúdo mais importante ou recente.