Zmiana struktury adresów rzadko kończy się katastrofą z powodu samej decyzji. Ruch znika zwykle dlatego, że mapa przekierowań 301 była niekompletna: pominięto stare adresy z linkami zewnętrznymi, część reguł nakładała się na siebie, a nikt nie sprawdził, co serwer zwraca po wdrożeniu. Jeśli dopiero rozważasz przebudowę, zacznij od tekstu o tym, kiedy migracja struktury URL w ogóle ma sens. Tutaj zajmujemy się etapem wykonawczym: jak zbudować mapę, przetestować ją i skontrolować efekt.
Mapa przekierowań to tabela, w której każdemu staremu adresowi przypisany jest dokładnie jeden nowy adres docelowy oraz kod odpowiedzi. Brzmi prosto, ale jej jakość zależy od trzech rzeczy: kompletności listy źródłowej, trafności dopasowań i testów przed publikacją.
Skąd zebrać komplet starych adresów
Najczęstszy błąd to budowanie listy wyłącznie z crawla aktualnej strony. Crawler widzi tylko to, co jest dziś podlinkowane. Nie zobaczy starych wpisów odpiętych z menu, adresów z parametrami ani stron, do których prowadzą wyłącznie linki z innych domen. Komplet buduje się z kilku źródeł naraz:
- pełny crawl serwisu (Screaming Frog, Sitebulb lub własny skrypt),
- wszystkie mapy XML, także archiwalne, jeśli zachowały się w repozytorium,
- eksport stron z raportu Skuteczność w Search Console za ostatnie 16 miesięcy,
- adresy docelowe linków przychodzących z narzędzia do analizy backlinków,
- logi serwera z ostatnich 30–90 dni, które pokazują, o co faktycznie pyta Googlebot,
- eksport z bazy CMS (wpisy, strony, kategorie, tagi, załączniki).
Po scaleniu trzeba listę znormalizować: jeden protokół, jedna wersja hosta, spójna końcówka ze slashem lub bez, zdekodowane polskie znaki. Bez tego te same strony pojawią się w tabeli dwa lub trzy razy. Jak wyciągnąć dane o stronach z ruchem, opisujemy w przewodniku po raportach Google Search Console. Warto przy okazji oznaczyć w tabeli, które adresy mają kliknięcia, a które linki zewnętrzne, bo to one wymagają najstaranniejszego dopasowania.
Dopasowanie stary do nowy: reguły kontra lista
Są dwa sposoby zapisu mapy. Reguły (wyrażenia regularne w .htaccess, Nginx lub wtyczce) dobrze działają, gdy zmiana jest systemowa, na przykład usunięcie daty z adresu wpisu albo zmiana prefiksu katalogu. Lista jeden do jednego jest konieczna wszędzie tam, gdzie zmieniły się slugi, scalono treści lub przeniesiono wpisy między kategoriami.
| Sytuacja | Lepsze rozwiązanie | Ryzyko |
|---|---|---|
| Zmiana prefiksu, np. /blog/ na /poradniki/ | Jedna reguła | Reguła łapie adresy, które miały zostać |
| Usunięcie daty z permalinków | Reguła z grupą przechwytującą | Kolizje identycznych slugów z różnych lat |
| Nowe slugi po redakcji tytułów | Lista 1:1 | Literówki w tabeli |
| Scalenie kilku artykułów w jeden | Lista N:1 | Przekierowanie na niepowiązaną treść |
W praktyce większość projektów łączy oba podejścia: lista dla adresów szczególnych, reguły dla reszty. Kolejność ma znaczenie, bo pozycje z listy muszą być sprawdzane przed regułami ogólnymi. Gotową strukturę kolumn z walidacją znajdziesz w naszym szablonie mapy przekierowań 301. Google w dokumentacji o przenoszeniu witryny ze zmianą adresów URL zaleca właśnie przekierowania na poziomie serwera i mapowanie stron na ich najbliższe odpowiedniki.
Co zrobić z adresami bez odpowiednika
Każda migracja ujawnia strony, których nikt nie chce przenosić: stare promocje, puste tagi, duplikaty. Pokusa jest jedna: przekierować wszystko na stronę główną. To zły pomysł. Google traktuje masowe przekierowania na stronę główną lub ogólną kategorię jak soft 404, więc sygnał i tak przepada, a użytkownik ląduje w miejscu, które nie odpowiada na jego pytanie.
Rozsądny podział wygląda tak: jeśli istnieje strona o zbliżonej intencji, kierujemy na nią. Jeśli adres ma linki zewnętrzne lub ruch, ale treść jest nieaktualna, lepiej ją odświeżyć i zostawić pod nowym adresem. Jeśli strona nie ma ruchu, linków ani odpowiednika, zwracamy 410 lub 404. Status 410 jest nieco szybciej przetwarzany, choć w praktyce różnica jest niewielka. Gdy zastanawiasz się, czy zamiast przekierowania nie wystarczy sygnał kanoniczny, przeczytaj, czym różnią się canonical, noindex i nofollow.
Łańcuchy i pętle przekierowań: jak je wykryć
Łańcuch powstaje, gdy adres A kieruje na B, a B na C. Najczęściej to efekt poprzednich migracji, o których nikt już nie pamięta. Googlebot podąża za maksymalnie dziesięcioma przeskokami, ale każdy kolejny opóźnia przetworzenie zmiany i zwiększa ryzyko błędu. Pętla (A na B, B na A) kończy się błędem w przeglądarce i wypadnięciem adresu z indeksu.
Wykrywanie jest mechaniczne. Weź kolumnę adresów docelowych i sprawdź, czy któryś z nich występuje jednocześnie w kolumnie adresów źródłowych. Każde takie trafienie to łańcuch do spłaszczenia: źródło powinno wskazywać od razu na adres końcowy. Drugi test to porównanie istniejących przekierowań na serwerze z nową mapą, bo stare reguły z poprzednich wdrożeń często przechwytują ruch, zanim zadziała nowa lista.
Test mapy na środowisku testowym
Mapę testuje się przed publikacją, nie po niej. Na stagingu z nową strukturą wgrywamy przekierowania i przepuszczamy przez nie całą listę starych adresów w trybie listy w crawlerze. Dla każdego wiersza sprawdzamy:
- czy pierwsza odpowiedź to 301 (a nie 302, 307 czy 200),
- czy jest dokładnie jeden przeskok,
- czy adres końcowy zwraca 200 i nie ma tagu noindex,
- czy adres końcowy jest zgodny z kolumną docelową w tabeli,
- czy canonical na stronie docelowej wskazuje na nią samą.
Osobno warto przetestować warianty: z wielkimi literami, z parametrem UTM, z końcowym slashem i bez niego, w wersji http. Reguły, które działają na czystym adresie, potrafią zawieść na wariancie z parametrem. Dobrze też uruchomić crawl samej nowej strony i upewnić się, że linki wewnętrzne prowadzą bezpośrednio do nowych adresów, a nie przez przekierowania. Szczegóły kodów odpowiedzi opisuje strona Google o przekierowaniach i wyszukiwarce.
Wdrożenie i monitoring pierwszych 72 godzin
Dzień wdrożenia powinien mieć prosty scenariusz: publikacja nowej struktury, aktywacja przekierowań, ponowny test pełnej listy na produkcji, aktualizacja map XML, zgłoszenie mapy w Search Console. Stara mapa XML może przez kilka tygodni zostać dostępna, bo przyspiesza ponowne odkrycie przekierowanych adresów.
Przez pierwsze trzy doby codziennie sprawdzamy logi serwera pod kątem odpowiedzi 404 i 5xx dla Googlebota, raport Strony w Search Console, ruch organiczny na poziomie sekcji w analityce oraz błędy zgłaszane przez użytkowników. Każdy nowy 404 z historią ruchu dopisujemy do mapy od razu. Dobrą praktyką jest też zamrożenie zmian w treściach i menu na czas obserwacji: jeśli w tych samych dniach redakcja zmienia tytuły, a programista poprawia szablon, trudno potem ustalić, co było przyczyną spadku. Warto mieć przygotowany plan wycofania, czyli kopię starej konfiguracji serwera i jasną decyzję, kto i przy jakim progu błędów może ją przywrócić. Zwykle wystarcza świadomość, że taka ścieżka istnieje. Jeśli liczba adresów ze statusem oczekującym rośnie, pomocny będzie tekst o tym, co oznacza status wykryto, obecnie nie zaindeksowano i jak go odblokować.
Kontrola po miesiącu: co powinno wrócić
Po około czterech tygodniach większość ważnych adresów powinna być już przetworzona. Porównujemy wtedy kliknięcia i wyświetlenia z okresem sprzed migracji na poziomie par stary i nowy adres, a nie całej domeny, bo sumaryczne liczby ukrywają lokalne straty. Strony, które straciły więcej niż przeciętnie, to zwykle błędne dopasowania: przekierowanie na treść o innej intencji albo na stronę z noindex.
Przekierowań nie usuwamy po miesiącu. Google zaleca utrzymywać je co najmniej rok, a w przypadku adresów z linkami zewnętrznymi najlepiej bezterminowo. Pełną listę kontrolną na ten etap zebraliśmy w artykule audyt post-migration: co sprawdzić po zmianie.
FAQ
Czy mapę przekierowań 301 można oprzeć wyłącznie na regułach?
Tylko wtedy, gdy zmiana jest w pełni systemowa, na przykład zmienia się sam prefiks katalogu. Gdy zmieniają się slugi albo treści są scalane, potrzebna jest lista jeden do jednego, sprawdzana przed regułami ogólnymi.
Ile czasu trzeba utrzymywać przekierowania po migracji?
Co najmniej rok. Adresy, które mają linki zewnętrzne, najlepiej przekierowywać bezterminowo, bo odnośniki z innych stron rzadko są aktualizowane.
Czy przekierowanie 302 zamiast 301 to duży problem?
Google potrafi z czasem potraktować długotrwałe 302 jak stałe przekierowanie, ale wysyła to sprzeczny sygnał i spowalnia przeniesienie. Przy trwałej zmianie adresów należy używać 301 lub 308.
Co zrobić z adresami, które nie mają nowego odpowiednika?
Jeśli nie mają ruchu ani linków, zwrócić 404 lub 410. Masowe kierowanie ich na stronę główną Google i tak uzna za soft 404, a użytkownik nie dostanie odpowiedzi na swoje pytanie.
Jak sprawdzić, czy w mapie nie ma łańcuchów?
Wystarczy porównać kolumnę adresów docelowych z kolumną źródłową. Każdy adres obecny w obu kolumnach oznacza łańcuch, który trzeba spłaszczyć tak, by źródło wskazywało od razu na adres końcowy.
