Pular para o conteúdo

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.

Ir para o llms.txt gerado
Sobre o site
Serviços (título + URL)
Contatos (título + URL)

llms.txt gerado

Faltam campos obrigatórios
llms.txt
# Untitled

Faltam: 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
// 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