Fetcher chatbota AI pobiera stronę B2B przez Cloudflare CDN i robots.txt, odczytując specyfikacje produktów jako tekst HTML i dane strukturalne JSON-LD.

Czy AI naprawdę może odczytać Twoją stronę internetową?

Żeby asystent mógł zacytować Twoją stronę, na produkcji muszą działać trzy rzeczy. Odpowiednie boty mają dostęp. Serwer zwraca stronę, póki kupujący wciąż prowadzi rozmowę. Fakty są w pierwszej odpowiedzi HTML, więc fetcher, który nie uruchamia JavaScript, może je odczytać.

Czy AI może odczytać stronę internetową to w dużej mierze pytanie o SEO techniczne, z dodatkowymi botami i dodatkowymi danymi. Jeśli Googlebot już dostaje HTML, który można indeksować, masz większość warstwy. Co jeszcze trzeba włączyć: nazwany dostęp dla GPTBot i ChatGPT-User, przejście przez CDN i WAF (Cloudflare wdraża kontrolę botów AI z domyślnym blokowaniem), oraz te same fakty jako dane typowane (tabele plus JSON-LD), żeby maszyna mogła użyć liczby jako ceny czy wymiaru zamiast domyślać się ze zdania. Przeczytaj też: rekomendacja AI dla dostawców: fakty do shortlisty - dlaczego opublikowane specyfikacje mają znaczenie, gdy fetcher może już odczytać stronę.

W tym artykule:

Jak strona trafia do odpowiedzi AI?

Asystenci korzystają z dwóch ścieżek pobierania. Polityka dostępu musi nazwać obie, bo to różni agenci z różnymi zadaniami.

Crawl treningowy. Crawler pobiera publiczne strony według własnego harmonogramu. Ten zbiór później zasila trening modelu. Zezwól na GPTBot i ClaudeBot, a przyszłe modele mogą uwzględnić to, co opublikowałeś.

Pobranie na żywo. Gdy kupujący zadaje pytanie, asystent otwiera Twoją stronę w trakcie tej rozmowy i szuka wartości, o którą zapytano. Zezwól na ChatGPT-User i OAI-SearchBot, a dzisiejsze odpowiedzi mogą cytować stronę na żywo.

Zapisz obie reguły w robots.txt i na liście dozwolonych WAF jako osobne wpisy. Jedna ogólna linia „boty” traktuje crawler treningowy i fetcher na żywo jak tego samego klienta. To nie jest ten sam klient.

AgentOperatorZezwól, żeby
GPTBotOpenAIPrzyszłe modele mogły trenować na publicznych stronach
ChatGPT-UserOpenAIChatGPT mógł pobrać stronę podczas pytania na żywo
OAI-SearchBotOpenAIWyszukiwanie OpenAI mogło pobrać stronę do odpowiedzi
ClaudeBotAnthropicPrzyszłe modele Claude mogły trenować na publicznych stronach
PerplexityBotPerplexityPerplexity mógł pobrać stronę (traktuj jak na żywo, dopóki nie masz osobnej polityki)
GooglebotGoogleWyszukiwarka i AI Overviews mogły uwzględnić stronę

Tożsamość potwierdzaj tak samo jak Googlebot: opublikowane zakresy IP i reverse DNS. Zezwól tym źródłom. Same stringi user-agent łatwo skopiować, więc lista dozwolonych powinna opierać się na zweryfikowanych zakresach.

Które boty zezwolić i co każdy z nich umożliwia?

Reguły ustaw na hoście produkcyjnym, w dwóch miejscach, które muszą się zgadzać: robots.txt i na brzegu sieci (Cloudflare, AWS WAF, CDN).

W robots.txt zezwól agentom z tabeli po nazwie. Staging często wysyła z Disallow: /. Skopiuj ten plik na produkcję, a każdy wymieniony bot pominie witrynę. Przeglądarka nadal ładuje stronę, bo nie czyta robots.txt. Sprawdź URL na żywo:

curl -s "https://www.example.com/robots.txt"

Chcesz jawne Allow (albo brak Disallow) dla GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot i PerplexityBot, każdego dla ścieżek, które mają być cytowane. Plik produkcyjny, który nazywa zadania, wygląda tak:

User-agent: GPTBot
Allow: /

User-agent: ChatGPT-User
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: PerplexityBot
Allow: /

GPTBot na tych ścieżkach pozwala przyszłym modelom trenować na stronach. ChatGPT-User na tych samych ścieżkach pozwala pobrać je podczas pytania na żywo. Dwie grupy User-agent, dwa efekty. Ogranicz Allow do publicznych sekcji, które mają być cytowane, jeśli to węższy zakres niż całe drzewo.

