Przejdź do treści
Robert Marczyński

Czy AI widzi strony największych spółek z GPW? Zmierzyłem 60 domen

Badanie własne

10 i 11 sierpnia 2026 zmierzyłem strony korporacyjne wszystkich 60 spółek z WIG20 i mWIG40. Żaden z 56 pobranych plików robots.txt nie blokuje botów odpowiadających na pytania użytkowników; dwie spółki blokują jednak Google-Extended, token sterujący także groundingiem odpowiedzi Gemini. Główna luka leży w tożsamości maszynowej: 26 z 60 stron nie ma ani jednego bloku danych strukturalnych w kodzie dostępnym bez JavaScriptu, a znacznik Organization ma 23 z 60. Bez wykonania skryptów bot dostaje medianowo 98 proc. treści, przy czym 14 stron na 60 traci ponad jedną piątą, a dwie ponad połowę.

Robert Marczyński15 min czytaniaPomiar 10–11.08.2026zbiór danych7 źródeł

Polska dyskusja o widoczności stron dla AI opiera się prawie w całości na cudzych danych z rynku amerykańskiego. Sprawdziłem, jak jest u nas: 10 i 11 sierpnia 2026 zmierzyłem techniczną widoczność strony dla AI u wszystkich 60 spółek z WIG20 i mWIG40.

Krótka odpowiedź: blokady w robots.txt nie są problemem, brak tożsamości maszynowej jest. Żaden z 56 pobranych plików nie zamyka drogi botom odpowiadającym na pytania. Za to 26 stron na 60 nie ma w kodzie ani jednego bloku danych strukturalnych, a znacznik mówiący wprost „to jest firma i nazywa się tak” ma 23 z 60.

Dlaczego to ma znaczenie

Gdy model buduje odpowiedź o firmie, a na stronie nie ma danych strukturalnych, musi wywnioskować z samego tekstu, kim jest właściciel serwisu. Wtedy zaczynają się pomyłki, które trudno potem odkręcić: firma zlewa się ze spółką o podobnej nazwie, dostaje cudzy adres albo wypada z zestawienia dostawców, bo model nie rozpoznał, że w ogóle działa w tej branży. Znacznik Organization to kilkadziesiąt linijek w kodzie, które te pomyłki wycinają.

Drugi wniosek jest dla odbiorcy ofert handlowych. Skoro w całej próbie nie ma ani jednej blokady botów odpowiadających, to „odblokowanie strony dla AI” nie jest usługą, za którą warto płacić, dopóki ktoś nie pokaże, że akurat u nas taka blokada istnieje.

Co dokładnie mierzyłem

Warunki wstępne bycia zacytowanym, nie samo cytowanie. To, które źródło model wybierze, nie daje się zmierzyć z zewnątrz, bo odpowiedzi asystentów są spersonalizowane i zmienne. Warunki wstępne da się zmierzyć i powtórzyć.

Każdą stronę główną otwierałem dwa razy w tym samym Chromium, przy jednej różnicy: raz z wyłączonym JavaScriptem, raz z włączonym — boty wyszukiwarek AI nie wykonują skryptów, więc widzą stronę tak jak przeglądarka z wyłączonym JavaScriptem. Liczyłem tekst całego dokumentu, razem z treścią, której nie widać na ekranie (zwinięte zakładki, rozwijane sekcje), bo bot czyta kod, a nie ekran. Do tego dwa pliki hosta, pobrane po przekierowaniach: robots.txt, w którym strona mówi botom, czego im nie wolno, i llms.txt, czyli streszczenie serwisu pisane z myślą o modelach AI. Na koniec strona główna pobrana z nagłówkiem GPTBota.

Próba to publiczny, odtwarzalny zbiór: portfele indeksów GPW Benchmark z sesji 7 sierpnia 2026, sprawdzone niezależnie w dwóch innych serwisach. Każda spółka ma przypisaną jedną stronę, korporacyjną stronę emitenta, nie serwis konsumencki marki.

W robots.txt nie blokuje prawie nikt

Rozróżnienie, bez którego cały ten temat się rozjeżdża: GPTBot i ClaudeBot zbierają dane do trenowania modeli, a OAI-SearchBot, Claude-SearchBot i PerplexityBot obsługują odpowiadanie na żywe pytania. Blokada pierwszej grupy nie wyklucza z cytowań, blokada drugiej wyklucza.

