Ghid llms.txt:Ce este, cum funcționează și cine îl folosește de fapt
llms.txt este un fișier text în format Markdown, plasat la rădăcina domeniului (https://domeniu.ro/llms.txt), gândit ca hartă curată a site-ului pentru crawlerele AI — deși niciunul dintre marile motoare (Google, OpenAI, Anthropic, Perplexity) nu a confirmat public că îl citește: linkurile esențiale plus descrieri semantice scurte, fără HTML, scripturi sau balast vizual. Practic, echivalentul lui robots.txt pentru modele lingvistice, orientat însă spre ghidare, nu spre blocare.
Cât contează, de fapt: ideea fișierului e că asistenții conversaționali și motoarele de căutare generative (AEO & GEO) ar înțelege mai ușor un rezumat curat, în Markdown, decât paginile HTML. E o ipoteză, nu o regulă dovedită. Fără llms.txt, site-ul tău nu devine invizibil: crawlerele motoarelor AI îți citesc paginile HTML, iar Google Search nu folosește deloc fișierul.
Acest ghid acoperă strict execuția: specificațiile tehnice, implementarea pe WordPress, Shopify, Webflow și Next.js, plus regulile de validare pentru noii crawleri AI. Pentru dimensiunea strategică, ce poate și ce nu poate face fișierul pentru felul în care apare brandul tău în răspunsurile AI, citește ghidul AEO și GEO.
Ce este llms.txt și specificația sa tehnică
Fișierul llms.txt e o propunere a lui Jeremy Howard, publicată pe 3 septembrie 2024 și ajunsă acum la a doua versiune (v2): un document text în format Markdown, pus la rădăcina site-ului (https://domeniu.ro/llms.txt) sau într-un subfolder, caz în care descrie doar paginile de sub el.
Acest fișier funcționează ca o „hartă a site-ului” adaptată pentru LLM-uri: fără machete grele, scripturi și cod HTML inutil, doar un rezumat scurt și linkuri curate, fiecare cu o notă opțională despre pagină.
Regulile de structurare sintactică
Formatul propus pe llmstxt.org e Markdown simplu, cu secțiunile în ordinea de mai jos; doar H1-ul cu numele site-ului e obligatoriu, restul e opțional:
- H1 (
# Titlu): numele proiectului sau al site-ului; e singura parte obligatorie. - Bloc de citat (
> …): un rezumat scurt, cu informațiile de care e nevoie ca să înțelegi restul fișierului. - Paragrafe sau liste fără titluri: detalii despre proiect și despre cum se citesc fișierele indicate.
- Secțiuni cu titluri
##: liste de linkuri, fiecare element un link Markdown[Titlu pagină](URL), urmat opțional de două puncte și de note despre pagină. ## Optional: prin convenție, linkurile secundare, pe care un agent le poate sări când are nevoie de un context mai scurt.
Mai vei vedea și /llms-full.txt, un singur fișier cu textul integral al paginilor importante, gândit ca un asistent AI să citească totul dintr-o cerere. Textul versiunii actuale (v2) a propunerii nu-l menționează.
Ce spune Google (și ceilalți), de fapt — verificat la sursă
Aici e secțiunea pe care alte ghiduri nu ți-o dau, pentru că le strică pitch-ul. Înainte să investești un minut în llms.txt, trebuie să știi cine îl folosește cu adevărat. Am verificat la sursă, nu din memorie:
| Sistem | Ce face cu llms.txt (2026) |
|---|---|
| Google Search / AI Overviews | Îl ignoră: după ghidul Google pentru funcțiile AI, fișierul nu te ajută și nu te dezavantajează în Search. |
| ChatGPT (OpenAI) | Zero angajament. Trimite oficial la robots.txt. |
| Claude (Anthropic) | Zero angajament pentru produsele de chat. Trimite tot la robots.txt. |
| Perplexity | Pagina lui despre crawlere nu spune ce face cu llms.txt-ul altor site-uri: numește PerplexityBot și Perplexity-User și trimite la robots.txt; fișierul apare acolo doar ca index al propriei documentații. |
| Agenți de cod (Cursor, Claude Code) | Aici chiar se folosește — pentru ingestia documentației de librării de către dezvoltatori, nu ca semnal de citare în răspunsuri. |
Două măsurători: Limy.AI↗ scrie că, din peste 500 de milioane de accesări de boți AI monitorizate în 90 de zile la brandurile pe care le urmărește, doar 408 au țintit direct llms.txt — iar Ahrefs↗, pe 137.210 domenii, a găsit că 97% dintre fișiere n-au primit nicio cerere în mai 2026. Fișierul e publicat des: 28% dintre domeniile din același studiu îl aveau, cifră pe care Ahrefs o dă drept limită superioară, pentru că eșantionul lui e mai tehnic și mai atent la SEO decât webul în ansamblu. Cererile pentru el sunt însă rare, iar marile platforme AI nu s-au angajat oficial să-l citească.
Cele trei lumi pe care nimeni nu le separă
- Produsele de chat și căutare (ChatGPT answers, Perplexity, AI Overviews). Aici
llms.txte simbolic: Google scrie că Search îl ignoră, iar paginile OpenAI și Perplexity despre crawlere nu spun că îl citesc. Ce te aduce în răspunsuri: să fii sursa cea mai clară și mai credibilă, indexabilă, curată. - Agenții de cod (Cursor, Claude Code). Aici
llms.txte util real — un dezvoltator îndreaptă agentul spre documentația unei librării, iar fișierul ajută ingestia. Dar n-are legătură cu „AI-ul care îți citează brandul”. - Agentic browsing (Gemini Agent, agenții care navighează live). Agentul nu caută un fișier ascuns — deschide browserul și parcurge pagina randată în timp real, exact ca un om. Levierul erei agentice e pagina ta reală și curată, nu
llms.txt.
Deci merită sau nu?
Da, dar pentru motivul corect. llms.txt e ieftin de generat și îl merită ca poliță pentru cazul agenților de cod și ca pregătire dacă adoptarea crește. Beneficiile POSIBILE, pentru sistemele care ar ajunge să-l citească, sunt că tu scrii descrierile paginilor și o eventuală eficiență de crawl (un fișier Markdown se consumă într-un pas, fără DOM de construit sau scripturi de executat).
Ce NU e: nu e trucul pentru locul 1 în Google AI, nu te urcă în AI Overviews, iar cererile de la sistemele AI pentru el sunt rare. Dacă o agenție ți-l vinde ca mecanism principal, acum ai tabelul cu care s-o contrazici — cu surse.
Cine are voie să te antreneze și să te citească se stabilește în robots.txt, nu în llms.txt, cu două precizări. Prima: robots.txt e o cerere, nu o barieră; Google scrie că regulile lui nu pot impune nimic unui crawler, OpenAI scrie că pot să nu se aplice lui ChatGPT-User, iar Perplexity, că Perplexity-User le ignoră în general. A doua: Google-Extended nu are user agent propriu, e doar un token de control în robots.txt; dacă îl blochezi, oprești folosirea conținutului la antrenarea Gemini și la grounding, nu apariția în AI Overviews sau AI Mode. Pentru acestea există, în Search Console, setarea „Search generative AI control”, plus controalele de fragment nosnippet, data-nosnippet și max-snippet.
Nu ne crede pe cuvânt:Măsoară singur
Focalizarea pe eficiența codului nu este un simplu trend de marketing, ci o decizie inginerească pe care o poți verifica direct, fără să te bazezi pe cifrele publicate de vreo agenție (inclusiv de noi):
- Testul de viteză: Rulează
verdantmindset.comîn PageSpeed Insights (pagespeed.web.dev). Apoi rulează, cu exact același instrument, site-ul agenției care îți promite viteză. Compară rezultatele una lângă alta — instrumentul e al Google, nu al nostru. - Testul llms.txt: Deschide
https://verdantmindset.com/llms.txtdirect în browser. Vezi cu ochii tăi cum arată o hartă semantică servită ca text brut: linkuri curate, descrieri scurte, zero balast. Apoi încearcă același URL pe site-ul tău sau pe al furnizorului tău actual.
Acesta este standardul la care ar trebui să ții orice partener tehnic: afirmațiile de performanță se verifică cu instrumente publice, nu se acceptă din prezentări.
Ghid tehnic de implementare pe platforme CMS și Frameworks
Ca fișierul llms.txt să fie util, trebuie să reflecte starea reală a site-ului: generat automat sau actualizat la fiecare schimbare importantă. Iată exemple de implementare pentru cele mai comune medii tehnice:
WordPress:Generare dinamică prin PHP (fără plugin-uri)
Dacă vrei să eviți instalarea unui plugin SEO greu și vrei control total asupra output-ului, poți adăuga următorul script în fișierul functions.php al temei tale child (sau într-un plugin custom de funcționalități):
<?php
// Activează o regulă custom de rescriere URL pentru llms.txt
add_action('init', 'vm_register_llms_rewrite');
function vm_register_llms_rewrite() {
add_rewrite_rule('^llms\.txt$', 'index.php?vm_llms_trigger=1', 'top');
}
// Înregistrează variabila de query pentru declanșarea fișierului
add_filter('query_vars', 'vm_register_llms_query_vars');
function vm_register_llms_query_vars($vars) {
$vars[] = 'vm_llms_trigger';
return $vars;
}
// Interceptează cererea și livrează fișierul llms.txt în mod dinamic
add_action('template_redirect', 'vm_serve_llms_txt');
function vm_serve_llms_txt() {
if (get_query_var('vm_llms_trigger')) {
header('Content-Type: text/plain; charset=utf-8');
header('Cache-Control: public, max-age=3600');
echo "# " . get_bloginfo('name') . "\n\n";
echo get_bloginfo('description') . "\n\n";
echo "## Sitemaps\n";
echo "- [" . __('Sitemap Principal', 'vm') . "](" . home_url('/sitemap_index.xml') . ")\n\n";
// Preluare Pagini Importante
$pages = get_pages(array('meta_key' => '_vm_include_llms', 'meta_value' => 'yes'));
if (!empty($pages)) {
echo "## Pagini Cheie\n";
foreach ($pages as $page) {
$desc = get_post_meta($page->ID, '_yoast_wpseo_metadesc', true);
if (empty($desc)) {
$desc = wp_strip_all_tags(wp_trim_words($page->post_content, 20));
}
echo "- [" . $page->post_title . "](" . get_permalink($page->ID) . "): " . esc_html($desc) . "\n";
}
echo "\n";
}
// Preluare Ultimele Articole din Blog
$posts = get_posts(array('numberposts' => 100, 'post_status' => 'publish'));
if (!empty($posts)) {
echo "## Articole și Resurse\n";
foreach ($posts as $post) {
$desc = get_post_meta($post->ID, '_yoast_wpseo_metadesc', true);
if (empty($desc)) {
$desc = wp_strip_all_tags(wp_trim_words($post->post_content, 20));
}
echo "- [" . $post->post_title . "](" . get_permalink($post->ID) . "): " . esc_html($desc) . "\n";
}
}
exit;
}
}
Notă: După adăugarea acestui cod, accesează în panoul de administrare secțiunea Settings > Permalinks și apasă butonul Save Changes pentru a reseta regulile de rescriere ale WordPress.
Shopify:Fișierul generat de platformă
Shopify servește deja /llms.txt implicit: dacă magazinul nu le suprascrie, adresa, ca și /llms-full.txt, oglindește fișierul /agents.md, pe care platforma îl generează singură. Pentru cele mai multe magazine, scrie Shopify, fișierul gestionat e tot ce trebuie, așa că nu ai nevoie de vechea metodă, cu un șablon de pagină și o redirecționare de la /llms.txt.
Dacă ai cerințe pe care fișierul gestionat nu le acoperă:
- Adaugă în folderul
templatesal temei unllms.txt.liquid, folosit doar pentru/llms.txt, sau unagents.md.liquid, folosit pentru toate cele trei adrese; acesta din urmă nu poate fi un șablon JSON. - Scrie în el Markdown.
agents.md.liquidse randează într-un context Liquid restrâns, doar cu obiectelerequestșiagents; obiectele globale obișnuite, cashop,collectionssaupages, apar goale, așa că datele magazinului le iei prinagentssau le scrii de mână. - Din clipa în care adaugi șablonul, tu răspunzi de actualizarea lui.
Next.js:Route Handler dinamic (app/llms.txt/route.ts)
În Next.js (App Router), implementarea unui dynamic API handler care să deservească conținut text pe o rută specifică este extrem de simplă și eficientă din punct de vedere computațional:
import { NextResponse } from 'next/server';
import { getActiveBlogPosts, getCoreServices } from '@/lib/api';
export const revalidate = 3600; // Cachează rezultatul timp de o oră
export async function GET() {
try {
const posts = await getActiveBlogPosts();
const services = await getCoreServices();
let markdown = `# Verdant Mindset\n\n`;
markdown += `Atelier de inginerie digitală, SEO tehnic și optimizare web sustenabilă.\n\n`;
markdown += `## Sitemaps\n`;
markdown += `- [Sitemap General](https://verdantmindset.com/sitemap.xml)\n\n`;
markdown += `## Servicii Tehnice\n`;
services.forEach((service) => {
markdown += `- [${service.title}](https://verdantmindset.com/servicii/${service.slug}): ${service.summary}\n`;
});
markdown += `\n## Articole și Ghiduri\n`;
posts.forEach((post) => {
markdown += `- [${post.title}](https://verdantmindset.com/resurse/${post.slug}): ${post.description}\n`;
});
return new NextResponse(markdown, {
status: 200,
headers: {
'Content-Type': 'text/plain; charset=utf-8',
'Cache-Control': 'public, max-age=3600, s-maxage=3600',
},
});
} catch (error) {
return new NextResponse('Error generating llms.txt data', { status: 500 });
}
}
Webflow:Setarea LLMs.txt sau un Cloudflare Worker
Webflow are acum o setare proprie: în Site settings > SEO > LLMs.txt încarci fișierul (codat UTF-8, sub 100 KB), iar după publicare el e servit la https://domeniu.ro/llms.txt, pe domeniul tău propriu, nu și pe domeniul de test Webflow. Fișierul servit e cel încărcat de tine. Varianta mai veche, cu un proxy Cloudflare Workers în fața site-ului, are sens doar dacă vrei să servești fișierul din cod:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url)
// Interceptează doar ruta /llms.txt
if (url.pathname === '/llms.txt') {
const llmsContent = `# Nume Proiect Webflow\n\n` +
`Descriere tehnică a serviciilor companiei tale.\n\n` +
`## Sitemaps\n` +
`- [Sitemap](https://domeniu.ro/sitemap.xml)\n\n` +
`## Servicii Cheie\n` +
`- [Serviciu 1](https://domeniu.ro/serviciu-1): Descriere detaliată.\n` +
`- [Serviciu 2](https://domeniu.ro/serviciu-2): Descriere detaliată.\n`;
return new Response(llmsContent, {
headers: {
'content-type': 'text/plain; charset=utf-8',
'cache-control': 'public, max-age=86400'
},
})
}
// Permite ca toate celelalte cereri să meargă direct către serverele Webflow
return fetch(request)
}
Cum se validează și se testează fișierul llms.txt
După implementare, este esențial să te asiguri că fișierul este configurat corect și poate fi consumat fără erori de crawlerele AI. Urmează acești pași de diagnosticare:
- Verificarea antetului HTTP: Deschide terminalul și rulează o comandă
curl -I https://domeniu.ro/llms.txt. Răspunsul trebuie să conțină neapăratContent-Type: text/plain; charset=utf-8. Dacă antetul spunetext/html, corectează-l: fișierul e text simplu, așa că îl servești ca text. - Validarea codării Markdown: Asigură-te că linkurile sunt scrise corect (
[Titlu](URL)) și că nu există cod HTML rezidual injectat în interiorul descrierilor (de exemplu tags precum<p>sau&). - Testul de accesibilitate publică: Verifică dacă fișierul nu este blocat accidental prin reguli din
robots.txtsau printr-un sistem de securitate de tip firewall / Cloudflare Challenge care cere interacțiune umană (JS challenge). Crawlerele AI trebuie să poată citi fișierul printr-o simplă cerere GET directă.
FAQ.PROTOCOL
Întrebări frecvente
Istoricul modificărilor
- 31 octombrie 2026. Comparat cu documentația Google, cu propunerea de pe llmstxt.org (v2), cu paginile OpenAI și Perplexity despre crawlere, cu ajutorul Shopify și Webflow și cu studiile Ahrefs și Limy.AI. Corectat: formatul fișierului, după a doua versiune a propunerii, în care doar H1-ul e obligatoriu, iar nota de după link vine după două puncte, și în exemplele de cod;
/llms-full.txt, pe care textul versiunii actuale nu-l menționează; adoptarea „sub 11%”, înlocuită cu cele 28% din studiul Ahrefs, pe care Ahrefs le dă drept limită superioară, și cu cele 97% dintre fișiere fără nicio cerere în mai 2026; cifra Limy.AI, cu fereastra ei de 90 de zile și cu brandurile pe care le urmărește; Shopify, cu fișierul generat de platformă și cu șabloanelellms.txt.liquidșiagents.md.liquid, în locul paginii cu redirecționare; Webflow, cu setarea lui pentrullms.txt; fraza după care un site fărăllms.txtdevine invizibil pentru AI; predicția că fișierul va deveni standardul implicit; exemplele de cod, prezentate acum ca exemple, nu ca implementări testate; ce faci când fișierul e servit catext/html; răspunsurile despre blocarea crawlerelor, curobots.txtca cerere, despre Core Web Vitals, pe care fișierul nu le schimbă, și despre actualizare, cu trimitere la exemplele WordPress și Next.js. Tot atunci:robots.txtnu mai e prezentat ca respectat de toți boții AI, pentru că e o cerere, nu o barieră, iar boții care deschid o pagină la cererea unui utilizator pot să nu-l urmeze; Google-Extended, descris ca token pentru antrenarea Gemini și grounding, nu pentru AI Overviews; la Perplexity am scos declarația că ar citi fișierul cu prioritate și „mica excepție” sprijinită pe ea, pentru că n-am găsit-o pe pagina lui despre crawlere; rândul Google, cu ghidul Google în locul unei comparații fără sursă; sitemap-ul, cu ce face Google cu<lastmod>,<priority>și<changefreq>; trimiterea spre ghidul AEO și GEO, cu numele lui.