Trzecia kontrola siedzi na samej stronie: meta name="robots" i nagłówek X-Robots-Tag. Ustaw index, follow na URL-ach, które mają być cytowane, żeby Google Search mógł utrzymać stronę w puli snippetów oraz AI Overviews i AI Mode. Te powierzchnie Google nadal działają na indeksie Google. Zezwolenie Googlebot utrzymuje stronę w tym indeksie. Zezwolenie ChatGPT-User to osobne zadanie, na osobnym agencie.

Na brzegu dodaj opublikowane zakresy IP tych operatorów do listy dozwolonych, żeby zweryfikowane fetchery dostawały HTTP 200. Dane Akamai z 2025 r. wskazują, że boty stanowiły 51% ruchu w internecie, a crawlery AI około jedną piątą całego ruchu. Ta skala tłumaczy, dlaczego domyślne pakiety WAF grupują nieznanych klientów ze scraperami. Zachowaj kontrolę nadużyć dla niezweryfikowanego ruchu. Daj nazwanym, zweryfikowanym fetcherom AI wyraźną ścieżkę.

Marketing edytuje plik w CMS. Inżynieria sieciowa zarządza WAF. Obie strony muszą zezwolić na tych samych agentów. robots.txt w Drupalu, który zezwala ChatGPT-User, pomaga dopiero wtedy, gdy proxy z przodu też zwraca 200 dla tego klienta.

Czy CDN lub warstwa bot-fight nadal przepuszcza te boty?

Publiczny hostname to adres, pod który trafia fetcher. To CDN, WAF i produkt bot-fight, potem cache, potem origin. Origin może zezwalać GPTBot w Drupalu, podczas gdy brzeg nadal wystawia wyzwanie, 403 albo przepisany robots.txt. Sprawdź brzeg jako osobną warstwę.

Cloudflare to przypadek, który widzimy najczęściej, bo wdraża kontrolę crawlerów AI na każdym planie. Aktualne nazwy produktów i domyślne ustawienia są w dokumentacji Cloudflare: AI bot policy docs i managed robots.txt docs.

Block AI bots / AI bot policies. Od 1 lipca 2025 r. Cloudflare pyta każdą nową domenę, czy crawlery AI mogą wejść na witrynę, a konserwatywny wybór to blokada. W panelu znajdziesz to w Security Settings jako Configure AI bot policies (starszy przełącznik Block AI bots wycofuje się 15 września 2026 r.). Cloudflare dzieli ruch na Search, Agent i Training. Zezwól Training, żeby GPTBot i ClaudeBot mogły crawlować publiczne strony pod przyszłe modele. Zezwól Agent, żeby fetcher czatu na żywo (ChatGPT-User i podobne) mógł otworzyć stronę podczas pytania. Zezwól Search, żeby crawlery retrieval mogły indeksować pod odpowiedzi. Od 15 września 2026 r. nowe domeny Cloudflare będą blokować Training i Agent na stronach z reklamami, a Search zostanie dozwolony, chyba że to zmienisz.

Managed robots.txt. Włącz to ustawienie, a Cloudflare dokleja własny plik przed Twoim. Zarządzany blok zawiera Disallow: / dla GPTBot, ClaudeBot, Google-Extended, Bytespider, CCBot i innych, plus sygnał treści ai-train=no. Twoje Allow: / dla GPTBot w Drupalu leży poniżej tego prependu, a wiele crawlerów respektuje pierwszą pasującą grupę. Wywołaj publiczny https://www.example.com/robots.txt. Jeśli widzisz # BEGIN Cloudflare Managed content i User-agent: GPTBot / Disallow: /, brzeg mówi crawlerom treningowym, żeby pominęły witrynę. Wyłącz zarządzany plik albo zamień te grupy na Allow, gdy crawl treningowy jest częścią polityki.

Bot Fight Mode i Super Bot Fight Mode. Te produkty wystawiają wyzwania JavaScript ruchowi wyglądającemu na automatyczny. Fetchery answer-time nie uruchamiają JavaScript, więc strona wyzwania to nie Twój artykuł. Bot Fight Mode nie da się pominąć regułą allow w WAF. Jeśli jest włączony, wyłącz go dla tego efektu albo przejdź na Super Bot Fight Mode i pomiń zweryfikowane boty AI tam. I'm Under Attack to ta sama klasa wyzwania, na całą witrynę.

Custom WAF i reguły bot-score. Reguła, która wyzwania każdego klienta z bot score poniżej 30, to częsty domyślny efekt po tickecie hardeningu bezpieczeństwa. Zweryfikowany GPTBot i ChatGPT-User powinny przejść przez listę verified-bot Cloudflare. Niezweryfikowane podróbki nie. Zachowaj regułę score dla nieznanych scraperów. Dodaj jawne allow (albo skip) dla nazwanych, zweryfikowanych agentów AI, żeby crawl treningowy i pobrania na żywo dostawały 200.

