Wdrożenie · 8 sierpnia 2026

Dwie strony, jedna miejscowość

Prowadzę dwa serwisy o objawieniach w Gietrzwałdzie. Wyglądają podobnie i opisują to samo. Jeden ma w indeksie Google osiemnaście znaków, drugi dwadzieścia pięć tysięcy. Różnica nie bierze się z treści — bierze się z jednej decyzji technicznej, którą łatwo podjąć nieświadomie.

W skrócie. Serwis zbudowany jako aplikacja JavaScript renderuje treść dopiero w przeglądarce użytkownika. Dla człowieka działa bez zarzutu. Robot wyszukiwarki dostaje pusty szkielet. Ta sama treść wygenerowana jako statyczny HTML jest widoczna od razu. Sprawdziłem to na dwóch własnych wdrożeniach.

Skąd wzięły się dwie strony

W 2027 roku przypada 150. rocznica objawień maryjnych w Gietrzwałdzie — jedynych w Polsce uznanych przez Kościół. Miejscowość przyjmuje pielgrzymów z Litwy, Ukrainy, Niemiec i Czech, więc serwis informacyjny o tym wydarzeniu od początku miał sens wyłącznie jako wielojęzyczny.

Pierwsza wersja, pod adresem gietrzwald.com, powstała jako aplikacja React na hostingu współdzielonym. Ma przełącznik 24 języków i kalendarium liczące 888 wpisów opisujących przebieg objawień. W przeglądarce działa poprawnie — można kliknąć litewski i przeczytać wszystko po litewsku.

Druga wersja, gietrzwałd.com zapisana polską literą „ł", stoi na własnym VPS. Zbudowałem ją jako poligon dla asystenta AI odpowiadającego na pytania pielgrzymów. Przy okazji wygenerowałem treść inaczej — jako statyczny HTML.

Test, który warto zrobić na własnej stronie

Pobrałem obie strony tak, jak robi to robot wyszukiwarki — bez uruchamiania JavaScriptu. Wynik był jednoznaczny:

SerwisTytuł w wynikachTreść do zaindeksowania
gietrzwald.com
aplikacja React
„Hostinger Horizons" 18 znaków
gietrzwałd.com
statyczny HTML
„150. rocznica objawień w Gietrzwałdzie 2027…" 25 292 znaki

Osiemnaście znaków to nazwa generatora strony. Nie ma tam ani słowa o Gietrzwałdzie, objawieniach czy rocznicy. Całe kalendarium — wszystkie 888 wpisów, wszystkie 24 wersje językowe — jest dla wyszukiwarki niewidoczne. Ktoś szukający po litewsku „Gietrzwaldo apsireiškimai" nie trafi tam nigdy.

Dlaczego to nie jest oczywiste. Właściciel strony ogląda ją w przeglądarce, gdzie wszystko działa. Nic nie sygnalizuje problemu — nie ma błędu, nie ma ostrzeżenia. Strona po prostu nie pojawia się w wynikach, co łatwo złożyć na karb konkurencji albo młodego wieku domeny.

Na czym polega mechanizm

Serwer wysyła przeglądarce dokument HTML. W klasycznym podejściu ten dokument zawiera gotową treść — nagłówki, akapity, listy. Wyszukiwarka pobiera go i od razu ma co czytać.

Aplikacja jednostronicowa (React, Vue, Angular) działa inaczej. Serwer wysyła prawie pusty dokument i paczkę JavaScriptu. Dopiero ten kod, wykonany w przeglądarce, buduje treść i wstawia ją do strony. Użytkownik nie widzi różnicy poza ułamkiem sekundy oczekiwania.

Google potrafi wykonywać JavaScript, ale robi to w drugim przejściu — z opóźnieniem i bez gwarancji. Pozostałe roboty radzą sobie gorzej. W praktyce oznacza to, że treść zbudowana w przeglądarce trafia do indeksu w części, z opóźnieniem albo wcale.

Rozwiązanie i pułapka po drodze

Naprawa polega na wygenerowaniu treści po stronie serwera — jako plików HTML gotowych do wysłania. Przy 888 wpisach nie robi się tego ręcznie: piszemy skrypt, który z jednego źródła danych buduje komplet stron, po jednym adresie na wersję językową, i łączy je znacznikami hreflang, żeby wyszukiwarka wiedziała, że to warianty tej samej treści.

Przy dwóch wersjach tego samego serwisu pojawia się osobne pytanie: czy wyszukiwarka nie potraktuje ich jako duplikatu. Standardowa odpowiedź to znacznik canonical wskazujący wersję źródłową. Tu jednak trzeba uważać na kierunek.

Błąd, który omal nie zapadł. Naturalny odruch mówi: oryginałem jest starszy serwis, więc canonical powinien wskazywać na niego. Efektem byłoby usunięcie z indeksu jedynej wersji, którą Google potrafi przeczytać, i wskazanie jako źródła strony, z której nie ma nic do wzięcia. Widoczność znika po obu stronach. Canonical ma sens dopiero wtedy, gdy obie wersje są realnie indeksowalne — a wskazywać powinien tę, która niesie treść.

Co z tego wynika poza Gietrzwałdem

Ten sam schemat widuję w firmach: katalog produktów, baza wiedzy albo lista usług zbudowana jako aplikacja jednostronicowa. Treść jest, kosztowała pracę, a nie pracuje na ruch — bo nigdy nie trafiła do indeksu.

Diagnoza zajmuje kilka minut i nie wymaga specjalistycznych narzędzi. W przeglądarce wystarczy otworzyć podgląd źródła strony (Ctrl+U) i poszukać w nim zdania, które widać na ekranie. Jeśli go tam nie ma — nie ma go też w oczach wyszukiwarki.

Warto sprawdzić to zwłaszcza wtedy, gdy strona powstała w kreatorze albo w narzędziu generującym kod automatycznie. Takie narzędzia domyślnie budują aplikacje jednostronicowe, bo tak jest im wygodniej — a decyzja o sposobie renderowania zapada bez udziału właściciela.

Masz stronę, która nie pojawia się w wynikach?

Sprawdzę, czy Twoja treść w ogóle trafia do indeksu, i pokażę, co z tego wynika dla widoczności. Diagnoza jest bezpłatna.

Napisz do mnie →
Oba serwisy są prywatnymi opracowaniami informacyjnymi. Nie są stronami Sanktuarium Matki Bożej Gietrzwałdzkiej, parafii w Gietrzwałdzie ani Archidiecezji Warmińskiej.