Dlaczego SEO też zasługuje na testy regresji
W praktyce testujemy logikę biznesową, komponenty, ścieżki użytkownika — a metadane SEO traktujemy często tak, jakby były odporne na zmiany. Tymczasem to właśnie one są wyjątkowo kruche, ponieważ zależą od konfiguracji, która może się łatwo wymknąć spod kontroli przy refaktorze. Przykładowo, ktoś zmienia komponent layoutu i niechcący usuwa tag canonical; ktoś inny dodaje noindex na środowisku staging i zapomina go zdjąć przed mergem do głównej gałęzi. Migracja routingu podmienia 301 na 302, przez co Google przestaje przekazywać moc linków. Scenariuszy jest mnóstwo i nieuwaga może drogo kosztować.
Wspólnym mianownikiem tych błędów jest to, że żaden z nich nie wywoła awarii widocznej dla użytkownika. Aplikacja działa sobie bez zarzutu, testy funkcjonalne są zielone, a problem ujawnia się dopiero, gdy ruch organiczny zaczyna spadać — czyli z perspektywy biznesu o wiele za późno. Test regresji SEO domyka tę lukę, bo sprawdza dokładnie te rzeczy, których nie widać gołym okiem, ale które decydują o tym, jak stronę traktuje wyszukiwarka.
Co dokładnie testować
Zanim napiszemy kod, warto ustalić zakres. Dobry zestaw testów SEO koncentruje się na kilku obszarach, które najczęściej ulegają regresji.
Pierwszy to Meta robots to znacznik (np. <meta name='robots' content='noindex'>) albo nagłówek HTTP, który mówi wyszukiwarce, czy strona ma być indeksowana i czy robot ma podążać za linkami. Wartość noindex wyklucza stronę z wyników wyszukiwania. — najważniejsza asercja w całym zestawie. Strony, które mają się indeksować, nie mogą zawierać noindex. Drugi to Canonical (rel=canonical) to znacznik wskazujący wyszukiwarce, który adres URL jest wersją podstawową danej treści. Zapobiega problemom z duplikacją, gdy ta sama treść dostępna jest pod wieloma adresami. — musi istnieć, być bezwzględnym adresem i wskazywać właściwą wersję strony. Trzeci to podstawowe metadane, czyli tytuł i meta description, których brak albo pustka oznacza utratę kontroli nad tym, jak strona prezentuje się w wynikach.
Na stronach wielojęzycznych dochodzą tagi Hreflang to atrybut wskazujący wyszukiwarce językowe i regionalne warianty tej samej strony, np. polski i angielski. Poprawnie ustawiony zapobiega duplikacji i kieruje użytkownika do właściwej wersji językowej., których spójność łatwo zepsuć przy zmianach w i18n. Wreszcie przekierowania — kluczowe redirecty muszą zwracać 301, a nie 302 czy, co gorsza, prowadzić przez łańcuch pośrednich adresów. Każdy z tych obszarów to jedna albo dwie proste asercje, a razem tworzą siatkę, przez którą typowe regresje SEO po prostu nie przejdą.
Testy metadanych w Playwright
Zacznijmy od najważniejszego — sprawdzenia zawartości <head> na kluczowych typach stron. Poniższy test weryfikuje, że strona produktowa indeksuje się poprawnie i ma komplet metadanych.
Logika jest prosta i czytelna, ale dokładnie ta prostota jest zaletą — każdy w zespole rozumie, co test sprawdza i dlaczego jego niepowodzenie blokuje merge. Asercja na noindex jest tu celowo postawiona jako pierwsza, bo to ona chroni przed najkosztowniejszym scenariuszem.
Testy przekierowań
Drugi filar to przekierowania. Tutaj kluczowy jest jeden szczegół: żeby sprawdzić status redirectu, nie wolno za nim automatycznie podążać, bo wtedy zobaczysz dopiero stronę docelową, a nie samo przekierowanie. W Playwright wykonujemy więc surowe żądanie z wyłączonym podążaniem za redirectami.
Ten test wyłapuje trzy typowe regresje naraz: podmianę trwałego 301 na tymczasowy 302 (przez co Google nie przenosi pozycji na nowy adres), zerwanie przekierowania, które zaczyna zwracać 404, oraz pojawienie się łańcucha pośrednich redirectów. Każdy z tych przypadków potrafi po cichu kosztować pozycje wypracowane latami, a tutaj kończy się czerwonym testem w pull requeście. Jeśli prowadzisz większą migrację adresów, warto połączyć to z wiedzą z artykułu o migracji treści i redirectach 301 przy przejściu z WordPressa na Next.js.
Wpięcie w GitHub Actions
Same testy nie chronią niczego, dopóki nie uruchamiają się automatycznie przy każdej zmianie. Centralną częścią automatyzacji jest GitHub Actions to wbudowany w GitHub system CI/CD, który uruchamia zdefiniowane zadania (workflow) w odpowiedzi na zdarzenia, np. push albo otwarcie pull requesta. Pozwala zablokować merge, gdy testy nie przejdą., gdzie definiujemy workflow uruchamiany na każdy pull request.
Po dodaniu tego workflow każdy pull request automatycznie buduje aplikację i uruchamia na niej zestaw testów SEO. Jeśli któryś nie przejdzie — bo ktoś zostawił noindex albo zepsuł canonical — GitHub oznaczy sprawdzenie jako nieudane i zablokuje merge. Aby ta blokada faktycznie działała, ustaw ten workflow jako wymagane sprawdzenie statusu w regułach ochrony gałęzi main. Dopiero wtedy zielony test staje się warunkiem wejścia kodu na produkcję, a nie tylko informacją, którą można zignorować.