Cache. Cache rzadko „blokuje” sam z siebie. WAF przed nim tak. Dwa przypadki cache nadal mają znaczenie. Zbuforowana ściana cookie albo pusta powłoka JS to to, co dostaje każde kolejne pobranie, bot czy człowiek, dopóki nie wyczyścisz cache. 403 albo wyzwanie zbuforowane dla tego URL będzie nadal padać po naprawie reguły, dopóki nie wyczyścisz cache. Po zmianie polityki botów wyczyść HTML URL-i, które mają być cytowane, i wywołaj curl ponownie.

Ten sam wzorzec jest na AWS WAF Bot Control, Akamai Bot Manager i produktach bot Fastly: zarządzany pakiet „AI / scraper” przed origin. Czytaj ten pakiet tak, jak polityki botów AI Cloudflare. Zezwól zweryfikowanym crawlerom treningowym i fetcherom na żywo, które nazwałeś w robots.txt.

Ile z tego to już SEO techniczne?

Prawie wszystko. Crawlowalność, indeksowalność, HTML w pierwszej odpowiedzi, mapy witryn, canonical, hreflang, szybkość i schema.org zgodna z widoczną stroną: to ta sama praca, którą zespół search robi dla Google.

Własne wytyczne Google dla AI Overviews i AI Mode mówią to wprost. Strona zindeksowana i kwalifikująca się do snippetu w Google Search może pojawić się jako link wspierający w tych funkcjach. Nie ma dodatkowej technicznej poprzeczki ponad Search. Google wymienia te same praktyki: zezwól na crawl w robots.txt i na CDN, trzymaj ważną treść w tekście i utrzymuj dane strukturalne zgodne z tym, co widzi odwiedzający.

ChatGPT, Claude i Perplexity korzystają z tej samej czytelnej strony. Dodają trzy dodatkowe wymagania na zdrowym setupie SEO.

Nazwani agenci. Zezwolenie Googlebot nie zezwala GPTBot ani ChatGPT-User. Każdy operator wysyła własnego user agenta. Włącz każdego dla efektu z tabeli powyżej.

Pobranie na żywo z krótkim zegarem. Googlebot może wrócić później. Fetcher answer-time jest wewnątrz czatu. HTML, który przychodzi w pierwszych sekundach, to HTML, który można zacytować w tej turze.

Gęstsze, typowane fakty. Ranking nadal nagradza czytelną stronę. Prompt kupującego to lista ograniczeń: 400 mm, 12 V, IP68, food-grade, termin poniżej dwóch tygodni. Maszyna dopasowuje te wartości. Woli tabelę specyfikacji i JSON-LD niż akapit, który mówi, że produkt „obejmuje szeroki zakres rozmiarów”.

Dobre SEO to warstwa bazowa. Dodatkowa praca to dostęp dla nowych botów i dane, które maszyna może porównać bez wnioskowania. 10 funkcji SEO, które powinien mieć nowoczesny CMS obejmuje stronę indeksowalności; ten artykuł obejmuje agentów AI i typowane dane, których te crawlery potrzebują, gdy już dotrą.

Co SEO techniczne już umożliwiaCo włączyć dodatkowo dla fetcherów AI
Googlebot może crawlować, a strona może być indeksowanaNazwani agenci AI na tych samych publicznych ścieżkach plus polityka CDN/WAF, która ich przepuszcza (domyślne ustawienia botów AI Cloudflare nie podążają za Googlebot)
Ważna treść w HTML, nie tylko w aplikacji po stronie klientaTen sam HTML, bo większość fetcherów answer-time pomija JavaScript
Szybki TTFB pod crawl budget i Core Web VitalsSzybki TTFB, żeby pobranie na żywo skończyło się, póki kupujący wciąż jest w czacie
Mapa witryny, self-canonical, hreflangTe same sygnały, żeby fetcher trafił na jeden aktualny URL we właściwym języku
Schema.org JSON-LD pod rich resultsTen sam JSON-LD, użyty jako typowane fakty (ta liczba to cena, to wymiar)
Treść odpowiadająca na zapytanieSpecyfikacje, ceny, limity i branże jako wartości, które prompt może dopasować

Jak zwrócić użyteczną odpowiedź na czas?

Pobranie na żywo działa, póki kupujący czeka. Celuj w HTTP 200 i HTML w pierwszych sekundach, na URL-ach, które mają być cytowane.

To oznacza:

  • 200 dla zweryfikowanych fetcherów AI na publicznych stronach.
  • Limity rate tak dobrane, żeby krótki burst pobierań answer-time się domknął. Agenci na żywo powyżej powinni dostać 200, a nie 429.
  • Treść artykułu w tym 200. Ściana cookie albo wybór kraju, który trzyma specyfikację za kliknięciem, zostawia fetcher z powłoką. Umieść fakty do cytowania (wymiary, ceny, limity, branża) w HTML, który przychodzi wraz ze statusem.
  • Time to first byte w tym samym zakresie, jaki i tak chcesz dla SEO technicznego. Dla pobrania na żywo użyteczny HTML na czas to warunek, żeby asystent mógł zacytować stronę.