Botów z drugiej grupy nie blokuje nikt: zero przypadków na 56 pobranych plików. Boty treningowe blokują dwie spółki, Modivo i Asbis, obie tym samym zestawem reguł, bo w obu wypadkach pochodzą one z gotowego bloku Cloudflare wstawianego do robots.txt.

Podział na dwie grupy ma jednak wyjątek, który zmienia obraz tych dwóch przypadków. Google-Extended wygląda na token treningowy, ale dokumentacja Google mówi, że steruje on użyciem treści zarówno do trenowania modeli Gemini, jak i do groundingu, czyli podawania treści modelowi w chwili zapytania. Modivo i Asbis blokują ten token, więc wycinają się także z kanału odpowiedzi Gemini. Trzeciej kategorii, tokenów o podwójnej funkcji, brakowało w moim pierwszym podejściu do tych danych. Pisałem wtedy, że nikt nie wycina się z kanału odpowiedzi; powinno było brzmieć: nikt poza tymi dwiema spółkami.

Blokada, której w robots.txt nie widać

Trzy strony odpowiadają kodem 403 na żądanie z nagłówkiem GPTBota: modivoplatform.com, asbis.com i intercars.com. Mianownik tego testu to 56 spółek — u czterech nie udało się go wykonać, bo połączenie zostało zerwane albo serwer odpowiedział kodem 502, a „nie zmierzono” nie liczy się ani jako odmowa, ani jako jej brak. Kontrola tym samym klientem HTTP rozdziela te trzy przypadki na dwa mechanizmy: Modivo i Asbis reagują na sam nagłówek, bo identyczne żądanie z nagłówkiem przeglądarki dostaje kod 200; Inter Cars odcina klientów automatycznych niezależnie od nagłówka — 403 dostaje i „bot”, i „przeglądarka”, jeśli pyta ten sam program. Inter Cars nie ma przy tym w robots.txt ani jednej linijki o botach AI, więc pomiar samego pliku pokazałby stronę całkowicie otwartą.

Jedno zastrzeżenie osłabia ten wynik. Nagłówek wysyłałem z adresu, który nie należy do OpenAI, więc serwis weryfikujący bota po odwrotnym DNS ma prawo potraktować takie żądanie jak podszywanie się. Ten pomiar mówi o reakcji na sam nagłówek, nie o tym, jak serwer potraktuje prawdziwego GPTBota. Wniosek praktyczny zostaje jednak w mocy: zapora potrafi odciąć boty niezależnie od tego, co stoi w robots.txt, i warto o to zapytać dostawcę hostingu.

Ślad decyzji ma siedem spółek na pięćdziesiąt sześć

Ciekawsze od blokad jest to, czego w tych plikach nie ma. Z nazwy wymienia choć jednego bota AI 6 plików, a 4 zawierają deklarację Content-Signal, opisującą dozwolone przeznaczenie treści. Razem, po odjęciu części wspólnej, daje to 7 z 56. Pozostałe 49 nie zostawiło żadnego śladu decyzji, ani na tak, ani na nie.

Jedna z tych siedmiu pokazuje, dlaczego liczenie samych nazwanych botów nie wystarcza. Text ma Content-Signal: ai-train=yes, search=yes, ai-input=yes, czyli zgodę wyrażoną wprost, nie wymieniając ani jednego bota z nazwy.

Rozbudowana polityka, która nie robi tego, na co wygląda

Tauron ma najdłuższą własnoręcznie napisaną politykę dla botów AI w całej próbie — pozostali używają gotowego bloku Cloudflare albo pojedynczych linii. Botom odpowiadającym OpenAI i Anthropica daje Allow: / i wyłącza ścieżki techniczne CMS-a. Boty treningowe — GPTBot, ClaudeBot, a także PerplexityBot, którego Tauron potraktował jak treningowy — dostały każdy osobną grupę z jedną tylko linią: Allow: /llms.txt.

