Jak AI crawlują strony z nieskończonym przewijaniem? Nasza treść nie jest indeksowana

Discussion Technical SEO AI Crawlers
FM
FrontendDev_Marcus
Frontend Developer · 19 grudnia 2025

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:

  • React SPA z nieskończonym przewijaniem
  • SSR dla początkowego ładowania strony
  • Dodatkowa treść ładowana przez JavaScript podczas przewijania
  • 500+ wpisów na blogu, tylko ~50 wydaje się widocznych dla AI

Pytania:

  • Czy AI crawlujące w ogóle wykonują JavaScript?
  • Czy nieskończone przewijanie jest z natury niekompatybilne z widocznością w AI?
  • Jakie techniczne podejście jest najlepsze dla dostępności dla AI crawlujących?
  • Czy powinniśmy całkowicie przebudować paginację?

Czy inni frontendowcy mieli taki problem?

10 comments

10 komentarzy

CE
CrawlerTech_Expert Expert Technical SEO Consultant · 19 grudnia 2025

Wyjaśnię, jak różne AI crawlujące radzą sobie z JavaScriptem:

Wsparcie JavaScript przez AI crawlujące:

CrawlerRenderowanie JSSymulacja przewijaniaCzas oczekiwania
GPTBotOgraniczone/BrakNieMinimalny
Google-ExtendedDobre (jak Googlebot)NieStandardowy
ClaudeBotOgraniczoneNieMinimalny
PerplexityBotRóżnieNieOgraniczony
Common CrawlBrakNieBrak

Sedno problemu:

Nieskończone przewijanie wymaga:

  1. Wykonania JavaScriptu
  2. Wywołania zdarzenia przewijania
  3. Dodatkowych żądań HTTP
  4. Renderowania nowej treści

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.

FM
FrontendDev_Marcus OP · 19 grudnia 2025
Replying to CrawlerTech_Expert
Czyli właściwie musimy przebudować wszystko? Jakie jest zalecane podejście?
CE
CrawlerTech_Expert Expert · 19 grudnia 2025
Replying to FrontendDev_Marcus

Zalecane podejścia (od najbardziej przyjaznych AI):

Opcja 1: Tradycyjna paginacja (najbardziej przyjazna AI)

/blog/page/1
/blog/page/2
/blog/page/3
  • Każda strona ma własny URL
  • Treść w początkowym HTML
  • Sitemap obejmuje wszystkie strony
  • AI crawlujące mają dostęp do wszystkiego

Opcja 2: Podejście hybrydowe

  • Nieskończone przewijanie dla użytkowników
  • ALE także paginowane adresy URL
  • Sitemap kieruje na wersje paginowane
  • Użyj canonical, by uniknąć duplikatów
<!-- 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

  • Rozpoznawanie user-agentów AI
  • Serwowanie prerenderowanego HTML
  • Pełna treść w początkowej odpowiedzi

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.