Mapa witryny mówi crawlerom, które URL-e należą do tego zbioru. Wymień publiczne strony, które mają być cytowane, trzymaj lastmod zgodny z realnymi edycjami i wskaż mapę w robots.txt. Canonical wybiera jeden URL, gdy kilka prowadzi do tego samego produktu. Hreflang wybiera język. Te trzy elementy to hydraulika SEO. Decydują też, który dokument otworzy pobranie na żywo, gdy kupujący pyta po niemiecku, a publikujesz w trzech językach.

Jak umieścić tekst w pierwszej odpowiedzi HTML?

Fetchery answer-time czytają pobrany HTML. Większość pomija JavaScript. Specyfikacje, ceny i limity należą więc do tego pierwszego dokumentu.

Renderuj po stronie serwera strony, o które kupujący mógłby pytać. HTML, który przychodzi, powinien już zawierać dane produktu, zakres, ograniczenia i tekst branżowy.

Jeśli publiczna witryna to aplikacja JavaScript, zachowaj trasę renderowaną po stronie serwera (albo snapshot prerenderowany) z tymi samymi faktami, pod jednym canonical URL. Tekst w obrazach i SEO działa tak samo: wymiar, który istnieje jako tekst w HTML, to to, co fetcher może zacytować. PDF pod „pobierz kartę katalogową” to ten sam wzorzec. Opublikuj liczby na stronie, a plik zostaw jako kopię dla osób, które go chcą.

Tabela specyfikacji w HTML to format, który się przenosi. Jeden atrybut na wiersz, jedna jednostka, jedna wartość. Te same liczby mogą potem zasilić JSON-LD. Zdanie, które chowa zakres w przymiotnikach, nie robi żadnej z tych prac.

Co jeszcze włączyć, żeby maszyna mogła użyć danych?

Gdy boty są dozwolone, a HTML trzyma fakty, włącz resztę warstwy maszynowej. Każdy punkt poniżej to włączenie: zrób to, a fetcher może użyć strony pewniej.

WłączŻeby
Allow dla nazwanych agentów AI w robots.txtCrawl treningowy i pobrania na żywo mogły prosić o publiczne ścieżki
Polityka botów AI CDN / WAF ustawiona na allow Search, Agent i TrainingProxy przed origin (Cloudflare, AWS WAF, Akamai) zwracało 200 dla tych zadań
Bot Fight Mode wyłączony albo Super Bot Fight Mode ze skipem dla zweryfikowanych botów AIFetchery dostawały HTML zamiast wyzwania JavaScript
Managed robots.txt wyłączony albo przepisany tak, że GPTBot i ClaudeBot mają AllowPlik, który crawler faktycznie pobiera, zgadza się z plikiem CMS
Lista dozwolonych WAF / CDN dla opublikowanych zakresów IPZweryfikowane fetchery dostawały 200 zamiast domyślnego wyzwania
index, follow na publicznych URL (meta robots i X-Robots-Tag)Google mógł utrzymać stronę w Search, co jest też pulą dla AI Overviews
Mapa witryny XML tych URL z prawdziwym lastmodCrawlery odkrywały strony, które mają być cytowane
Self-referencing canonical na publicznym URLZduplikowane ścieżki zwijały się do jednego dokumentu
hreflang na przetłumaczonych stronachPobranie w danym języku lądowało w tym języku
Specyfikacje jako tekst HTML i tabeleFetcher mógł wyszukać wymiar, cenę, certyfikat
JSON-LD generowany z tych samych pólTe same wartości przychodziły typowane: Offer, height, material
HTTPS i stabilny publiczny URLAsystent mógł pobrać ten sam zasób dwa razy i dostać tę samą stronę

llms.txt jest opcjonalny. To krótka mapa URL-i, które już uczyniłeś czytelnymi. Opublikuj go, jeśli te URL-e istnieją i możesz utrzymać plik na bieżąco. Nie daje dostępu, nie renderuje JavaScript i żaden duży dostawca platformy nie uczynił go czynnikiem rankingu. Traktuj go jako wskaźnik po tym, jak tabela powyżej jest na miejscu.

Poprzeczka danych jest wyżej niż zwykły tekst SEO. Strona może rankować na „pompa przemysłowa” na przymiotnikach i nadal paść na prompcie kupującego o 400 mm, 12 V i wodzie słonej. Włącz typowane pola, żeby ta sama wartość była w tabeli, w akapicie i w JSON-LD. Jedna edycja aktualizuje wszystkie trzy.

