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.
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:
| Serwis | Tytuł w wynikach | Treść 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.
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.
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 →