Zamiar jest czytelny: „na trening możecie wziąć tylko ten jeden plik”. Skutek jest inny. RFC 9309 w punkcie 2.2.2 mówi wprost: „If no match is found amongst the rules in a group for a matching user-agent or there are no rules in the group, the URI is allowed” — jeśli w grupie nie ma pasującej reguły albo nie ma reguł wcale, adres jest dozwolony. Grupa, w której nie ma ani jednej reguły Disallow, niczego więc nie zabrania. Robots.txt nie zna trybu „wolno wyłącznie to” — ograniczenie powstaje tylko przez zakaz, a wzór pliku, który robi to poprawnie, publikuję osobno. GPTBot i ClaudeBot mogą więc pobrać z tauron.pl wszystko. W tym samym pliku jest też User-agent: GoogleExtended, a token Google zapisuje się z łącznikiem i tylko taka pisownia cokolwiek znaczy.

Sprawiedliwie trzeba dodać, że intencja jest w tym pliku wyrażona również inaczej i tym razem poprawnie: ostatnia linia to Content-Signal: ai-train=no, search=yes, ai-input=yes. To deklaracja, nie egzekucja, ale mówi dokładnie to, co miały mówić tamte grupy. Piszę o tym nie po to, żeby czepiać się jednej spółki. To jedyna firma w próbie, która usiadła i napisała politykę dla botów AI, i właśnie na niej widać, jak łatwo napisać taką politykę tak, że wygląda na obowiązującą.

Polityka bywa tam, gdzie stoi treść, a nie tam, gdzie wizytówka

Mierzyłem jedną domenę na spółkę i to jest realne ograniczenie tego badania. Wirtualna Polska Holding wchodzi do próby jako holding.wp.pl, gdzie robots.txt nie istnieje. Tymczasem wp.pl ma politykę napisaną świadomie i dokładnie tak, jak opisuję to wyżej jako rzadkość: GPTBot i CCBot dostają Disallow: /, a PerplexityBot, Perplexity-User, OAI-SearchBot i ChatGPT-User dostają Allow: /. Podobnie CD Projekt: mierzone cdprojekt.com nie ma pliku, a cdprojektred.com blokuje GPTBota.

Wniosek dla czytelnika jest praktyczny. Polityka dla botów należy do hosta, więc trzeba ją ustawić na każdej domenie, na której leży treść, a nie tylko na tej z relacjami inwestorskimi.

Prawdziwa luka: strona nie mówi maszynie, kim jest

Dane strukturalne z typem Organization, czyli formalne oświadczenie „to jest firma, nazywa się tak, to jej logo i adres”, ma 23 strony na 60. Żadnego bloku application/ld+json nie ma 26 stron na 60.

W całej próbie tylko jedna strona dokłada bloki danych strukturalnych po wykonaniu skryptów — orange.pl, u którego liczba bloków rośnie z czterech do ośmiu — i żadna nie zyskuje w ten sposób znacznika Organization. Kto te dane ma, podaje je poprawnie, w kodzie dostępnym od razu. Blisko połowa nie ma ich wcale.

Najczęstsze typy w próbie to WebSite (27) i WebPage (23), czyli opis strony, a nie opis firmy. Model dostaje informację, że ma do czynienia ze stroną internetową. Jak dodać znacznik Organization z gotowym kodem, opisałem osobno.

JavaScript nie jest tu problemem, choć łatwo uznać, że jest

Spodziewałem się największych strat właśnie tu i wynik jest łagodniejszy, niż zakładałem, choć nie dla wszystkich. Pełny rozkład: 36 stron na 60 oddaje botowi komplet treści (co najmniej 95 proc.), 10 ma drobne ubytki do jednej piątej, 12 traci od jednej piątej do połowy, a dwie ponad połowę — citibank.pl i vercom.pl, na obu bot dostaje 35 proc. treści. Mediana dla całej próby to 98 proc. W środkowym paśmie strat siedzi jednak co piąta spółka, w tym pkobp.pl, strona największego banku w kraju, z 54 proc. treści dostępnej bez skryptów.

Ten wynik zależy jednak od tego, jak się go liczy, i tu byłem o krok od opublikowania fałszywego alarmu. Gdyby mierzyć tekst widoczny na ekranie, najgorzej w całej próbie wypadłby modivoplatform.com, u którego widać zaledwie 5 proc. treści. Tyle że jego treść stoi w kodzie serwerowym w całości, 7896 słów przed wykonaniem skryptów. Jest tylko pozwijana w zakładki, więc człowiek jej nie widzi, a bot czyta ją bez przeszkód. Miara „co widać na ekranie” odpowiada na inne pytanie niż „co dostaje maszyna”.