Co dodaje JSON-LD, gdy strona jest już czytelna?

JSON-LD to schema.org w tagu <script type="application/ld+json">. To te same dane strukturalne, które i tak dodajesz dla Google Search. Google rekomenduje JSON-LD jako format najłatwiejszy w utrzymaniu i wymaga, żeby markup opisywał to, co widać na stronie.

Na powierzchniach AI Google efekt jest udokumentowany jako część Search: dane strukturalne zgodne ze stroną pomagają Google interpretować dokument. Nie ma osobnego „schematu AI” do wymyślania.

Przy surowym pobraniu ChatGPT albo Claude dowody są cieńsze. Te fetchery czytają HTML. JSON-LD to typowana kopia tych samych faktów obok HTML. Nie widzieliśmy publicznego, powtarzalnego testu, który udowadnia, że sam JSON-LD przesuwa cytowania ChatGPT. Rób to i tak, bo to ta sama praca co SEO, i bo typowane height: 400 mm usuwa domyśły, które zostawia zdanie.

Typy, które się opłacają na stronie B2B, gdy widoczna strona już podaje fakty:

  • Organization z sameAs (LinkedIn, Wikipedia, profile firmowe), żeby model przypiął stronę do jednej firmy.
  • Product z Offer (cena albo zakres cen, waluta, dostępność), żeby pytanie o koszt miało wartość do podniesienia.
  • Service na stronach usług, z obszarem albo branżą, którą faktycznie obsługujesz.
  • FAQPage tylko dla pytań widocznych jako Q&A na tym URL.
  • Article z dateModified na stronach redakcyjnych, żeby świeżość była polem, a nie domyśłem.
  • BreadcrumbList, żeby hierarchia była jawna.

Markup, który powtarza mglisty akapit, to dekoracja. Markup sprzeczny ze stroną jest gorszy: Google traktuje rozjazd jako sygnał spamu, a fetcher na żywo, który czyta obie kopie, trzyma teraz dwie liczby. Generuj JSON-LD z pól Drupal, żeby zmiana redaktora aktualizowała HTML i skrypt razem. Ręcznie pisany JSON obok pola body dryfuje w ciągu kwartału.

Minimalny fragment Product, zasilany z pól, wygląda tak:

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Example bilge pump",
  "brand": { "@type": "Organization", "name": "Example GmbH" },
  "additionalProperty": [
    { "@type": "PropertyValue", "name": "height", "value": "380", "unitCode": "MMT" },
    { "@type": "PropertyValue", "name": "voltage", "value": "12", "unitText": "V" }
  ],
  "offers": {
    "@type": "Offer",
    "priceCurrency": "EUR",
    "price": "240",
    "availability": "https://schema.org/InStock"
  }
}

Te właściwości pomagają tylko wtedy, gdy 380 mm i 12 V są też w tabeli HTML. JSON-LD etykietuje dane. Nie tworzy ich. Opis generowania tego w Drupalu w artykule Schema.org i metadane w Drupalu to ścieżka implementacji, której używamy.

Jak to zweryfikować na produkcji?

Użyj URL na żywo, który ma być cytowany, nie lokalnego buildu.

Status dla fetchera na żywo

curl -sI -A "ChatGPT-User" "https://www.example.com/your-page"

HTTP 200 oznacza, że ChatGPT może pobrać ten URL podczas pytania. Powtórz z -A "GPTBot", żeby potwierdzić, że crawler treningowy ma dostęp na tej samej ścieżce. Przeczytaj X-Robots-Tag w tej samej odpowiedzi: publiczna strona powinna być indeksowalna.

CDN / Cloudflare przed origin

curl -sI -A "GPTBot" "https://www.example.com/your-page"

Sprawdź linię statusu i nagłówki. cf-ray oznacza, że odpowiedział Cloudflare. cf-mitigated: challenge albo 403/1020 oznacza, że brzeg zatrzymał crawler treningowy. Powtórz z -A "ChatGPT-User". Potem:

curl -s -A "GPTBot" "https://www.example.com/your-page" | grep -iE 'just a moment|cf-challenge|attention required|blocked'

Trafienie to strona wyzwania, nie Twój artykuł. W panelu Cloudflare otwórz Security Analytics (Events) dla tego okna i filtruj Bot Fight Mode, Block AI bots i custom WAF. Logi dostępu origin, które nigdy nie pokazują GPTBot, podczas gdy publiczna witryna stoi na Cloudflare, zwykle oznaczają, że brzeg zwrócił odpowiedź, a origin nie widział żądania.

robots.txt na produkcji (plik, który bot faktycznie dostaje)

curl -s "https://www.example.com/robots.txt"

