Join our community of websites already using SEOJuice to automate the boring SEO work.
See what our customers say and learn about sustainable SEO that drives long-term growth.
Explore the blog →TL;DR: Genuinely trwałe przekierowanie dostaje 301, a faktycznie tymczasowe dostaje 302. Źle dobierz — a Google zindeksuje niewłaściwy URL. Użyj poniższej tabeli decyzyjnej, a potem przeczytaj sekcję o canonicalizacji, jeśli chcesz zrozumieć mechanizm.
Zanim cokolwiek: oto mapa „scenariusz → kod”. Jeśli się spieszysz, to ten artykuł.
| Scenariusz | Kod | Dlaczego |
|---|---|---|
| Migracja serwisu / zmiana domeny | 301 | Trwałe. Chcesz, aby Google zindeksowało nową domenę. |
| Konsolidacja HTTP do HTTPS | 301 | Trwałe. Stare URL-e znikają bezpowrotnie. |
| Test A/B (powrót do oryginału) | 302 | Tymczasowe. Zostaw oryginalny URL jako kanoniczny. |
| Strona w trybie utrzymania | 302 | Tymczasowe. Docelowo wraca właściwa strona. |
| Produkt niedostępny (ma wrócić) | 302 | Tymczasowe. Zachowaj pozycje (ranking) URL-a produktu. |
| Produkt wycofany (na zawsze) | 301 | Trwałe. Przekaż „equity” do najbliższego odpowiednika. |
| Routing geograficzny / językowy | 302 | Tymczasowe. Oryginalny URL obsługuje większość użytkowników. |
| Landing page kampanii marketingowej | 302 | Tymczasowe. Kampania się kończy — URL wraca do normalnego stanu. |
| Flow logowania / checkout z POST | 307 | Method-safe. Zachowuje treść POST; 302 historycznie przełączy na GET. |
| Konsolidacja zduplikowanych URL-i (trwale) | 301 | Trwałe. Od teraz jeden kanoniczny. |
Jeśli zastanawiasz się, czy coś jest „wystarczająco trwałe” na 301, to najpewniej jest. Liczy się to, czy zamierzasz utrzymywać URL docelowy długoterminowo — jeśli masz pewność, że tak będzie, użyj 301.
Kiedy przeglądarka lub crawler żąda URL-a, serwer może odpowiedzieć kodem statusu z rodziny 3xx zamiast treści strony. Ten kod mówi wprost: „Zasób, którego szukasz, jest gdzie indziej”. Nagłówek Location w odpowiedzi wskazuje klientowi, dokąd przejść dalej.
Rodzina 3xx obejmuje kilka wariantów: 301 (Moved Permanently), 302 (Found / Moved Temporarily), 303 (See Other), 307 (Temporary Redirect), 308 (Permanent Redirect) i jeszcze kilka innych. Z perspektywy SEO liczą się 301, 302, 307 i 308. Reszta to bardziej przypadki brzegowe.
301 to sygnał zarówno dla przeglądarki, jak i dla pipeline’u indeksowania, że stary URL znika bezpowrotnie. Dokumentacja Google mówi to wprost: „Jeśli musisz zmienić URL strony tak, jak jest wyświetlana w wynikach wyszukiwania, zalecamy korzystanie z trwałego przekierowania po stronie serwera, kiedy tylko to możliwe”.
Pipeline indeksowania traktuje 301 jako sygnał kanoniczny. Google podąża za przekierowaniem, a potem oznacza URL docelowy jako ten, który ma zostać w indeksie. Z czasem stary URL przestaje pojawiać się w wynikach wyszukiwania, a na jego miejsce wchodzi nowy. Ranking, zapisane w cache strony i skonsolidowane sygnały przestawiają się na adres docelowy.
Jedna rzecz, którą podkreślę z doświadczenia: trwałe znaczy trwałe. Google zaleca używanie trwałych przekierowań „gdy masz pewność, że nie zostaną cofnięte”. Jeśli ustawisz 301, a potem zdejmiesz go po sześciu miesiącach, nie cofnie się to „czysto” w sensie sygnałów. Googlebot musi ponownie odwiedzić stary URL i przetworzyć wszystko od nowa. Widziałem, jak klienci robili taki revert i potem przez tygodnie zastanawiali się, czemu ranking się rozjechał. Trzymaj 301 co najmniej rok, a najlepiej dłużej.
302 mówi Google: zachowaj oryginalny URL w indeksie — ta zmiana jest tymczasowa. Zalecenia Google są jednoznaczne: „Jeśli chcesz tylko czasowo odesłać użytkowników na inną stronę, użyj tymczasowego przekierowania”.
Googlebot podąża za 302 dokładnie tak samo jak za 301. Różnica pojawia się później w pipeline’ie indeksowania. Przy przekierowaniu tymczasowym Google nie traktuje URL-a docelowego jako kanonicznego. Oryginalny URL zostaje w indeksie jako ten zindeksowany.
Na stronie serwisowej w trybie utrzymania albo w teście A/B to dokładnie taki efekt, jakiego chcesz.
Pułapka polega na użyciu 302 dla ruchu „na stałe”, bo ktoś nie był pewny albo uznał, że „łatwiej będzie to zmienić później”. Google czasem potrafi zreinterpretować długowieczne 302 jako 301, ale nie należy na tym polegać. Widziałem serwisy, które trzymały 302 przez miesiące po migracji domeny i dopiero potem okazywało się, że Google nigdy w pełni nie zindeksowało nowych URL-i. Nie licz na heurystyki Google — bądź precyzyjny.
Problem polega na tym, że prawie każdy artykuł na ten temat pomija kluczową rzecz: przekierowania 302 nie rozszczelniają link equity.
W 2016 Gary Illyes, Google Webmaster Trends Analyst, napisał to wprost: „30x redirects don't lose PageRank anymore.” Obejmuje to 301, 302 i każdy inny 3xx. Wszystkie przekazują PageRank.
John Mueller opisał mechanizm podczas Webmaster Hangout: „Możemy przekazać PageRank przez przekierowania 301 i 302. W praktyce polega to na tym, że używamy tych przekierowań, aby wybrać kanoniczny adres. Gdy wybierzemy kanoniczny, skupiamy wszystkie sygnały, które trafiały do tych URL-i, na URL kanoniczny.”
Przeczytaj to uważnie. To nie jest „rura”, która przenosi juice z jednego URL-a na drugi. To jest konsolidacja kanoniczna: sygnały kumulują się na tym URL-u, który Google uzna za kanoniczny. Typ przekierowania decyduje, który URL staje się kanoniczny.
Realne pytanie brzmi więc: który URL chcesz, aby Google traktowało jako kanoniczny? 301 sprawia, że docelowy jest kanoniczny. 302 zostawia kanoniczny po stronie źródła. To jest właściwa decyzja.
(Uwaga: uznanie equity nie jest natychmiastowe nawet przy 301. Google musi najpierw ponownie odwiedzić stary URL, a konsolidacja zachodzi w wielu cyklach crawlowania. Liczy się też kontekst — 301 z bloga o gotowaniu do landing page z oprogramowaniem nie „skonsoliduje się” tak gładko.)
| Właściwość | 301 Moved Permanently | 302 Found |
|---|---|---|
| Znaczenie HTTP | Zasób przeniesiony trwale | Zasób przeniesiony tymczasowo |
| Sygnał kanoniczny dla Google | URL docelowy staje się kanoniczny | URL źródłowy pozostaje kanoniczny |
| Czy przekazuje PageRank? | Tak | Tak |
| URL, który indeksuje Google | Docelowy (nowy) | Źródłowy (oryginalny) |
| Czy zachowuje metodę przy POST? | Nie (historycznie przełącza na GET) | Nie (historycznie przełącza na GET) |
| Kiedy stosować | Zmiany trwałe, migracje, HTTPS, konsolidacja | Testy A/B, utrzymanie, routing geograficzny, kampanie |
| Koszt cofnięcia | Wysoki: Google musi przetworzyć sygnały ponownie | Niski: oryginalny URL pozostaje zindeksowany |
307 i 308 istnieją, ponieważ 301 i 302 mają problem ze zmianą metody. Gdy przeglądarka podąża za 301 lub 302 w odpowiedzi na żądanie POST, specyfikacja Fetch pozwala przełączyć metodę na GET dla przekierowanego żądania. To może cicho zepsuć flow logowania, wysyłki w checkout i endpointy API.
307 rozwiązuje to dla przekierowań tymczasowych. MDN ujmuje to prosto: „307 gwarantuje, że klient nie zmieni metody ani treści żądania, gdy zostanie wykonane przekierowane żądanie. Przy 302 starsze klienty błędnie zmieniały metodę na GET”. Jeśli tymczasowo kierujesz formularz oparty o POST i potrzebujesz, żeby POST przetrwał — 307 jest właściwym kodem.
308 robi to samo dla przekierowań trwałych. Całkowicie zabrania zmiany metody, w przeciwieństwie do 301, gdzie klienci historycznie wymuszali przejście na GET. Jeśli na stałe przekierowujesz endpoint API, który otrzymuje dane w POST, 308 jest bardziej restrykcyjne i bezpieczniejsze.
Dla stron opartych wyłącznie o GET (czyli większości treści w sieci) 307 i 302 zachowują się identycznie, a 308 i 301 — identycznie. Różnica w metodzie ma znaczenie tylko wtedy, gdy w grę wchodzą treści POST lub PUT.
Jeszcze jedna rzecz warta wspomnienia: istnieją też przekierowania meta-refresh oraz oparte o JavaScript (window.location). Google traktuje meta-refresh z opóźnieniem 0 sekund jako trwałe (odpowiednik 301), a każde z innym opóźnieniem jako tymczasowe. Przekierowania oparte o JavaScript to inna historia: Google może je podążać, gdy wyrenderuje stronę, ale są wolniejsze w przetwarzaniu, mogą zostać pominięte podczas crawlów bez pełnego renderowania i nie niosą jawnego sygnału „trwałe/tymczasowe”. Zawsze lepszy wybór to przekierowania po stronie serwera.
Łańcuchy tworzą się wtedy, gdy przekierujesz A na B, a później przekierujesz B na C — bez aktualizowania A. Użytkownik i Googlebot podążają z A do B do C zamiast iść bezpośrednio do C.
Każdy „skok” dodaje opóźnienie. Realna latencja użytkownika, mierzona w milisekundach, wpływa na Core Web Vitals na urządzeniach mobilnych. Każdy skok to też kolejny punkt awarii: jeśli którykolwiek URL w łańcuchu zwróci 404, wszystko za nim się psuje.
Dokumentacja Google o migracji serwisu mówi, że Googlebot może przejść nawet do 10 skoków w łańcuchu, ale jednocześnie zaleca przekierowanie bezpośrednio do finalnego adresu. John Mueller doprecyzował to mocniej: „Jedyna rzecz, na którą bym uważał, to to, żeby było mniej niż 5 skoków dla URL-i, które są często crawl’owane.” Googlebot toleruje do 10, zanim oznaczy to jako błąd; praktyczny limit Muellera to 5; prawdziwy cel to 1.
Łańcuchy potrafią narastać po cichu przez lata migracji. Serwis, który przeszedł z .com na .io, znów na .com, zmienił strukturę URL-ów dwa razy i robił testy A/B na stronach kategorii, może zgromadzić łańcuchy bez tego, żeby ktokolwiek to zauważył. (W audytach z SEOJuice najczęstsze znalezisko to nudny łańcuch z czterema skokami na URL-u o wysokim ruchu, który został po migracji, bo nikt nie zaktualizował przekierowań. Łańcuchy z kampanii i testów A/B są drugi najczęstszy winowajca — zwykle dlatego, że tymczasowe 302 nigdy nie zostały potem „posprzątane”.) Potem ktoś odpala crawl i odkrywa, że homepage jest trzy skoki w głąb.
Naprawa zawsze wygląda tak samo: zidentyfikuj docelowy finalny adres i zaktualizuj pierwszy redirect, żeby prowadził tam bezpośrednio. Zredukuj łańcuch. Nie czekaj, aż Google przejdzie przez pośrednie strony.
Pętle to przypadek patologiczny. A przekierowuje na B, B przekierowuje na A, a przeglądarka wyrzuca ERR_TOO_MANY_REDIRECTS. Zwykle to źle skonfigurowana reguła HTTPS albo przekierowanie w CMS-ie, które tworzy cykl. Narzędzia audytowe wyłapują to od razu.
Na co patrzeć:
ERR_TOO_MANY_REDIRECTSDo szybkiej weryfikacji ręcznej curl -I https://yourdomain.com/old-url pokazuje kod statusu i nagłówek Location bez ładowania całej strony. Narzędzia deweloperskie przeglądarki (zakładka Network, „Preserve log” włączone) pokażą pełną sekwencję przekierowań dla dowolnego URL-a. To jest dobre do spot-checków. Do systematycznego pokrycia potrzebujesz crawlera.
Audyt SEOJuice crawl’uje Twoją stronę i flaguje łańcuchy przekierowań, pętle, przekierowania z błędnym kodem oraz skoki do destynacji 4xx. To najszybszy sposób, żeby dostać pełny obraz bez ręcznego „curlowania” setek URL-i. Warto też sprawdzić: wszystkie URL-e z wysokim ruchem z Twojego audytu SEO hygiene. To zazwyczaj tam „zakopany” łańcuch realnie kosztuje.
Single-page applications wymagają tu dodatkowej uwagi. Routing po stronie JS może tworzyć zachowania podobne do przekierowań, których crawlery po stronie serwera nie zauważą w ogóle. Jeśli uruchamiasz stronę w React lub Next.js, zobacz notatki o obsłudze przekierowań w SPA. Przypadki brzegowe z window.location i routingiem po stronie klienta mieszają się z egzekucją JavaScript przez Google w sposób, którego nie widać na pierwszy rzut oka.
Tak. Google potwierdziło, że PageRank przepływa przez 301, 302 i wszystkie przekierowania 3xx. Gary Illyes stwierdził w 2016, że „30x redirects don't lose PageRank anymore”, a John Mueller wyjaśnił, że zarówno 301, jak i 302 przekazują sygnały poprzez konsolidację kanoniczną. Typ przekierowania decyduje o tym, który URL Google trzyma w indeksie — nie o tym, czy equity płynie.
Żadne z nich nie jest „z definicji” lepsze. Właściwy kod zależy od tego, czy ruch jest trwały. Użyj 301, gdy URL docelowy jest tym, który ma być indeksowany w przyszłości. Użyj 302, gdy oryginalny URL powinien pozostać w indeksie i faktycznie zamierzasz go przywrócić. Źle dobrany kod nie „zabiera” link equity — tylko wprowadza do indeksu Google niewłaściwy URL.
Nie ma stałego terminu. Google musi ponownie zcrawlować stary URL, zanim przetworzy sygnał, co może zająć od kilku dni do kilku tygodni — zależnie od częstotliwości crawlowania. Trzymaj 301 aktywne co najmniej rok. Usunięcie go zbyt wcześnie cofa sygnał kanoniczny i będziesz musiał ponownie zlecić Googlebotowi crawl oraz przetworzenie wszystkiego od zera.
Tak, ale pośrednio. Łańcuchy przekierowań dodają opóźnienia, marnują budżet crawl i wprowadzają punkty awarii. Google zaleca przekierowanie bezpośrednio do finalnego destination; praktyczna wskazówka Muellera to mniej niż 5 skoków dla URL-i często crawl’owanych. Efekt to suma: wolniejsze ładowanie strony, mniejsza efektywność crawlowania oraz ryzyko, że uszkodzony skok po drodze wywali całą sekwencję — a nie bezpośrednia kara rankingowa.
Powiązana lektura:
Zrób darmowy audyt SEO, aby znaleźć łańcuchy przekierowań, pętle, przekierowania z błędnym kodem oraz skoki do martwych stron na Twojej witrynie.
no credit card required
No related articles found.