Objętość wypada przyzwoicie: mediana 879,5 słowa dostępnego botowi na stronie głównej, poniżej 300 słów schodzą 3 strony. Najskromniej wygląda kruk.eu z siedmioma słowami, ale to brama wyboru kraju, a treść grupy stoi na serwisach krajowych. Konsekwencja dla asystenta jest mimo to taka sama: pytanie o KRUK trafia na adres, z którego nic nie wynika.

llms.txt: dwanaście spółek, kilka różnych rozumień

Plik ma 12 spółek z 58 zmierzonych (dwóch hostów nie udało się sprawdzić), znacznie więcej, niż zakładałem — czy ktokolwiek go czyta, to osobne pytanie. Samo „ma” niewiele jednak mówi, bo pod tą nazwą leżą różne rzeczy. Pisane pod format, z opisem firmy i wyborem odnośników: Tauron, ING, Rainbow, Develia, Text, Pekao, Erste Bank Polska. Wygenerowane przez wtyczki SEO, gdzie treść jest produktem ubocznym: Allegro, Asseco SEE i cyber_Folks przez Yoast, LPP przez All in One SEO. Zrzuty: LPP ma 950 kB i ponad cztery tysiące adresów, czyli mapę strony pod inną nazwą. I przypadek osobny, BNP Paribas: 2,03 MB, 22 tysiące linii, format własny z separatorami --- URL START ---, niemający z llms.txt wspólnego nic poza nazwą pliku.

Takie zrzuty bywają mylone z plikiem llms-full.txt znanym z platform dokumentacyjnych — a specyfikacja ze strony llmstxt.org żadnego takiego pliku nie definiuje; to konwencja narzędzi, nie element propozycji. Sama propozycja mówi co innego: plik ma pozostać na tyle mały, żeby zmieścił się w kontekście modelu, a szczegóły mają leżeć za odnośnikami. Plik na dwa megabajty tego warunku nie spełnia. Dla porządku: mój własny llms.txt ma 30 kB, a towarzyszący mu pełny zrzut treści 403 kB — po tym badaniu wiem, że obu przyda się dieta.

Czego nauczyło mnie samo mierzenie

Walidacja i recenzja wyłapały łącznie osiem błędów pomiaru — siedem znalazłem sam, ósmy wskazał recenzent. Trzy najgroźniejsze opisuję niżej, komplet stoi w opisie metody. Podaję je, bo każdy dawał wynik wyglądający wiarygodnie, a kto powtórzy pomiar, trafi na te same pułapki.

Baner ciasteczek potrafi przewrócić cały wynik. Panel zgód z listą dostawców reklamowych dokłada na cdprojekt.com ponad sto tysięcy słów po stronie z włączonym JavaScriptem. Bez odjęcia go wychodzi, że bot widzi poniżej procenta treści; naprawdę widzi 94 proc.

„Nie udało się pobrać” to nie to samo co „nie ma”. W pierwszym podejściu 8 spółek policzyłem jako pozbawione robots.txt; po ponowieniu z innym nagłówkiem okazało się, że plik ma 5 z nich. Osobno gkpge.pl oddaje pod adresem pliku kod 200 i stronę HTML z komunikatem zapory, co bez sprawdzenia typu treści wygląda jak istniejący robots.txt. Ostateczny rozkład to 56 plików pobranych i 4 potwierdzone braki, przy czym po trzy ostatnie pliki trzeba było sięgnąć innym klientem HTTP, bo standardowy zrywał z tymi hostami połączenie.

Pliki należą do hosta, nie do marki. Allegro przekierowuje z allegro.eu na about.allegro.eu i dopiero tam ma llms.txt, więc pytanie pod adresem wyjściowym dawało fałszywe „nie ma pliku”.

Co z tego wynika dla firmy spoza tej listy