Potwierdź Allow (albo brak Disallow) dla każdego agenta z tabeli, na ścieżkach, które powinny być publiczne. Potwierdź, że URL mapy witryny jest wymieniony. Jeśli odpowiedź zaczyna się od # BEGIN Cloudflare Managed content i ma Disallow: / dla GPTBot albo ClaudeBot, zarządzany plik stoi przed plikiem CMS. Napraw to na CDN, potem curl ponownie. Porównaj z plikiem na origin, jeśli masz do niego dostęp: muszą się zgadzać.

Fakty w HTML

curl -s -A "ChatGPT-User" "https://www.example.com/your-page" | grep -i "400 mm"

Użyj ciągu znaków, który istnieje w treści: wymiar, cena, numer certyfikatu. Trafienie oznacza, że fetcher na żywo może odczytać ten fakt. Potem otwórz ten sam URL z wyłączonym JavaScript i potwierdź, że człowiek widzi te same liczby.

JSON-LD obecny i zgodny

curl -s -A "ChatGPT-User" "https://www.example.com/your-page" | grep -F 'application/ld+json'

Potem wyszukaj w tym samym pobraniu ten sam wymiar albo cenę w JSON. Typowana wartość zgodna z tabelą to cel. Tag script z inną liczbą to błąd do naprawy, zanim dodasz więcej typów.

Mapa witryny i canonical

curl -s "https://www.example.com/sitemap.xml" | grep "/your-page"
curl -s -A "ChatGPT-User" "https://www.example.com/your-page" | grep -i 'rel="canonical"'

Strona, którą chcesz cytować, powinna być w mapie witryny. Canonical powinien wskazywać ten sam publiczny URL.

Logi

Przeszukaj tydzień logów dostępu pod kątem ChatGPT-User, GPTBot, ClaudeBot, PerplexityBot i OAI-SearchBot. 200 na publicznych stronach, które Cię interesują, oznacza, że te boty przechodzą. Porównaj trafienia z opublikowanymi zakresami IP z osobą zarządzającą siecią.

Od czego zacząć konfigurację?

  1. Dostęp. robots.txt plus polityka botów AI CDN/WAF, Bot Fight Mode i listy dozwolonych dla zweryfikowanych zakresów, per agent, żeby crawl treningowy i pobrania na żywo dotarły do witryny. Trzymaj index, follow na publicznych URL. Wyczyść HTML tych URL po zmianie reguły.
  2. HTML. Specyfikacje, ceny i limity w pierwszej odpowiedzi, jako tekst i tabele.
  3. Szybkość. 200 wystarczająco szybko, żeby pobranie na żywo się domknęło.
  4. Sygnały URL. Mapa witryny, self-canonical, hreflang, żeby fetch otworzył jeden aktualny dokument.
  5. JSON-LD. Schema generowana z tych samych pól, zgodna ze stroną.

Najpierw dostęp, bo to pozwala GPTBot zasilić przyszłe modele i ChatGPT-User pobrać podczas pytania. JSON-LD na końcu tej listy, bo etykietuje dane, które już istnieją. Lider marketingu może uruchomić komendy powyżej, dołączyć linię statusu, fragment robots, zrzut ekranu z wyłączonym JavaScript i grep JSON-LD, i przekazać to osobie odpowiedzialnej za brzeg i szablony.

Jak to konfigurujemy w Drupalu

Standardowa strona Drupal to HTML w pierwszej odpowiedzi. Pola, views i layout renderują się po stronie serwera, co jest dokumentem, który fetcher na żywo może odczytać. Moduły poniżej etykietują ten dokument, wymieniają go na liście i mówią nazwanym botom, że mogą go pobrać. Jeśli dodajesz front-end JavaScript, zachowaj trasę renderowaną po stronie serwera z tymi samymi faktami. Drupal może wystawiać te same dane jako HTML dla ludzi i fetcherów, a także przez JSON:API dla aplikacji. Obie formy mogą współistnieć. Publiczny URL, który ma być cytowany, potrzebuje HTML.

Pola, potem strony

Specyfikacje modelujemy jako pola, nie jako blok copy w body. Wysokość, napięcie, cena, branża i certyfikat mają osobne pole. Strona produktu, tabela porównawcza i JSON-LD czytają z tych pól. Redaktor zmienia 380 mm raz. Każda powierzchnia podąża. Views i taksonomia budują strony branżowe i porównawcze z tych samych encji, więc jedenasta strona branżowa to konfiguracja, a nie jednorazowy artykuł.

Rabbit Hole to druga połowa tego modelu. Encja specyfikacji, która istnieje tylko po to, by zasilić tabelę, nie powinna być publicznym URL. Kieruj te canonical na stronę produktu, żeby fetcher lądował na jednym dokumencie.

robots.txt z CMS

