La nostra SPA React è completamente invisibile ai crawler AI - come risolviamo?
Discussione della community sull'ottimizzazione delle Single Page Application per i motori di ricerca AI. Soluzioni reali per rendere i siti ricchi di JavaScrip...
Abbiamo realizzato un sito moderno in React con infinite scroll per il nostro blog. Ottima esperienza utente, ma i nostri contenuti non appaiono per niente nelle risposte AI.
Google lo indicizza bene (dopo un po’ di lavoro con SSR). Ma le piattaforme AI sembrano ignorare la maggior parte dei nostri contenuti.
Il nostro setup:
Domande:
Qualche dev frontend ci ha già avuto a che fare?
Ti spiego come i vari AI crawler gestiscono JavaScript:
Supporto JavaScript degli AI Crawler:
| Crawler | Rendering JS | Simulazione Scroll | Tempo Attesa |
|---|---|---|---|
| GPTBot | Limitato/Nullo | No | Minimo |
| Google-Extended | Buono (come Googlebot) | No | Standard |
| ClaudeBot | Limitato | No | Minimo |
| PerplexityBot | Variabile | No | Limitato |
| Common Crawl | Nessuno | No | Nessuno |
Il problema principale:
L’infinite scroll richiede:
La maggior parte degli AI crawler si blocca al punto 1 o 2.
Perché l’SSR non basta:
Il tuo SSR serve solo la pagina iniziale. Ma i contenuti dell’infinite scroll non sono “iniziali” – si caricano con l’interazione. L’SSR non risolve la dipendenza dall’interazione.
Il problema di fondo:
L’infinite scroll è fondamentalmente incompatibile con le attuali capacità degli AI crawler. Serve un approccio alternativo.
Approcci consigliati (in ordine di compatibilità AI):
Opzione 1: Paginazione tradizionale (la più compatibile AI)
/blog/page/1
/blog/page/2
/blog/page/3
Opzione 2: Approccio ibrido
<!-- Pagina con infinite scroll -->
<link rel="canonical" href="/blog/page/1" />
<!-- Paginazione sempre disponibile -->
<nav>
<a href="/blog/page/1">1</a>
<a href="/blog/page/2">2</a>
</nav>
Opzione 3: Prerender per AI crawler
Ogni opzione ha i suoi compromessi. L’opzione 1 è la più semplice e affidabile per l’AI. L’opzione 2 preserva la tua UX aggiungendo accessibilità AI.
Abbiamo affrontato esattamente questo problema. Ecco la nostra soluzione:
Implementazione dell’approccio ibrido:
// Struttura URL
/blog // Infinite scroll (default utente)
/blog/archive/1 // Paginato (accessibile ai crawler)
/blog/archive/2
Dettagli chiave di implementazione:
La sitemap include solo gli URL paginati
La pagina infinite scroll carica gli stessi contenuti
I link interni puntano ai singoli articoli
Indicazioni robots.txt:
# Fai concentrare i crawler sugli articoli singoli
# Non sul contenitore infinite scroll
Sitemap: /sitemap.xml
Risultati:
Approccio specifico per Next.js:
Utilizzo di getStaticPaths + getStaticProps:
// pages/blog/page/[page].js
export async function getStaticPaths() {
const totalPages = await getTotalPages();
const paths = Array.from({ length: totalPages }, (_, i) => ({
params: { page: String(i + 1) }
}));
return { paths, fallback: false };
}
export async function getStaticProps({ params }) {
const posts = await getPostsForPage(params.page);
return { props: { posts, page: params.page } };
}
Vantaggi:
Poi aggiungi l’infinite scroll come enhancement:
Così hai il meglio di entrambi i mondi.
Aggiungo il prerendering come opzione:
Servizi di prerendering per AI crawler:
Puoi rilevare gli user agent degli AI crawler e servire contenuti prerenderizzati:
// middleware
if (isAICrawler(req.headers['user-agent'])) {
return servePrerenderedVersion(req.url);
}
Riconoscimento AI crawler:
const aiCrawlers = [
'GPTBot',
'ChatGPT-User',
'Google-Extended',
'ClaudeBot',
'PerplexityBot',
'anthropic-ai'
];
function isAICrawler(userAgent) {
return aiCrawlers.some(crawler =>
userAgent.includes(crawler)
);
}
Opzioni di prerendering:
Attenzione:
Non tutti gli AI crawler si identificano chiaramente. Alcuni potrebbero sfuggire. Questo è un approccio supplementare, non sostituisce una paginazione corretta.
Metodologia di test per accessibilità AI crawler:
Test manuali:
Test disabilitando JavaScript:
Test visualizza sorgente:
Test con curl:
curl -A "GPTBot/1.0" https://yoursite.com/blog/
Test automatici:
Google Search Console:
Audit Lighthouse:
Cosa vuoi vedere:
Prospettiva e-commerce:
Abbiamo 10.000+ prodotti con funzionalità “carica altri”. Ecco la nostra soluzione:
Struttura delle pagine categoria:
/category/shoes # Prime 24 prodotti + load more
/category/shoes?page=2 # Prodotti 25-48
/category/shoes?page=3 # Prodotti 49-72
Implementazione:
La pagina iniziale ha sempre i link di paginazione
I parametri ?page= sono canonici
La sitemap include tutti gli URL paginati
I prodotti hanno URL individuali
Risultato:
Le piattaforme AI citano le nostre pagine prodotto individuali, che scoprono attraverso la struttura di categoria paginata.
È stato davvero utile. Ecco il mio piano di implementazione:
Approccio: paginazione ibrida
Fase 1: Aggiunta delle rotte paginate (Settimana 1-2)
Fase 2: Aggiornamento infinite scroll esistente (Settimana 3)
Fase 3: Test e validazione (Settimana 4)
Implementazione tecnica:
/blog → Infinite scroll (utenti, canonical verso archive/1)
/blog/archive/1 → Paginato (crawler, canonical su se stesso)
/blog/archive/2 → Paginato (crawler)
/blog/[slug] → Articoli individuali (contenuto principale)
Principi chiave:
Grazie a tutti per le dettagliate indicazioni tecniche.
Get personalized help from our team. We'll respond within 24 hours.
Tieni traccia di quali pagine vengono scoperte e citate dalle piattaforme AI. Identifica problemi di crawling che influenzano la tua visibilità.
Discussione della community sull'ottimizzazione delle Single Page Application per i motori di ricerca AI. Soluzioni reali per rendere i siti ricchi di JavaScrip...
Discussione della community su come il JavaScript influenzi il crawling AI. Esperienze reali di sviluppatori e professionisti SEO che testano l’impatto del rend...
Discussione della community sul rendering JavaScript da parte dei crawler AI. Gli sviluppatori condividono esperienze con React, Next.js e altri framework JS pe...
Consenso Cookie
Usiamo i cookie per migliorare la tua esperienza di navigazione e analizzare il nostro traffico. See our privacy policy.