Kolejność wychodzi z danych, nie z przekonań. Najpierw dane strukturalne z typem Organization, bo tego brakuje najczęściej i kosztuje najmniej. Potem sprawdzenie, czy treść stoi w kodzie przed wykonaniem skryptów — w tej próbie problem miało 14 stron na 60, a poza nią, na stronach stawianych na kreatorach i aplikacjach klienckich, bywa gorzej. Potem pytanie do dostawcy hostingu, czy zapora nie odrzuca ruchu botów, bo tego robots.txt nie pokaże. Dopiero na końcu robots.txt i llms.txt, przy czym ten drugi krótki.

Diagnozę tych samych warunków dla własnej strony, z testami krok po kroku, zebrałem w osobnej odpowiedzi. Komplet warunków naraz spełnia 12 spółek na 60: Pekao, Erste, mBank, Asseco Poland, Auto Partner, Benefit Systems, cyber_Folks, Creotech, Newag, Orange Polska, Rainbow i Text. Komplet znaczy tu pięć rzeczy naraz: co najmniej 95 proc. treści dostępne przed wykonaniem skryptów, co najmniej 300 słów na stronie głównej, znacznik Organization w kodzie, brak blokady botów odpowiadających i brak blokady Google-Extended. Reakcji zapory na nagłówek bota celowo do kompletu nie liczę — ten pomiar jest nierozstrzygający, o czym wyżej. Reszta ma do zrobienia jedną albo dwie rzeczy, nie dziesięć.

Jedno zastrzeżenie o zasięgu tych ustaleń. Mierzone tokeny sterują botami ChatGPT, Claude'a i Perplexity oraz groundingiem Gemini. Widocznością w AI Overviews i Trybie AI Google rządzi co innego: dostęp Googlebota i dyrektywy meta robots (noindex, nosnippet, max-snippet), a w Copilocie Microsoftu — dostęp bingbota. Tych kanałów ten pomiar nie obejmuje.

Jeśli chcesz to komuś zlecić, przekaż cztery punkty. Po pierwsze: w robots.txt i na zaporze nie mogą być blokowane OAI-SearchBot, Claude-SearchBot, Claude-User, ChatGPT-User, PerplexityBot ani Perplexity-User; Google-Extended sprawdza się wyłącznie w robots.txt, bo w ruchu sieciowym ten token nie występuje. Po drugie: na stronie głównej ma być blok application/ld+json@type: Organization, zawierający co najmniej nazwę, adres serwisu, logo i adres siedziby, widoczny w źródle strony bez wykonywania skryptów. Po trzecie: treść strony ma być w kodzie źródłowym — sprawdza się to w źródle strony (Ctrl+U), nie na ekranie, bo treść zwiniętą w zakładki bot czyta, mimo że jej nie widać. Po czwarte: meta robots i nagłówek X-Robots-Tag nie mogą zawierać noindex, nosnippet ani ograniczającego max-snippet, bo to one rządzą widocznością w AI Overviews i Trybie AI Google.

Cały zbiór danych ma własną stronę: surowe wyniki stoją pod adresem wyniki.json, pełny opis metody razem z listą ograniczeń i błędów narzędzia pod metoda.md, a zrzuty plików robots.txt i llms.txt wszystkich spółek wymienianych z nazwy, z datą pobrania i sumami kontrolnymi, w katalogu surowe. Z plików llms.txt większych niż kilkanaście kilobajtów — m.in. LPP (950 kB) i BNP Paribas (2 MB) — publikuję fragmenty z sumami kontrolnymi całości, bo pełne kopie to cudze utwory; licencja CC BY 4.0 zbioru obejmuje wyłącznie pliki własne badania. Skład indeksów zmienia się kwartalnie, najbliższa korekta po trzecim piątku września 2026, więc po tej dacie próbę trzeba zbudować od nowa.

Najczęstsze pytania