RS
ReactDev_Sarah React Developer · 19 grudnia 2025

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:

  1. Mapa witryny zawiera tylko paginowane adresy

    • AI crawlujące znajdują strony /blog/archive/*
    • Te renderują pełną treść po stronie serwera
  2. Strona z nieskończonym przewijaniem ładuje tę samą treść

    • Wykorzystuje pod spodem API paginacji
    • Lepszy UX dla ludzi
  3. Linki wewnętrzne prowadzą do poszczególnych artykułów

    • Nie do pozycji na liście nieskończonego przewijania
    • Każdy artykuł ma własny URL
  4. robots.txt:

# Skup crawlerów na poszczególnych artykułach
# Nie na kontenerze nieskończonego przewijania
Sitemap: /sitemap.xml

Efekty:

  • UX dla ludzi bez zmian (nieskończone przewijanie)
  • AI crawlujące mają dostęp do całej treści przez strony archiwalne
  • Wszystkie artykuły zindeksowane
  • Liczba cytowań wzrosła 4x po wdrożeniu
NK
NextJSDev_Kevin · 18 grudnia 2025

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:

  • Statyczne strony dla każdej paginacji
  • Pełna treść w HTML już podczas budowania
  • AI crawlujące dostają kompletną treść
  • Szybkie ładowanie (statyczne)

Dodatkowo nieskończone przewijanie jako ulepszenie:

  • Po stronie klienta nieskończone przewijanie korzysta z tego samego API
  • Podejście progresywnego ulepszenia
  • Działa także bez JS

To daje Ci najlepsze z obu światów.

PS
Prerender_Specialist Expert · 18 grudnia 2025

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:

  • Prerender.io
  • Rendertron
  • Własne rozwiązanie na Puppeteerze
  • Prerenderowanie na etapie budowania

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.

SL
SEODevOps_Lisa · 18 grudnia 2025

Metodologia testowania dostępności dla AI crawlujących:

Testy manualne:

  1. Wyłączenie JavaScript:

    • Otwórz bloga w przeglądarce
    • Wyłącz JavaScript
    • Jaka treść jest widoczna?
    • To przybliżony widok crawlów bez JS
  2. Podgląd źródła strony:

    • Obejrzyj źródło strony (nie “zbadaj element”)
    • Czy treść jest w HTML?
    • Czy tylko jako placeholdery JS?
  3. Test curl:

    curl -A "GPTBot/1.0" https://yoursite.com/blog/
    
    • Czy odpowiedź zawiera faktyczną treść?

Testy automatyczne:

  1. Google Search Console:

    • Narzędzie Inspekcja adresu URL
    • “Wyświetl renderowaną stronę” pokazuje widok Googlebota
    • (Nie AI crawlujących, ale podobne renderowanie JS)
  2. Audyt Lighthouse:

    • Sprawdź kategorię “SEO”
    • Wskazuje problemy z crawlowalnością

Co powinno się pojawić:

  • Treść w początkowej odpowiedzi HTML
  • Linki do wszystkich stron wykrywalne
  • Treść widoczna bez JS
E
EcommerceDevSEO · 17 grudnia 2025

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:

  1. Na stronie zawsze dostępne linki do paginacji

    • Nawet gdy nieskończone przewijanie jest włączone
    • W stopce linki do stron 1, 2, 3…
  2. Parametry ?page= są canonical

    • Każda strona to osobna treść
    • Nie duplikat strony głównej
  3. Mapa witryny obejmuje wszystkie paginowane adresy

    • Nie tylko bazowy URL przewijania
  4. Produkty mają własne adresy

    • Paginacja kategorii służy do wykrywania
    • Produkty to właściwa treść

Efekt:

Platformy AI cytują nasze strony produktów, które znajdują dzięki paginacji kategorii.

FM
FrontendDev_Marcus OP Frontend Developer · 17 grudnia 2025

To było niesamowicie pomocne. Oto mój plan wdrożenia:

Podejście: hybrydowa paginacja

Faza 1: Dodanie tras paginowanych (tygodnie 1-2)

  • Stworzenie tras /blog/archive/[page]
  • SSR dla pełnej treści w HTML
  • Dodanie nawigacji paginacyjnej
  • Aktualizacja sitemap, by je uwzględniała

Faza 2: Aktualizacja obecnego nieskończonego przewijania (tydzień 3)

  • Pozostawienie nieskończonego przewijania na /blog
  • Strony archiwalne jako źródło danych
  • Canonical z /blog na /blog/archive/1

Faza 3: Testy i walidacja (tydzień 4)

  • Testy z wyłączonym JS
  • Testy curl dla user-agentów AI
  • Monitoring liczby cytowań przez AI

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:

  • Treść dostępna bez JavaScriptu
  • Każdy fragment treści ma bezpośredni adres URL
  • Sitemap obejmuje wszystkie strony z treścią
  • Nieskończone przewijanie to ulepszenie, nie wymóg

Dzięki wszystkim za szczegółowe, techniczne wskazówki.

Najczęściej zadawane pytania

Czy AI crawlujące radzą sobie z treścią ładowaną przez nieskończone przewijanie?

Większość AI crawlujących ma ograniczone możliwości renderowania JavaScriptu. Treści wymagające interakcji użytkownika (przewijania), by się załadować, są często niewidoczne dla systemów AI. Zaleca się renderowanie po stronie serwera lub podejście hybrydowe.

Jakie podejście do paginacji jest najlepsze dla AI crawlujących?

Tradycyjna paginacja z odrębnymi adresami URL dla każdej strony jest najbardziej przyjazna AI. Każda strona powinna być dostępna pod bezpośrednim adresem, ujęta w mapie witryny i nie wymagać JavaScriptu do wyświetlenia treści.

Czy AI crawlujące renderują JavaScript?

Renderowanie JavaScript przez AI crawlujące jest bardzo różne. GPTBot ma ograniczone możliwości JS. Niektóre crawlujące widzą tylko początkowy HTML. Dla widoczności w AI kluczowa treść powinna być w początkowej odpowiedzi serwera, a nie ładowana przez JS.

Jak mogę sprawdzić, czy AI crawlujące mają dostęp do mojej treści?

Wyłącz JavaScript i obejrzyj swoją stronę – to przybliża to, co widzi wiele AI crawlujących. Sprawdź też robots.txt, by upewnić się, że AI crawlujące nie są blokowane, i zweryfikuj, czy treść pojawia się w początkowym źródle HTML.

Monitoruj widoczność swojej treści w AI

Śledź, które z Twoich stron są odkrywane i cytowane przez platformy AI. Zidentyfikuj problemy z crawlowaniem wpływające na Twoją widoczność.

Dowiedz się więcej