Core dostarcza statyczny robots.txt w docroot. Plik jest taki sam na każdej witrynie w multisite, a deploy może nadpisać ręczną edycję. Dla polityki, którą można zmieniać per środowisko, używamy RobotsTxt (drupal/robotstxt). Buduje plik w UI i zapisuje go jako config.

Najpierw zmień nazwę albo usuń plik core. Inaczej Drupal nadal serwuje statyczną kopię i moduł nie wygrywa. Potem wklej grupy User-agent z wcześniejszej części artykułu: Allow: / dla GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot i PerplexityBot na publicznych ścieżkach. Wskaż Sitemap: na indeks Simple XML Sitemap. Eksportuj config. Na stagingu trzymaj Disallow: / (albo overlay Config Split), żeby crawlery treningowe nie traktowały hosta staging jako produkcji.

Wywołaj publiczny hostname potem. Managed robots.txt Cloudflare dokleja własne Disallow dla GPTBot przed tym plikiem. Zmiana w CMS liczy się dopiero, gdy plik na brzegu się zgadza.

Metatag: canonical, robots, title

Metatag zarządza sygnałami na poziomie strony. Ustaw domyślne per bundle, z tokenami, nie ręcznie per węzeł.

  • Canonical: absolutny alias tej encji, żeby ?page= i /node/123 zwijały się do jednego URL.
  • Robots: index, follow na bundle'ach, które mają być cytowane. noindex na stronach podziękowania, facetingu wyszukiwania i nieopublikowanych layoutach.
  • Title i description: tokeny z tych samych pól co H1 i akapit otwierający, żeby fetch i snippet się zgadzały.

Dodaj pole Metatag na bundle tylko tam, gdzie redaktor musi nadpisać domyślne. Pole na każdym węźle to droga do 300 stron z pustymi nadpisaniami. Publiczne landingi Views dostają Metatag Views, żeby te URL też miały canonical.

JSON-LD z tych samych pól

Schema.org Metatag rozszerza Metatag i drukuje <script type="application/ld+json"> w head. To ścieżka, której używamy na istniejących witrynach. Mapuj tokeny na właściwości schema per bundle: Product name z tytułu, additionalProperty z wysokości i napięcia, Offer price i priceCurrency z pola ceny, Organization sameAs z witrynowej listy URL mediów społecznościowych, FAQPage tylko na bundle'ach z widocznym Q&A, Article dateModified z [node:changed:html_datetime].

Mapowanie siedzi w domyślnych Metatag. Redaktor nie wkleja JSON. Gdy właściwości brakuje w module, mały custom Metatag tag w custom module jest tańszy niż skrypt w motywie, który będzie dryfował.

Schema.org Blueprints (schemadotorg) to drugi kierunek: buduje typy treści i pola z typów schema.org, potem emituje JSON-LD i czyste JSON:API. Użyj na greenfieldowym katalogu. Nie uruchamiaj obu systemów mapowania na tym samym bundle.

W obu przypadkach markup Schema.org powinien powstawać z treści, a nie być wklejany ręcznie w WYSIWYG. Ręcznie pisany blok JSON-LD to wersja, która po następnej zmianie ceny nie zgadza się z tabelą.

Mapa witryny

Simple XML Sitemap (4.x na Drupal 10.3/11) to generator, który instalujemy. Uwzględnij bundle'e, które mają być cytowane, wyklucz resztę. Pisze alternatywy hreflang dla przetłumaczonych encji, może dodać URL obrazów i może wystawić indeks mapy witryny, gdy drzewo jest duże. lastmod powinien podążać za czasem zmiany encji, a nie za nocnym rebuildem każdego URL.

Nie wymieniaj bundle'ów noindex. Mapa witryny, która reklamuje URL, którym Metatag mówi robotom, żeby pominęły, to mieszany sygnał. Po publikacji potwierdź, że publiczny /sitemap.xml zawiera alias, potem potwierdź, że Cloudflare nie serwuje pustego indeksu z cache.

XML Sitemap (starszy projekt) nadal istnieje. Na nowym buildzie Simple XML Sitemap ma aktualne wsparcie wielojęzyczne i IndexNow.

Aliasy, przekierowania i breadcrumbs

Pathauto daje każdemu bundle stabilny wzorzec (/products/[node:title], /industries/[term:name]). Redirect robi 301 z /node/123 i starych aliasów na ten wzorzec i zapisuje zmiany aliasów, żeby cytowany URL dalej się rozwiązywał.

Easy Breadcrumb może emitować BreadcrumbList JSON-LD z tej samej ścieżki, którą widzi odwiedzający. Włącz to, żeby hierarchia w skrypcie zgadzała się z hierarchią w nagłówku. Drugi, ręcznie budowany breadcrumb w schema_metatag na tej samej stronie to duplikat do uniknięcia.

Języki

