Cap. 9 · Ferramenta
Gerador de llms.txt
Monte o arquivo llms.txt que aponta os modelos de IA para as suas páginas canônicas. Roda no navegador — copie ou baixe o arquivo pronto.
Ferramenta ao vivo
Preencha e copie
O arquivo ao lado se atualiza a cada campo. Só nome e descrição são obrigatórios.
llms.txt gerado
Faltam campos obrigatórios# UntitledFaltam: Nome canônico, Descrição (uma linha).
Código-fonte
Código do gerador
A mesma função que roda acima — baixe e use no seu build.
// llms-generator.js// Pure, framework-agnostic builder for an llms.txt file (Chapter 9).// Same function powers the live tool at eduardomendes.com.br/repo/llms-txt.//// The llms.txt convention (https://llmstxt.org): an H1 name, a blockquote// summary, optional free-text notes, then H2 sections of Markdown links that// point language models at your canonical, machine-readable pages.//// Usage:// import { buildLlmsTxt } from "./llms-generator.js";// const text = buildLlmsTxt({ name, description, services, area, contacts, notes });/** * @param {object} data * @param {string} data.name Canonical business/site name (required) * @param {string} data.description One-line summary (required) * @param {string} [data.siteUrl] Canonical homepage URL * @param {Array<{title:string,url:string,note?:string}>} [data.services] * @param {string} [data.area] Coverage area (neighborhoods / cities) * @param {Array<{title:string,url:string}>} [data.contacts] * @param {string} [data.notes] Guidance for language models * @returns {string} Markdown (llms.txt content) */export function buildLlmsTxt(data = {}) { const name = (data.name || "").trim() || "Untitled"; const description = (data.description || "").trim(); const lines = []; lines.push(`# ${name}`); lines.push(""); if (description) { lines.push(`> ${description}`); lines.push(""); } if (data.siteUrl && data.siteUrl.trim()) { lines.push(`Canonical site: ${data.siteUrl.trim()}`); lines.push(""); } if (data.area && data.area.trim()) { lines.push(`Area served: ${data.area.trim()}`); lines.push(""); } if (data.notes && data.notes.trim()) { lines.push(data.notes.trim()); lines.push(""); } const services = Array.isArray(data.services) ? data.services.filter((s) => s && s.title && s.title.trim()) : []; if (services.length) { lines.push("## Services"); for (const s of services) { const note = s.note && s.note.trim() ? `: ${s.note.trim()}` : ""; const url = s.url && s.url.trim() ? s.url.trim() : ""; lines.push(url ? `- [${s.title.trim()}](${url})${note}` : `- ${s.title.trim()}${note}`); } lines.push(""); } const contacts = Array.isArray(data.contacts) ? data.contacts.filter((c) => c && c.title && c.title.trim()) : []; if (contacts.length) { lines.push("## Contact"); for (const c of contacts) { const url = c.url && c.url.trim() ? c.url.trim() : ""; lines.push(url ? `- [${c.title.trim()}](${url})` : `- ${c.title.trim()}`); } lines.push(""); } // Collapse trailing blank lines to a single newline. return lines.join("\n").replace(/\n{3,}/g, "\n\n").replace(/\n+$/, "") + "\n";}export function validate(data = {}) { const errors = {}; if (!data.name || !data.name.trim()) errors.name = "required"; if (!data.description || !data.description.trim()) errors.description = "required"; return errors;}Dúvidas
Perguntas frequentes
Onde fica o arquivo llms.txt?
Na raiz do domínio: https://seusite.com/llms.txt, servido como text/plain.
Para que serve?
É uma convenção (llmstxt.org) que dá aos modelos de linguagem um mapa curado das suas páginas canônicas e legíveis, reduzindo ruído e aumentando a chance de citação correta.
Substitui robots.txt ou sitemap?
Não. É complementar: robots controla rastreamento, sitemap lista URLs, e llms.txt orienta modelos sobre o que é canônico e importante.
Implementação
Prefere que eu implemente?
Conte o seu caso numa conversa e a gente define o escopo juntos.
Agendar conversa