Czy AI crawlery renderują JavaScript? Nasza strona jest oparta na React i się martwię
Dyskusja społeczności na temat renderowania JavaScript przez crawlery AI. Programiści dzielą się doświadczeniami z React, Next.js i innymi frameworkami JS w kon...
Dyskusja społecznościowa o nieskończonym przewijaniu i dostępności dla crawlerów AI. Specjaliści SEO dzielą się rozwiązaniami na temat udostępniania dynamicznie ładowanej treści systemom AI.
Zbudowaliśmy nowoczesną stronę w React z nieskończonym przewijaniem na blogu. Świetne doświadczenie użytkownika, ale nasza treść w ogóle nie pojawia się w odpowiedziach AI.
Google indeksuje ją dobrze (po wdrożeniu SSR). Ale platformy AI wydają się omijać większość naszej treści.
Nasz setup:
Pytania:
Czy inni frontendowcy mieli taki problem?
Wyjaśnię, jak różne AI crawlujące radzą sobie z JavaScriptem:
Wsparcie JavaScript przez AI crawlujące:
| Crawler | Renderowanie JS | Symulacja przewijania | Czas oczekiwania |
|---|---|---|---|
| GPTBot | Ograniczone/Brak | Nie | Minimalny |
| Google-Extended | Dobre (jak Googlebot) | Nie | Standardowy |
| ClaudeBot | Ograniczone | Nie | Minimalny |
| PerplexityBot | Różnie | Nie | Ograniczony |
| Common Crawl | Brak | Nie | Brak |
Sedno problemu:
Nieskończone przewijanie wymaga:
Większość AI crawlujących odpada na etapie 1 lub 2.
Dlaczego SSR to za mało:
SSR serwuje początkową stronę. Ale treść ładowana przez nieskończone przewijanie nie jest “początkowa” – ładuje się po interakcji. SSR nie rozwiązuje zależności od interakcji.
Fundamentalny problem:
Nieskończone przewijanie jest z natury niekompatybilne z obecnymi możliwościami AI crawlujących. Potrzebujesz alternatywnego podejścia.
Zalecane podejścia (od najbardziej przyjaznych AI):
Opcja 1: Tradycyjna paginacja (najbardziej przyjazna AI)
/blog/page/1
/blog/page/2
/blog/page/3
Opcja 2: Podejście hybrydowe
<!-- Strona z nieskończonym przewijaniem -->
<link rel="canonical" href="/blog/page/1" />
<!-- Zawsze dostępna paginacja -->
<nav>
<a href="/blog/page/1">1</a>
<a href="/blog/page/2">2</a>
</nav>
Opcja 3: Prerenderowanie dla AI crawlujących
Każda opcja ma kompromisy. Opcja 1 jest najprostsza i najpewniejsza dla AI. Opcja 2 zachowuje UX, a jednocześnie zapewnia dostępność dla AI.
Mieliśmy dokładnie ten sam problem. Oto nasze rozwiązanie:
Implementacja podejścia hybrydowego:
// Struktura URL
/blog // Nieskończone przewijanie (domyślne dla użytkownika)
/blog/archive/1 // Paginacja (dostępne dla crawlerów)
/blog/archive/2
Kluczowe szczegóły wdrożenia:
Mapa witryny zawiera tylko paginowane adresy
Strona z nieskończonym przewijaniem ładuje tę samą treść
Linki wewnętrzne prowadzą do poszczególnych artykułów
robots.txt:
# Skup crawlerów na poszczególnych artykułach
# Nie na kontenerze nieskończonego przewijania
Sitemap: /sitemap.xml
Efekty:
Podejście specyficzne dla Next.js:
Wykorzystanie 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 } };
}
Korzyści:
Dodatkowo nieskończone przewijanie jako ulepszenie:
To daje Ci najlepsze z obu światów.
Dodając prerenderowanie jako opcję:
Prerendering dla AI crawlujących:
Możesz wykrywać user-agentów AI i serwować prerenderowaną treść:
// middleware
if (isAICrawler(req.headers['user-agent'])) {
return servePrerenderedVersion(req.url);
}
Wykrywanie AI crawlujących:
const aiCrawlers = [
'GPTBot',
'ChatGPT-User',
'Google-Extended',
'ClaudeBot',
'PerplexityBot',
'anthropic-ai'
];
function isAICrawler(userAgent) {
return aiCrawlers.some(crawler =>
userAgent.includes(crawler)
);
}
Opcje prerenderowania:
Uwaga:
Nie wszystkie AI crawlujące jednoznacznie się identyfikują. Niektóre mogą zostać pominięte. To podejście uzupełniające, a nie zamiennik poprawnej paginacji.
Metodologia testowania dostępności dla AI crawlujących:
Testy manualne:
Wyłączenie JavaScript:
Podgląd źródła strony:
Test curl:
curl -A "GPTBot/1.0" https://yoursite.com/blog/
Testy automatyczne:
Google Search Console:
Audyt Lighthouse:
Co powinno się pojawić:
Perspektywa e-commerce:
Mamy 10 000+ produktów z funkcją “załaduj więcej”. Oto nasze rozwiązanie:
Struktura strony kategorii:
/category/shoes # Pierwsze 24 produkty + załaduj więcej
/category/shoes?page=2 # Produkty 25-48
/category/shoes?page=3 # Produkty 49-72
Wdrożenie:
Na stronie zawsze dostępne linki do paginacji
Parametry ?page= są canonical
Mapa witryny obejmuje wszystkie paginowane adresy
Produkty mają własne adresy
Efekt:
Platformy AI cytują nasze strony produktów, które znajdują dzięki paginacji kategorii.
To było niesamowicie pomocne. Oto mój plan wdrożenia:
Podejście: hybrydowa paginacja
Faza 1: Dodanie tras paginowanych (tygodnie 1-2)
Faza 2: Aktualizacja obecnego nieskończonego przewijania (tydzień 3)
Faza 3: Testy i walidacja (tydzień 4)
Implementacja techniczna:
/blog → Nieskończone przewijanie (dla ludzi, canonical do archive/1)
/blog/archive/1 → Paginacja (dla crawlerów, canonical do siebie)
/blog/archive/2 → Paginacja (dla crawlerów)
/blog/[slug] → Pojedyncze artykuły (główna treść)
Kluczowe zasady:
Dzięki wszystkim za szczegółowe, techniczne wskazówki.
Śledź, które z Twoich stron są odkrywane i cytowane przez platformy AI. Zidentyfikuj problemy z crawlowaniem wpływające na Twoją widoczność.
Dyskusja społeczności na temat renderowania JavaScript przez crawlery AI. Programiści dzielą się doświadczeniami z React, Next.js i innymi frameworkami JS w kon...
Dyskusja społecznościowa o tym, jak JavaScript wpływa na indeksowanie przez AI. Prawdziwe doświadczenia deweloperów i specjalistów SEO testujących wpływ rendero...
Dyskusja społeczności na temat renderowania po stronie serwera (SSR) dla widoczności w AI. Prawdziwe doświadczenia deweloperów i specjalistów SEO dotyczące wpły...