Prawie każdy poradnik o widoczności w Google i w odpowiedziach ChatGPT czy Perplexity zaczyna się tak samo: pisz więcej, zdobywaj wzmianki, zbieraj opinie. To prawda tylko połowicznie. Zanim treść zacznie działać, ktoś musi otworzyć jej dostęp do maszyny, która ją czyta.
Tym „kimś” jest kod. HTML, który dostaje crawler. Dane o firmie zapisane tak, żeby maszyna nie musiała zgadywać. Mapa strony, która zna każdy adres, bo powstaje z tego samego źródła co routing. robots.txt, który nie blokuje botów czytających dziś internet inaczej, niż robił to kiedyś sam Googlebot.
Na epicbrand.pl ta warstwa jest w aplikacji, nie w dodatku, który można wyłączyć jednym kliknięciem. Ten tekst jest o tym, dlaczego tak zdecydowaliśmy. O samej zmianie reguł gry, jaką jest GEO, piszemy osobno w artykule Koniec ery linków.
Wtyczka opisuje stronę. Nie buduje jej fundamentu
Yoast, Rank Math i podobne narzędzia obiecują metatagi, mapę strony i dane strukturalne za jednym kliknięciem. To niezła oferta dla strony, która stoi na gotowym motywie i nie ma nikogo, kto zna jej kod. W praktyce wtyczka czyta to, co motyw akurat wystawił do HTML-a - i nic więcej.
Jeśli motyw renderuje treść dopiero w przeglądarce, crawler i tak dostaje pusty szkielet. Jeśli builder miesza kolejność nagłówków, żadna wtyczka tego nie naprawi. Jeśli oferta firmy nie jest opisana w kodzie jako usługa, organizacja i zestaw pytań, wtyczka może to tylko zgadywać. Zgadywanie nie jest architekturą.
O długu technicznym, jaki WordPress „z pudełka” potrafi narastać wtyczka po wtyczce, pisaliśmy w tekście Dlaczego WordPress z pudełka to pułapka dla rosnącej firmy. SEO i GEO rządzą się tą samą zasadą: funkcja, która ma być częścią serwisu, nie powinna zależeć od dodatku, który ktoś kiedyś przestanie utrzymywać.
Pro tip
Zanim zapłacisz za „pakiet GEO”, otwórz źródło strony (Ctrl+U) i sprawdź, czy pierwszy dokument HTML zawiera treść, nagłówki i dane strukturalne - bez odpalania JavaScriptu. Jeśli nie, ktoś optymalizuje warstwę, której crawler nigdy nie zobaczy.
To, co widzi crawler, a nie to, co widzisz Ty
LLM - model językowy stojący za ChatGPT, Gemini czy Perplexity - nie ogląda strony tak jak człowiek. Nie docenia animacji, nie reaguje na hover. Składa obraz firmy z tego, co da się odczytać wprost: HTML, treść, linki, dane strukturalne, wzmianki w innych miejscach sieci.
Dlatego strony ofertowe i artykuły na epicbrand.pl oddajemy jako kompletny HTML wygenerowany po stronie serwera. Next.js składa dokument, zanim przeglądarka narysuje pierwszy piksel. Googlebot, GPTBot i inne crawlery dostają dokładnie to samo, co użytkownik z wyłączonym JavaScriptem.
To nie jest szczegół implementacyjny, tylko warunek istnienia treści dla maszyny. Strona, która „ożywa” dopiero po doładowaniu skryptów, dla indeksu bywa po prostu pusta. Wtedy żadna redakcja nie podniesie widoczności, bo nie ma czego zindeksować.
Dane strukturalne piszemy sami, nie zlecamy ich zgadywania
schema.org to słownik, którym strona mówi maszynom wprost: to jest artykuł, to organizacja, to usługa, to pytania z odpowiedziami. Zapisujemy go w JSON-LD, w kodzie widoku - nie w polu formularza wtyczki.
Artykuły na blogu dostają typ BlogPosting z tytułem, opisem, datą, autorem i wydawcą. Strony usługowe - ProfessionalService z katalogiem oferty i FAQPage zbudowany z pytań, które faktycznie padają w rozmowach sprzedażowych, a nie z listy wygenerowanej pod objętość tekstu.
To nie jest sztuczka pod AI. To ta sama semantyka, której Google oczekuje od lat. Różnica względem wtyczki jest prosta: wiemy dokładnie, co trafia do źródła strony, bo sami to składamy - i nie czekamy, aż dodatek odgadnie typ podstrony z nazwy motywu.
Co musi być prawdą w każdym JSON-LD
- Typ strony zgadza się z tym, co faktycznie czyta użytkownik.
- Nazwa organizacji, autor i adres URL są spójne w całym serwisie - nie inne na każdej podstronie.
- FAQ zawiera pytania z realnych rozmów sprzedażowych, a nie listę dopisaną pod SEO.
- Dane nie przeczą widocznej treści. Maszyna i człowiek czytają ten sam fakt.
Źle wypełniony JSON-LD jest gorszy niż jego brak - podszywa się pod porządek, którego strona w rzeczywistości nie ma.
Mapa strony rośnie z tego samego korzenia co routing
Mapa strony (sitemap.xml) ma jedno zadanie: powiedzieć crawlerowi, jakie adresy istnieją i które wolno indeksować. Jeśli powstaje z wtyczki, żyje obok serwisu, we własnym rytmie. Nowa oferta, case study albo artykuł może do niej nie trafić, dopóki ktoś ręcznie nie kliknie „przebuduj”. Może się też zdarzyć odwrotnie: w mapie zostaje adres, którego w nawigacji już dawno nie ma.
Na epicbrand.pl mapa powstaje z tego samego rejestru, z którego budujemy cały serwis: strony stałe, oferty, klastry SEO, realizacje, artykuły. Endpoint /sitemap.xml składa XML bezpośrednio w kodzie aplikacji. Gdy publikujemy nowy wpis, mapa dostaje go razem z resztą tras - bez osobnego kroku, o którym trzeba pamiętać.
Ten sam mechanizm zastosowaliśmy na blogu Pawła Biedy, tylko na WordPressie: mapa i JSON-LD siedzą w motywie, nie w Yoast. Dwa różne stacki, jedna decyzja - fundament nie może być dodatkiem, o którym ktoś zapomni.
Kluczowa różnica
Dobra mapa strony nie jest plikiem, który „się wygenerował” przy okazji. Jest kontraktem między architekturą informacji a crawlerem. Jeśli trasy aplikacji i mapa mają dwóch różnych właścicieli, prędzej czy później się rozjadą.
robots.txt: nie zamykaj drzwi, których nie musisz zamykać
robots.txt to prosta lista: komu wolno czytać które ścieżki. Na epicbrand.pl pozwalamy czytać cały serwis, a zamykamy tylko panele - administrację i panel klienta. Nie blokujemy crawlerów LLM. Nie ma powodu, żeby strona ofertowa była widoczna dla Google, a niewidoczna dla GPTBota.
Najczęstszy błąd przy „zabezpieczaniu” strony: globalny noindex, zablokowany katalog z CSS i JS, albo wtyczka, która domyślnie zamyka wszystko poza stroną główną. Potem firma dziwi się, że nie ma ruchu - a crawler niczego nie złamał, tylko posłuchał instrukcji, które sam dostał.
Błąd bywa też odwrotny: indeksowane ekrany logowania, testowe koszyki, landingi kampanii, które miały żyć dwa tygodnie, a żyją rok. U nas landingi i panele mają osobne reguły od samego startu. Oferta i baza wiedzy są do czytania - reszta nie.
Nagłówki to struktura dokumentu, nie ozdobnik
Dla człowieka H2 to po prostu duży napis. Dla crawlera i LLM to spis treści dokumentu. Jeden H1, potem H2 jako zdania, które same niosą tezę, H3 tylko tam, gdzie temat naprawdę schodzi głębiej - bez skoku z H1 na H4, bo tak akurat ułożył się szablon.
Ta sama zasada dotyczy kanonicznego adresu, tytułu i opisu w metadanych. Na epicbrand.pl każdy publiczny widok dostaje je w konfiguracji swojej trasy, nie w globalnym „pakiecie SEO”. Landing, który nie ma trafić do indeksu, ma to zapisane w kodzie właśnie tej trasy - nie w jednym przełączniku dla całej strony.
Wtyczka SEO kontra fundament w kodzie
| Warstwa | Wtyczka SEO | Fundament w kodzie |
|---|---|---|
| HTML dla crawlera | Zależy od motywu i buildera. | Serwer oddaje kompletny dokument. |
| JSON-LD | Szablon zgaduje typ strony. | Typ i pola wynikają z konkretnego widoku. |
| Mapa strony | Osobny plik, łatwo się rozjeżdża. | Powstaje z tego samego rejestru co trasy. |
| robots / noindex | Globalny przełącznik, łatwo zablokować za dużo. | Reguła przy trasie: oferta tak, panel nie. |
| Utrzymanie | Aktualizacja dodatku, konflikt z motywem. | Zmiana w kodzie serwisu, jeden właściciel. |
Najczęstszy błąd
Traktowanie wtyczki SEO albo pakietu pozycjonowania doliczonego do ceny strony jako GEO. GEO nie zaczyna się od faktury za treści. Zaczyna się od pytania, czy maszyna w ogóle widzi Twoją firmę w dokumencie, który serwer oddaje przy pierwszym żądaniu.
Czego kod nie zastąpi
W The Five Tomasz Karwatka pisze wprost: technologia to narzędzie, a jej dobre użycie potrafi znacząco przyspieszyć rozwój firmy - złe, zahamować go. Kod, o którym pisaliśmy wyżej, jest właśnie takim narzędziem. Otwiera drzwi. Nie wchodzi w nie za Ciebie.
Dobrze przygotowana strona, która nic konkretnego nie mówi o ofercie, nadal nie da LLM-owi niczego do zacytowania. O tym, że modele językowe wymieniają firmy, o których da się dużo rzetelnie przeczytać, a nie te z najładniejszą wizytówką, Paweł Bieda napisał od strony właściciela firmy: Dlaczego ChatGPT nie zna dobrych firm z Twojej branży, mimo że ich strony stoją.
SEO i GEO nie są dwoma osobnymi działami do odhaczenia. To ten sam HTML, ta sama semantyka, ta sama mapa strony. Treść bez dostępu jest niewidoczna. Dostęp bez treści jest pusty.
Podsumowanie
Widoczność w wyszukiwarce i w odpowiedziach LLM zaczyna się w tym samym miejscu: w dokumencie, który serwer oddaje crawlerowi przy pierwszym żądaniu. Dane strukturalne, mapa strony, robots.txt i hierarchia nagłówków nie są ozdobą redakcji - są kontraktem z maszyną, który albo działa, albo nie.
Wtyczka może ten kontrakt udawać. Nie zastąpi go, gdy o istnieniu treści decydują motyw, builder i JavaScript. Na własnym serwisie ten kontrakt trzymamy w kodzie - nie dlatego, że GEO jest modne, tylko dlatego, że bez tego porządku treść nie ma komu się pokazać.