Czy spółki notowane na GPW blokują boty AI w robots.txt?
Botów odpowiadających na pytania (OAI-SearchBot, Claude-SearchBot, Claude-User, ChatGPT-User, PerplexityBot, Perplexity-User) nie blokuje żadna z 56 spółek, których plik robots.txt udało się pobrać w pomiarze z 10 i 11 sierpnia 2026. Dwie, Modivo i Asbis, blokują boty treningowe wraz z tokenem Google-Extended, który według dokumentacji Google steruje nie tylko trenowaniem modeli Gemini, ale i groundingiem, czyli podawaniem treści modelowi w chwili zapytania. Te dwie firmy wycinają się więc także z jednego kanału odpowiedzi.
Czy strona firmowa musi działać bez JavaScriptu, żeby AI ją zobaczyło?
Treść musi stać w kodzie HTML przed wykonaniem skryptów, bo boty wyszukiwarek AI ich nie wykonują. W próbie 60 spółek WIG20 i mWIG40 zmierzonej 10 i 11 sierpnia 2026 bot dostawał medianowo 98 proc. treści; komplet (co najmniej 95 proc.) oddaje 36 stron, 10 ma drobne ubytki, 12 traci od jednej piątej do połowy, a dwie ponad połowę — citibank.pl i vercom.pl. Ważne jest, jak się to liczy: treść zwinięta w zakładki jest niewidoczna dla człowieka, ale dla bota czytelna, bo stoi w kodzie.
Ile treści dostaje bot na stronie głównej dużej polskiej spółki?
W pomiarze 60 stron korporacyjnych WIG20 i mWIG40 z 10 i 11 sierpnia 2026 mediana wyniosła 879,5 słowa przed wykonaniem JavaScriptu, przy rozrzucie od 7 słów na kruk.eu, który jest stroną wyboru kraju, po 7896 na modivoplatform.com. Poniżej 300 słów schodzą 3 strony na 60.
Ile spółek z WIG20 i mWIG40 ma plik llms.txt?
Dwanaście z 58 zmierzonych, stan na 11 sierpnia 2026; dwóch stron nie udało się sprawdzić, bo host odrzucał żądania. Rozstrzał wielkości jest większy niż samo wdrożenie sugeruje: od 801 bajtów u Allegro po 950 kB u LPP i 2,03 MB u BNP Paribas. Część powstała automatycznie z wtyczek SEO, a plik BNP Paribas nie jest w formacie llms.txt, tylko własnym zrzutem treści z separatorami URL START i DATA START.
Jak sprawdzić własną stronę tą samą metodą?
Otwórz stronę dwa razy w tej samej przeglądarce, raz z wyłączonym JavaScriptem, i porównaj tekst kodu, nie tekst na ekranie. Potem sprawdź, czy w kodzie bez skryptów jest blok application/ld+json z typem Organization, i czy robots.txt nie blokuje botów odpowiadających ani tokenu Google-Extended. Surowe wyniki badania z 10 i 11 sierpnia 2026 leżą pod adresem ekspertodsztucznejinteligencji.pl/badania/widocznosc-wig-2026⁠-⁠08/wyniki.json, a opis metody i skrypty pomiarowe pod adresem katalogu ekspertodsztucznejinteligencji.pl/badania/widocznosc-wig-2026⁠-⁠08.

Źródła

Dane zewnętrzne przywołane w tekście mają tu swoje źródła.

  1. GPW Benchmark — portfel indeksu WIG20 (sesja 7.08.2026), weryfikacja krzyżowa: BiznesRadar, StockWatch (nowa karta)
  2. GPW Benchmark — portfel indeksu mWIG40 (sesja 7.08.2026) (nowa karta)
  3. RFC 9309 — Robots Exclusion Protocol, §2.2.2: brak pasującej reguły w grupie oznacza dostęp dozwolony (nowa karta)
  4. Google — lista crawlerów: Google-Extended steruje trenowaniem Gemini i groundingiem w chwili zapytania (nowa karta)
  5. OpenAI — dokumentacja crawlerów (GPTBot, OAI-SearchBot, ChatGPT-User) (nowa karta)
  6. Anthropic — dokumentacja crawlerów i skutki ich blokowania (ClaudeBot, Claude-User, Claude-SearchBot) (nowa karta)
  7. llmstxt.org — specyfikacja formatu llms.txt (nowa karta)

Udostępnij

Powiązane

Masz konkretny proces do omówienia?

Napisz, jaki to proces i ile razy w miesiącu się powtarza. Odpowiem, czy nadaje się do automatyzacji, również wtedy, gdy odpowiedź brzmi „nie warto”.

Albo prosto na adres: not-a-bot@ekspertodsztucznejinteligencji.pl