Modelowane listy odbiorców nie zawierają konkretnych osób, tylko prawdopodobieństwa. Wyjaśniam, jak powstają, gdzie ich szukać w panelu i jak czytać ich raporty.
Migracja dużego sklepu to jedyny projekt, przed którym za każdym razem mam ten sam odruch: chcę zobaczyć plan wycofania zmian, zanim zobaczę plan wdrożenia. Powód jest prosty — to operacja, w której da się w jedną noc stracić widoczność zbieraną latami, a odbudowa zajmuje miesiące i nigdy nie jest pełna.
Zdecydowana większość migracji, które przejmowałem już po fakcie, nie zawaliła się na niczym skomplikowanym. Przekierowania były zrobione, ale nie dla wszystkich adresów. Sitemapa została stara. Plik produktowy prowadził do adresów, które od trzech dni odpowiadały przekierowaniem. Nic z tego nie jest wiedzą tajemną i wszystko da się odhaczyć na liście — właśnie dlatego chcę tę listę spisać.
Poniżej opisuję przebieg takiej migracji etap po etapie i to, co kontroluję w każdym z nich. Bez liczb z konkretnych kont, bo skutki takich projektów zależą od zbyt wielu zmiennych, żeby cytowanie ich komukolwiek pomogło.
„Migracja” to worek, do którego wrzuca się cztery bardzo różne operacje, a ryzyko każdej z nich jest inne.
Zanim ruszę cokolwiek, chcę mieć na piśmie, które z tych rzeczy dzieją się jednocześnie. Jeżeli więcej niż dwie, proponuję rozbicie na etapy — przy kilku zmianach naraz nie da się później ustalić, która odpowiada za spadek.
Najbardziej pouczająca migracja, w jakiej brałem udział, dotyczyła sklepu z kilkudziesięcioma tysiącami kart produktów, przenoszonego na nową platformę razem z przebudową kategorii. Nie podam nazw ani danych z konta — opiszę mechanikę, bo ona powtarza się niezależnie od branży.
Mapa przekierowań powstała dla kategorii i dla produktów aktywnych w dniu wdrożenia. Dla katalogu była kompletna. Problem polegał na tym, że ruch z wyszukiwarki przychodził też na adresy, których w katalogu już nie było: produkty wycofane, ale mające linki i historię, warianty wpięte w indeks jako osobne strony, adresy z parametrami filtrów oraz starą paginację kategorii.
Wszystko to po wdrożeniu odpowiadało błędem 404, a objawiło się nie od razu, tylko przez kolejne dwa, trzy tygodnie — Google potrzebował czasu, żeby te adresy odwiedzić i przeliczyć.
Druga rzecz była jeszcze bardziej banalna: plik produktowy przez kilka dni wskazywał stare adresy, więc kampanie produktowe prowadziły do przekierowań, a część ofert została odrzucona przy weryfikacji strony docelowej. Nikt tego nie zauważył, bo zespół pilnował SEO, a nie Merchant Center.
Wniosek jest nudny i sprawdza się do dziś: inwentaryzacja adresów nie może pochodzić z bazy sklepu. Baza wie, co jest w sprzedaży, wyszukiwarka wie, co jest zaindeksowane. To dwa różne zbiory, a migrację przeżywa ten drugi.
Zbieram adresy z pięciu źródeł i traktuję je jako sumę, nie jako alternatywy.
Pierwsze to raport skuteczności w Search Console, wyeksportowany przed migracją, bo później tych danych już nie odtworzysz. Drugie to raport indeksowania, a w nim zwłaszcza adresy zaindeksowane, których nie ma w sitemapie. Trzecie to logi serwera z co najmniej trzydziestu dni — jedyne źródło pokazujące, po czym faktycznie chodzi robot. Czwarte to crawl własnym narzędziem, dla struktury linkowania. Piąte to plik produktowy i adresy docelowe z kampanii.
Do tego jedna lista, o której łatwo zapomnieć: adresy z linkami z zewnątrz. Nawet jeśli strona dawno nie istnieje w katalogu, link do niej wciąż przekazuje wartość.
Z tego wszystkiego robię jeden arkusz z kolumną priorytetu. Adresy z ruchem i linkami mapuję ręcznie, reszta idzie regułą — przy dziesiątkach tysięcy adresów nie ma innego wyjścia.
Przy dużej witrynie mapa przekierowań to nie tabela, a zestaw reguł plus tabela wyjątków. Reguły obsługują powtarzalne wzorce adresów, tabela — wszystko, co nie mieści się w schemacie.
Zasady, których nie odpuszczam: przekierowania stałe, jeden do jednego, do najbliższego sensownego odpowiednika i nigdy hurtem na stronę główną. Jeżeli kategoria zniknęła, celem jest kategoria nadrzędna, a nie wyniki wyszukiwania w sklepie. Żaden łańcuch nie może mieć więcej niż jednego skoku — przy sklepie z historią wcześniejszych zmian adresów to najczęstszy problem, bo nowa reguła nakłada się na starą.
Osobno pilnuję wydajności. Kilkadziesiąt tysięcy reguł w pliku konfiguracyjnym serwera potrafi położyć czas odpowiedzi, a to widać i w statystykach indeksowania, i w Core Web Vitals. Reguły trzymam więc w bazie lub w mapie z indeksem, nie w liniowej liście warunków.
Warto też pamiętać, że narzędzie do obsługi parametrów URL Google wyłączył w kwietniu tego roku i w Search Console nie ma już panelu do deklarowania, które parametry ignorować. Zostaje adres kanoniczny, robots.txt i architektura linkowania, więc decyzję o filtrach i sortowaniu trzeba podjąć przed wdrożeniem.
Migracja bywa prowadzona wyłącznie jako projekt SEO i to jest błąd, który kosztuje najszybciej — bo w kampaniach skutki widać w godzinach, nie w tygodniach.
Skoro wyłączenie Universal Analytics zapowiedziano na 1 lipca przyszłego roku, wiele sklepów zbiera już dane równolegle w GA4 — przy migracji trzeba przenieść oba wdrożenia i sprawdzić wykluczenia ruchu wewnętrznego. Warto też zapisać datę wdrożenia w notatce do danych.
Wdrożenie planuję na okres najniższego ruchu i nigdy w piątek. Nie chodzi o wygodę, a o to, żeby ktokolwiek kompetentny był dostępny, gdy trzeba wycofać zmianę.
Kolejność jest zawsze taka sama: nowa witryna z odblokowanym robots.txt, natychmiast po niej przekierowania, potem nowa sitemapa zgłoszona w Search Console, na końcu zgłoszenie zmiany adresu, jeśli zmienia się domena. Najczęstszy wypadek na tym etapie to blokada indeksowania przeniesiona ze środowiska testowego na produkcję — robots.txt i znaczniki noindex sprawdzam więc jako pierwszą rzecz po wdrożeniu.
Przez pierwsze trzy dni patrzę na kody odpowiedzi dla priorytetowych adresów, czas odpowiedzi serwera, statystyki indeksowania w Search Console i liczbę adresów zwracających 404 w logach. Pojedyncze strony sprawdzam narzędziem kontroli adresu URL — wyłapuje różnice między tym, co renderuje przeglądarka, a tym, co dostaje Google.
Warto mieć też zapisany warunek wycofania zmian, ustalony z klientem wcześniej — bez tego dyskusja o cofnięciu migracji toczy się pod presją i kończy zwykle decyzją, żeby jeszcze poczekać.
Widoczność po migracji nie wraca liniowo. Normalne jest wahanie w pierwszych dwóch, trzech tygodniach — Google musi odwiedzić stare adresy, zobaczyć przekierowania i przeliczyć sygnały. Niepokojące jest to, co się nie odwraca po miesiącu, i to, co widać na poziomie pojedynczych adresów, a nie całej witryny.
Jest jednak okoliczność, która utrudnia ocenę właśnie teraz. We wrześniu zakończyło się wdrożenie September 2022 core update, a nachodziła na nie osobna aktualizacja dotycząca opinii o produktach; w sierpniu doszedł Helpful Content Update. Migracja wypadająca w takim okresie sprawia, że przypisanie zmian widoczności samej przeprowadzce jest zgadywaniem. Dlatego sprawdzam, czy termin wdrożenia nie trafia w potwierdzone okno aktualizacji algorytmu — a jeśli trafił, opisuję oba zdarzenia w raporcie osobno.
Na koniec lista, którą odhaczam przy każdej migracji:
Używamy plików cookies, aby ułatwić Ci nawigację oraz wykonywanie określonych funkcji. Szczegółowe informacje o wszystkich plikach cookies znajdziesz w każdej kategorii zgody poniżej.
Pliki cookies oznaczone jako "Niezbędne" są przechowywane w Twojej przeglądarce, ponieważ są one kluczowe dla zapewnienia podstawowych funkcji strony.
Używamy również plików cookies firm trzecich, które pomagają nam analizować, w jaki sposób korzystasz z tej strony, zapamiętują Twoje preferencje oraz dostarczają treści i reklamy odpowiednie dla Ciebie. Te pliki cookies będą przechowywane w Twojej przeglądarce tylko za Twoją uprzednią zgodą.
Możesz zdecydować, czy chcesz włączyć lub wyłączyć niektóre bądź wszystkie te pliki cookies, jednak wyłączenie niektórych z nich może wpłynąć na Twoje doświadczenia podczas przeglądania strony.
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __cf_bm | 13 minutes | Cloudflare bot management — distinguishes humans from bots. |
| rc::* | Persistent | Google reCAPTCHA — localStorage holding anti-bot challenge state. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| wpEmojiSettingsSupports | Session | WordPress — sessionStorage flag caching whether the browser can render emoji (feature detection). |
| ytidb* | Persistent | YouTube — IndexedDB storing playback/search state for embedded videos. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| _ga_* | 400 days | Google Analytics 4 — persists session state per property. |
| _ga | 400 days | Google Analytics — distinguishes unique users via a client id. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| NID | 183 days | Google — stores preferences for personalized ads. |
| fr | 90 days | Meta — encrypted Facebook id and browser id for ads. |
| _gcl_au | 90 days | Google AdSense/Ads — experiments with advertising efficiency (conversion linker). |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __Secure-YNID | 180 days | |
| YSC | Session | |
| __Secure-ROLLOUT_TOKEN | 180 days | |
| VISITOR_INFO1_LIVE | 180 days | |
| VISITOR_PRIVACY_METADATA | 180 days | |
| datr | 400 days | |
| sb | 400 days | |
| wd | 7 days |