Elke dag gebruiken meer en meer mensen ChatGPT, Perplexity en andere AI-tools om content te zoeken en samen te vatten. Zoals besproken in een van mijn eerdere berichten over SEO naar SAO, is het slechts een kwestie van tijd voordat de meeste bezoeken aan websites en blogs afkomstig zijn van AI-agenten.
Als het gaat om het toegankelijk maken van uw content voor taalmodellen, is er een eenvoudigere manier dan complexe crawling-oplossingen - vooral voor statisch gegenereerde sites gebouwd met Astro. In dit bericht leid ik u door het maken van een llms.txt-bestand dat uw blogcontent op een schone, gestructureerde manier aan LLM’s blootstelt.
Wat is llms.txt?
Een llms.txt-bestand is conceptueel vergelijkbaar met robots.txt, maar specifiek ontworpen voor taalmodellen. Het biedt een gestructureerde, op tekst gebaseerde weergave van uw content die gemakkelijk te parseren en te begrijpen is voor LLM’s.
LLM’s zijn niet erg goed in het navigeren door meerdere pagina’s via links. In plaats daarvan zijn LLM’s erg goed in het scrapen van content van een enkele pagina en het opslaan ervan in hun geheugen. Dit is waar llms.txt van onschatbare waarde wordt.
Waarom Crawling Tools zoals Crawl4AI Mogelijk Overkill Zijn
Tools zoals Crawl4AI bieden krachtige mogelijkheden voor het crawlen van websites voor LLM’s. Hoewel ze ideaal zijn voor het genereren van LLM’s.txt voor dynamische sites, kunnen ze overkill zijn voor statische sites.
Vooral voor Astro-sites, waar content meestal wordt opgeslagen als markdown-bestanden met frontmatter, hebt u al perfect gestructureerde content klaar om direct te worden blootgesteld.
Een llms.txt-endpoint implementeren in Astro
Hier leest u hoe u LLM’s.txt-bestanden voor uw Astro-site kunt genereren.
Maak een bestand op src/pages/llms.txt.ts
(of src/pages/api/llms.txt.ts
afhankelijk van uw Astro-configuratie) en voeg de volgende code toe:
import { getCollection } from "astro:content";
import type { APIRoute } from "astro";
export const GET: APIRoute = async () => {
try {
// Haal alle contentcollecties op
const [blogs, features, transcriptions, alternatives, help] = await Promise.all([
getCollection("blog"),
getCollection("features"),
getCollection("transcription"),
getCollection("alternatives"),
getCollection("help")
]);
// Sorteer blogs op datum (nieuwste eerst)
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 = `# Uw Websitenaam - Complete Contentgids
Dit document bevat de complete content van uw website.
Website: https://uwwebsite.com
Laatst bijgewerkt: ${new Date().toISOString().split('T')[0]}
## Blogcontent
${sortedBlogs
.map((post) => `#
## ${post.data.title}
URL: https://uwwebsite.com/blog/${post.data.slug || post.id}
Gepubliceerd: ${post.data.date}
Categorie: ${post.data.category}
Auteur: ${post.data.author}
Beschrijving: ${post.data.description}
${post.body}
---`).join('\n\n')}
## Aanvullende Contentsecties
${activeFeatures
.map((feature) => `#
## ${feature.data.title}
URL: https://uwwebsite.com/${feature.data.slug}
Categorie: ${feature.data.category}
${feature.data.description}
${feature.body}
---`).join('\n\n')}
---
Deze content wordt verstrekt om AI-assistenten te helpen het aanbod van uw website te begrijpen en nauwkeurige informatie te verstrekken.`;
return new Response(content, {
headers: {
"Content-Type": "text/plain; charset=utf-8",
"Cache-Control": "public, max-age=3600" // 1 uur cachen
},
});
} catch (error) {
console.error('Fout bij het genereren van llms.txt:', error);
return new Response('Fout bij het genereren van llms.txt', { status: 500 });
}
};
Hoe Deze Code Werkt
Deze code maakt een API-endpoint dat:
- Alle berichten ophaalt uit uw contentcollecties met behulp van
getCollection()
- Conceptcontent eruit filtert om alleen gepubliceerde artikelen op te nemen
- Content sorteert op datum om de meest recente content eerst weer te geven
- Een gestructureerd tekstbestand maakt, beginnend met de titel van uw site
- Voor elk bericht omvat:
- De titel van het bericht als kop
- Een directe link naar het bericht
- Metadata (datum, categorie, auteur, beschrijving)
- De volledige content van het bericht
- Fouten op een correcte manier afhandelt met de juiste foutregistratie
- De juiste headers instelt, inclusief caching voor prestaties
Aanpassen voor Uw Contentstructuur
Collectienamen Aanpassen
Het bovenstaande voorbeeld gebruikt meerdere collecties. Als u slechts één blogcollectie hebt, vereenvoudig deze dan:
export const GET: APIRoute = async () => {
const posts = await getCollection("blog"); // Pas aan aan uw collectienaam
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 = `# Uw Blognaam
${publishedPosts
.map((post) => `# ${post.data.title}
https://uwwebsite.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" },
});
};
Contentfiltering Toevoegen
Mogelijk wilt u bepaalde categorieën uitsluiten of alleen aanbevolen content opnemen:
// Neem alleen aanbevolen berichten op
const featuredPosts = posts.filter(post => post.data.featured && !post.data.draft);
// Sluit specifieke categorieën uit
const filteredPosts = posts.filter(post =>
!post.data.draft && !['internal', 'private'].includes(post.data.category)
);
Voordelen van Het Gebruik van llms.txt
1. Verbeterde AI-detecteerbaarheid
AI-tools kunnen snel uw volledige contentbibliotheek begrijpen zonder meerdere pagina’s te crawlen.
2. Betere Context voor AI-antwoorden
Wanneer gebruikers vragen stellen met betrekking tot uw content, hebben AI-modellen toegang tot uitgebreide, gestructureerde informatie.
3. SEO voor Het AI-tijdperk
Aangezien zoeken evolueert naar AI-gestuurde resultaten, wordt het cruciaal om gestructureerde content te hebben voor AI-consumptie.
4. Prestatievoordelen
Statische generatie betekent dat uw llms.txt-bestand tijdens de build wordt gemaakt, wat snelle reactietijden oplevert.
Uw llms.txt-implementatie Testen
Test het endpoint na de implementatie door:
- Het endpoint rechtstreeks te bezoeken:
https://uwsite.com/llms.txt
- De contentstructuur te controleren om ervoor te zorgen dat alle berichten zijn opgenomen
- Te verifiëren of de opmaak schoon en leesbaar is
- Te testen met AI-tools door ze te vragen uw llms.txt-content te analyseren
Best Practices voor llms.txt
Content Up-to-date Houden
Werk uw llms.txt regelmatig bij door uw site opnieuw op te bouwen wanneer u nieuwe content publiceert.
Relevante Metadata Opnemen
Voeg publicatiedatums, categorieën en beschrijvingen toe om AI te helpen de context te begrijpen.
Content Duidelijk Structureren
Gebruik consistente kopindelings en duidelijke scheidingstekens tussen secties.
Bestandsgrootte Bewaken
Voor sites met honderden berichten kunt u overwegen om content te pagineren of te filteren om het bestand beheersbaar te houden.
Conclusie
Het maken van een llms.txt-bestand voor uw Astro-website is een eenvoudige manier om uw content toegankelijk te maken voor AI-taalmodellen. Deze aanpak maakt gebruik van Astro’s contentcollecties om een gestructureerd, uitgebreid overzicht van de content van uw site te creëren.
Aangezien AI steeds belangrijker wordt voor het ontdekken van content, positioneert het implementeren van llms.txt uw website voor een betere zichtbaarheid in het AI-gestuurde zoeklandschap. De implementatie is eenvoudig, prestatiegericht en gemakkelijk te onderhouden als onderdeel van uw Astro-buildproces.
Begin vandaag nog met het implementeren van llms.txt om ervoor te zorgen dat uw content klaar is voor de toekomst van AI-gestuurd zoeken en ontdekken.
Veelgestelde vragen
Wat is het verschil tussen llms.txt en sitemap.xml?
Terwijl sitemap.xml uw pagina’s vermeldt voor crawlers van zoekmachines, biedt llms.txt de daadwerkelijke content in een indeling die is geoptimaliseerd voor taalmodellen om te begrijpen en te verwerken.
Hoe vaak moet ik mijn llms.txt-bestand bijwerken?
Uw llms.txt-bestand wordt automatisch bijgewerkt wanneer u uw Astro-site opnieuw opbouwt, zodat het actueel blijft met uw contentpublicatieschema.
Kan ik afbeeldingen en media opnemen in llms.txt?
llms.txt is op tekst gebaseerd, dus neem beschrijvingen van afbeeldingen en media op in plaats van de bestanden zelf. Concentreer u op tekstuele content die AI effectief kan verwerken.
Heeft llms.txt invloed op mijn SEO?
Nee, llms.txt heeft geen negatieve invloed op traditionele SEO. Het is ontworpen om uw bestaande SEO-strategie aan te vullen door content toegankelijk te maken voor AI-tools.
Hoe groot moet mijn llms.txt-bestand zijn?
Er is geen strikte limiet, maar houd het redelijk. Voor sites met honderden berichten kunt u overwegen om te filteren om alleen uw belangrijkste of meest recente content op te nemen.