Ogni giorno sempre più persone utilizzano ChatGPT, Perplexity e altri strumenti di intelligenza artificiale per cercare e riassumere contenuti. Come discusso in uno dei miei precedenti post su SEO a SAO, è solo questione di tempo prima che la maggior parte delle visite a siti Web e blog provenga da agenti di intelligenza artificiale.
Quando si tratta di rendere i tuoi contenuti accessibili ai modelli linguistici, esiste un modo più semplice rispetto alle complesse soluzioni di crawling, soprattutto per i siti generati staticamente con Astro. In questo post, ti guiderò nella creazione di un file llms.txt che espone i contenuti del tuo blog ai LLM in un formato pulito e strutturato.
Cos’è llms.txt?
Un file llms.txt è concettualmente simile a robots.txt ma progettato specificamente per i modelli linguistici. Fornisce una rappresentazione strutturata e basata su testo dei tuoi contenuti che è facile da analizzare e comprendere per gli LLM.
Gli LLM non sono molto bravi a navigare attraverso più pagine tramite collegamenti. Invece, gli LLM sono molto bravi a estrarre contenuti da una singola pagina e ad archiviarli nella loro memoria. È qui che llms.txt diventa prezioso.
Perché strumenti di crawling come Crawl4AI potrebbero essere eccessivi
Strumenti come Crawl4AI offrono potenti funzionalità di crawling di siti Web per LLM. Sebbene siano ideali per generare LLMs.txt per siti dinamici, possono essere eccessivi per i siti statici.
Soprattutto per i siti Astro, in cui il contenuto è in genere archiviato come file markdown con frontmatter, hai già contenuti perfettamente strutturati pronti per essere esposti direttamente.
Implementazione di un endpoint llms.txt in Astro
Ecco come puoi generare file LLMs.txt per il tuo sito Astro.
Crea un file in src/pages/llms.txt.ts (o src/pages/api/llms.txt.ts a seconda della configurazione di Astro) e aggiungi il codice seguente:
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 = `# Your Website Name - Complete Content Guide
This document contains the complete content from your website.
Website: https://yourwebsite.com
Last Updated: ${new Date().toISOString().split('T')[0]}
## Contenuto del blog
${sortedBlogs
    .map((post) => `#
## ${post.data.title}
URL: https://yourwebsite.com/blog/${post.data.slug || post.id}
Pubblicato: ${post.data.date}
Categoria: ${post.data.category}
Autore: ${post.data.author}
Descrizione: ${post.data.description}
${post.body}
---`).join('\n\n')}
## Sezioni di contenuti aggiuntive
${activeFeatures
    .map((feature) => `#
## ${feature.data.title}
URL: https://yourwebsite.com/${feature.data.slug}
Categoria: ${feature.data.category}
${feature.data.description}
${feature.body}
---`).join('\n\n')}
---
Questo contenuto è fornito per aiutare gli assistenti AI a comprendere le offerte del tuo sito Web e fornire informazioni accurate.`;
        return new Response(content, {
            headers: { 
                "Content-Type": "text/plain; charset=utf-8",
                "Cache-Control": "public, max-age=3600" // Cache for 1 hour
            },
        });
    } catch (error) {
        console.error('Error generating llms.txt:', error);
        return new Response('Error generating llms.txt', { status: 500 });
    }
};
Come funziona questo codice
Questo codice crea un endpoint API che:
- Recupera tutti i post dalle tue raccolte di contenuti utilizzando getCollection()
- Filtra i contenuti in bozza per includere solo gli articoli pubblicati
- Ordina i contenuti per data per mostrare prima i contenuti più recenti
- Crea un file di testo strutturato a partire dal titolo del tuo sito
- Include per ogni post:
- Il titolo del post come intestazione
- Un link diretto al post
- Metadati (data, categoria, autore, descrizione)
- Il contenuto completo del post
 