Tłumaczenie treści core plus prefiksy językowe już produkują hreflang na wielu buildach. Wielojęzyczny katalog nadal potrzebuje jednego faktu na język: przetłumaczone pola, a nie maszynowy zrzut źródła. Mapa hreflang Simple XML Sitemap to sposób, w jaki crawlery odkrywają zestaw. Canonical na tłumaczeniu wskazuje to tłumaczenie, a nie język źródłowy.

Cache tags i CDN

Cache tags Drupal już wiedzą, która strona się zmieniła. Purge plus purger (Cloudflare, Varnish, Fastly albo generyczny HTTP) usuwa ten obiekt na brzegu. Następne pobranie AI dostaje nowy HTML i nowy JSON-LD. Reszta cache zostaje.

Wyrównaj trzy rzeczy po każdej zmianie polityki botów: robots.txt Drupal, polityki botów AI Cloudflare / managed robots file i purge HTML, który właśnie otworzyłeś przez curl. Testy tylko na origin pomijają Disallow doklejony na początku pliku.

Opcjonalnie: llms.txt

llms.txt wystawia /llms.txt z configu i treści Drupal, z cache tags, żeby publikacja odświeżała plik. Generuj go z tych samych canonical URL, które Simple XML Sitemap już wymienia. To wskaźnik, nie substytut reguł Allow ani HTML.

To stos, który pozwala GPTBot, ChatGPT-User i reszcie tabeli dotrzeć do stron, które już trzymają fakty w HTML i etykietują te fakty w JSON-LD.

Najczęstsze pytania

Czy crawlery AI uruchamiają JavaScript?

Fetchery answer-time zwykle czytają pobrany HTML i kończą. Umieść fakty w tej pierwszej odpowiedzi, żeby mogły z nich skorzystać.

Które boty OpenAI zezwolić?

GPTBot, żeby przyszłe modele mogły trenować na publicznych stronach. ChatGPT-User, żeby ChatGPT mógł pobrać podczas pytania na żywo. OAI-SearchBot, żeby wyszukiwanie OpenAI mogło pobrać do odpowiedzi. Trzech agentów, trzy zadania. Zezwól każdemu dla efektu, którego chcesz.

Czy Cloudflare domyślnie blokuje crawlery AI?

Na nowych domenach, od 1 lipca 2025 r., Cloudflare prosi o wybór, a konserwatywna opcja to blokada. Managed robots.txt może też dokleić Disallow dla GPTBot i ClaudeBot przed plikiem CMS. Bot Fight Mode może wyzwać tych samych klientów. Wywołaj publiczny hostname z -A "GPTBot" i -A "ChatGPT-User", potem przeczytaj Security Settings → Configure AI bot policies. Zezwól Training, Agent i Search dla efektów z tabeli powyżej. Od 15 września 2026 r. nowe domeny będą blokować Training i Agent na stronach z reklamami, chyba że to zmienisz.

Czy zezwolenie GPTBot wstawia mnie do dzisiejszych odpowiedzi ChatGPT?

To ścieżka treningowa. Odpowiedzi na żywo używają ChatGPT-User. Zezwól na oba, jeśli chcesz oba efekty.

Czy dobre SEO wystarczy, żeby ChatGPT odczytał witrynę?

To większość pracy. Witryna, którą Googlebot może crawlować, z tekstem w HTML, mapą witryny i zgodnym schema, jest już czytelna. Nadal zezwalasz nazwanym agentom AI (zezwolenie Googlebot to inna reguła), nadal dajesz zweryfikowanym zakresom 200 na WAF i nadal publikujesz specyfikacje jako wartości, które prompt może dopasować.

Czy JSON-LD sprawi, że ChatGPT mnie poleci?

JSON-LD typuje fakty, które już są na stronie. W Google to część Search, w tym AI Overviews. Przy surowym pobraniu ChatGPT nie ma dowodu, że sam w sobie przesuwa cytowania. Generuj go z tych samych pól co HTML, żeby obie kopie się zgadzały. To użyteczna wersja.

Czy czas odpowiedzi wpływa na cytowania?

Dla pobrania na żywo tak. HTML, który przychodzi szybko, to HTML, który asystent może zacytować, póki kupujący wciąż jest w czacie.

Chcesz, żebyśmy to sprawdzili na Twojej infrastrukturze?

Wyślij URL produkcyjny. Potwierdzimy, które boty są dozwolone na origin i na CDN, czy Bot Fight Mode albo managed robots.txt stoi na drodze, czy pierwszy HTML trzyma fakty, czy JSON-LD zgadza się z tymi faktami i czy pobranie na żywo wraca na czas. Robimy to na Drupalze: robots i reguły na brzegu, strony renderowane po stronie serwera, pola zasilające tabele i schema, cache tags za CDN. Zobacz nasze usługi Drupal albo napisz - uruchomimy pobrania razem z Tobą.