- Gestisce gli errori in modo corretto con la corretta registrazione degli errori
- Imposta le intestazioni appropriate inclusa la memorizzazione nella cache per le prestazioni
Personalizzazione per la struttura dei tuoi contenuti
Regolazione dei nomi delle raccolte
L’esempio sopra utilizza più raccolte. Se hai solo una raccolta di blog, semplificala:
export const GET: APIRoute = async () => {
    const posts = await getCollection("blog"); // Adjust to your collection name
    
    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 = `# Your Blog Name
${publishedPosts
    .map((post) => `# ${post.data.title}
https://yourwebsite.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" },
    });
};
Aggiunta del filtro dei contenuti
Potresti voler escludere determinate categorie o includere solo contenuti in primo piano:
// Include solo i post in primo piano
const featuredPosts = posts.filter(post => post.data.featured && !post.data.draft);
// Escludi categorie specifiche
const filteredPosts = posts.filter(post => 
    !post.data.draft && !['internal', 'private'].includes(post.data.category)
);
Vantaggi dell’utilizzo di llms.txt
1. Migliore rilevabilità dell’IA
Gli strumenti di intelligenza artificiale possono comprendere rapidamente l’intera libreria di contenuti senza eseguire la scansione di più pagine.
2. Contesto migliore per le risposte dell’IA
Quando gli utenti pongono domande relative ai tuoi contenuti, i modelli di intelligenza artificiale hanno accesso a informazioni complete e strutturate.
3. SEO per l’era dell’IA
Man mano che la ricerca si evolve verso risultati basati sull’intelligenza artificiale, avere contenuti strutturati per il consumo di intelligenza artificiale diventa fondamentale.
4. Vantaggi in termini di prestazioni
La generazione statica significa che il tuo file llms.txt viene creato al momento della build, fornendo tempi di risposta rapidi.
Testare l’implementazione di llms.txt
Dopo aver implementato l’endpoint, testalo eseguendo le seguenti operazioni:
- Visita l’endpoint direttamente: https://yoursite.com/llms.txt
- Controlla la struttura del contenuto per assicurarti che tutti i post siano inclusi
- Verifica che la formattazione sia pulita e leggibile
- Esegui test con strumenti di intelligenza artificiale chiedendo loro di analizzare il contenuto del tuo file llms.txt
Best practice per llms.txt
Mantieni aggiornato il contenuto
Aggiorna regolarmente il tuo file llms.txt ricostruendo il tuo sito quando pubblichi nuovi contenuti.
Includi metadati pertinenti
Aggiungi date di pubblicazione, categorie e descrizioni per aiutare l’IA a comprendere il contesto.
Struttura chiaramente il contenuto
Utilizza formati di intestazione coerenti e separatori chiari tra le sezioni.
Monitora le dimensioni del file
Per i siti con centinaia di post, valuta la possibilità di impaginare o filtrare i contenuti per mantenere il file gestibile.
Conclusione
La creazione di un file llms.txt per il tuo sito Web Astro è un modo semplice per rendere i tuoi contenuti accessibili ai modelli linguistici di intelligenza artificiale. Questo approccio sfrutta le raccolte di contenuti di Astro per creare una visione strutturata e completa del contenuto del tuo sito.
Man mano che l’intelligenza artificiale diventa sempre più importante per la scoperta di contenuti, l’implementazione di llms.txt posiziona il tuo sito Web per una migliore visibilità nel panorama della ricerca basato sull’intelligenza artificiale. L’implementazione è semplice, performante e facile da mantenere come parte del processo di compilazione di Astro.
Inizia oggi stesso a implementare llms.txt per assicurarti che i tuoi contenuti siano pronti per il futuro della ricerca e della scoperta basate sull’intelligenza artificiale.
Domande frequenti
Qual è la differenza tra llms.txt e sitemap.xml?
Mentre sitemap.xml elenca le tue pagine per i crawler dei motori di ricerca, llms.txt fornisce il contenuto effettivo in un formato ottimizzato per consentire ai modelli linguistici di comprendere ed elaborare.
Ogni quanto devo aggiornare il mio file llms.txt?
Il tuo file llms.txt si aggiorna automaticamente quando ricostruisci il tuo sito Astro, quindi rimane aggiornato con il tuo programma di pubblicazione dei contenuti.
Posso includere immagini e contenuti multimediali in llms.txt?
llms.txt è basato su testo, quindi includi descrizioni di immagini e contenuti multimediali anziché i file stessi. Concentrati sui contenuti testuali che l’IA può elaborare in modo efficace.
llms.txt influirà sulla mia SEO?
No, llms.txt non avrà un impatto negativo sulla SEO tradizionale. È progettato per integrare la tua strategia SEO esistente rendendo i contenuti accessibili agli strumenti di intelligenza artificiale.
Quanto deve essere grande il mio file llms.txt?
Non ci sono limiti rigidi, ma mantienilo ragionevole. Per i siti con centinaia di post, valuta la possibilità di filtrare per includere solo i contenuti più importanti o recenti.
 
  
  
  
  
  
 