Stare przekierowanie 301 w cache – Jak sobie poradzić.
Przekierowanie 301, z angielskiego redirection „301 Moved Permanently”, to sposób, w jaki serwer internetowy informuje przeglądarki, że dana strona została trwale przeniesiona na nowy adres URL i wszelkie przyszłe zapytania powinny być kierowane nie tu, ale na nowy adres. „Trwale” to słowo klucz. Przeglądarki zapamiętują takie przekierowania w swojej pamięci podręcznej i nie bardzo masz na to potem wpływ. Co jeśli zapamiętają złe przekierowanie? Jak sobie z tym radzić?
Przekierowanie 301 jest przydatne i często stosuje się je w pozycjonowaniu SEO, gdy zmieniasz adres URL strony lub całego serwisu. Wartość pozycjonowania strony w wynikach wyszukiwania, tzw. „link juice„, jest przenoszona na nowy adres, co pozwala uniknąć spadku ruchu oraz utraty pozycji w wynikach wyszukiwania. Przekierowanie to jest również wykorzystywane często jako metodę zmiany struktury strony internetowej. Przekierowania konfiguruje się w panelach administracyjnych hostingu albo edytując plik .htaccess
Pamiętaj jednak, że nieodpowiednie użycie przekierowań 301 może prowadzić do problemów związanych z SEO oraz działaniem strony, dlatego warto zadbać o prawidłową implementację. Dowiedz się więcej o przekierowaniach w naszym artykule Jak wykonać proste przekierowania w htaccess – HitMe Blog Hosting
Przeglądarki zapamiętują przekierowania 301
To ważne! Domyślnie, przeglądarki zapamiętują przekierowania raz ustawione. Jeśli przeglądarka natrafi na przekierowanie 301 na stronie, zapamiętuje je w swojej pamięci podręcznej (cache). Dzięki temu, gdy użytkownik ponownie próbuje odwiedzić stronę z przekierowaniem, przeglądarka od razu przekierowuje go na nowy adres URL bez konieczności ponownego sprawdzania jego aktualnych parametrów.
Okres przechowywania przekierowania 301 w pamięci podręcznej przeglądarki może różnić się między przeglądarkami. Niektóre przeglądarki mogą przechowywać informacje o przekierowaniach 301 przez tygodnie lub nawet miesiące, podczas gdy inne mogą je przechowywać przez krótszy czas. Może to zależeć albo od przeglądarki ale też od ustawień na serwerze, o czym później.
Aby zobrazować działanie przekierowania i pamięci podręcznej cache przeglądarki, spójrz na poniższą grafikę.
Na powyższym obrazku:
- [1] Wpisujesz w pasek adresu żądany URL np.
demo1.pl
, - [2] następuje przekierowanie i odwiedzasz de facto inny adres
demo2.pl
, - [3] możesz to zaobserwować w zakładce Network w narzędziu DevTools przeglądarki, gdzie widać że nastąpiło przekierowanie 301,
- jeśli jesteś administratorem witryny możesz teraz usunąć przekierowanie w ustawieniach swojej strony. Mimo to, gdy odwiedzisz ją ponownie, przeglądarka ponownie wykona przekierowanie korzystając z [4] cache (disk cache), ponieważ je zapamiętała
- [5] kolejne wizyty z przekierowaniem 301 następują już z pamięci podręcznej przeglądarki, pomimo że tak naprawdę przekierowanie już dawno usunęliśmy, jednak przeglądarka ma to gdzieś – ma swój cache.
Usunąłem przekierowanie 301 ono dalej działa
Aby upewnić się że jest to spowodowane zapisem w pamięci podręcznej przeglądarki spróbuj jeden z poniższych kroków:
- Odwiedź taką stronę w trybie incognito lub
- użyj innej, (nowej) przeglądarki, która jeszcze nie odwiedzała tej strony
Jeśli nastąpi przekierowanie, prawdopodobnie dalej jest ono ustawione na serwerze. Z kolei jeśli przekierowanie nie nastąpi, masz pewność że to wina cache przeglądarki.
Jak ominąć przekierowanie 301 z cache przeglądarki?
Co zrobić jeśli to wina cache i pomimo usunięcia przekierowania na stronie jest ono dalej aktywne, ponieważ przeglądarka zapamiętała je w swojej pamięci podręcznej. W tym przypadku wyłącz na chwilę cache przeglądarki i odwiedź stronę. Dzięki tej czynności nastąpi przebudowanie pamięci podręcznej przeglądarki. Problem z zapamiętanym przekierowaniem masz z głowy. Jak to zrobić?
- Otwórz DevTools (Narzędzia programistyczne) przeglądarki (
Ctrl+Shift+I
lub klawiszF12
) - przejdź na zakładkę [1] Network (Sieć) lub [2] rozwiń zakładki, jeśli jest ona niewidoczna
- W zakładce Network odnajdź i zaznacz [3] Disable cache „Wyłącz pamięć podręczną”
- [4] Odśwież stronę, nie zamykając DevTools. Zauważysz że nie nastąpi już żadne przekierowanie.
Opcja „Wyłącz pamięć podręczną” w Chrome DevTools jest aktywna tylko wtedy, gdy otwarty jest panel DevTools. Gdy włączysz opcję „Wyłącz pamięć podręczną”, przeglądarka nie będzie korzystać z zasobów zapisanych w pamięci podręcznej, a zamiast tego będzie żądać każdorazowo nowej zawartości z serwera podczas ładowania strony. Nawiasem mówiąc, to ustawienie jest to szczególnie przydatne podczas projektowania i debugowania, ponieważ zapewnia pozyskiwanie aktualnych wersji plików.
Pamiętaj! Wyłączenie pamięci podręcznej (cache) funkcjonuje tylko jeśli okno DevTools jest otwarte podczas odwiedzania strony, a opcja ta pozostaje zaznaczona.
Zapamiętane przekierowanie 301 – potencjalny problem dla odwiedzających.
Zdarza się tak że ustawimy przekierowanie 301, a po jakimś czasie je zmieniamy. Przykład z życia. Mamy rozstrzał czasowy podczas zastępowania starej strony firmowej na nową, z nowszym wyglądem, silnikiem, strukturą. Na starej stronie jednak pozostaje dyrektywa przejścia na https://
ale taka z użyciem zmiennej HOST_NAME
, która to zmienia się wraz ze zmianą nazwy domeny na dajmy na to – old.nazwafirmy.pl
. I już problem gotowy.
Jeśli ktoś odwiedzi taką witrynę, zanim poprawimy przekierowanie (lub zastąpimy nowym plikiem .htaccess
) to zostanie ono zapamiętane przez jego przeglądarkę. I jedyna opcja, która nam pozostanie to taka, iż trzeba będzie tego odwiedzającego prosić o wyczyszczenie cache własnej przeglądarki. Inaczej nigdy nie wejdzie na nową stronę pod adresem nazwafirmy.pl
, cały czas będzie go przekierowywało na old.nazwafirmy.pl
. Co jeśli w tym czasie odwiedziny nastąpią w setkach czy tysiącach użytkowników. Nie sposób wszak wszystkich ich poprosić o wyczyszczenie cache przeglądarek. Czy da się coś zrobić po fakcie?
Czy mogę wymusić pomijanie cache przeglądarki z serwera?
W rzeczywistości nie można skutecznie wymusić ani omijać pamięci podręcznej przekierowań 301 w przeglądarkach. Ponieważ przekierowania 301 są traktowane jako trwałe, a przeglądarki zwykle przechowują je w pamięci podręcznej.
Możesz częściowo zapobiec występowaniu tego problemu. Stosuj uprzednio przekierowania z dodatkiem odpowiednich dyrektyw w pliku .htaccess
. Dodaj do przekierowania dyrektywę Cache-Control
oraz wartość max-age
, wtedy masz kontrolę nad okresem ważności takich przekierowań.
Header set Cache-Control "public, max-age=86400"
co oznacza, że zawartość będzie ważna przez 1 dzień od momentu wizyty. Wartość max-age
jest wyrażona w sekundach.
Nie wiesz jak dokonać zmian w pliku .htaccess
domeny? Sprawdź jak łatwo możesz edytować pliki na hostingu DirectAdmin – zarządzanie i tworzenie plików. | Jak to zrobić na hostingu? (hitme.pl)
Przetestuj działanie przekierowania 301 z Cache-Control.
Nie jesteś pewny czy to zadziała? Przetestuj przekierowanie z cache-control
dodając i odpowiednio modyfikując nazwę domeny. Spróbuj przetestować podobne przekierowanie 301 u siebie. Przekierowanie będzie działało na serwerze Apache lub Litespeed.
RewriteEngine On RewriteCond %{HTTP_HOST} ^(www.)?demo1.pl [NC] RewriteRule (.*) http://demo2.pl/$1 [R=301,L] Header set Cache-Control "public, max-age=300"
- Dodaj do pliku
.htaccess
przekierowanie pomiędzy swoimi adresami odpowiednia zmieniając nazwy domen lub adresy - Następnie wejdź na adres swojej domeny z takim plikiem
.htaccess
(demo1.pl
), - nastąpi przekierowanie do domeny (
demo2.pl)
(301), jest to przekierowanie stałe, przeglądarki umieszczą go w swojej pamięci podręcznej - następnie cofnij, usuń cały kod przekierowania 301 z przykładu w pliku
.htaccess
i zapisz zmiany - w ciągu 5 minut wejdź ponownie na stronę
demo1.pl
, przekierowanie będzie dalej aktywne – mimo że nie jest już ustawione na serwerze (to efekt pamięci podręcznej przeglądarki) - ale odczekaj 5 minut i wejdź ponownie na (
demo1.pl)
, przeglądarka nie wykona już przekierowania
Jeśli chcesz ustawić indywidualny Cache-Control
tylko dla przekierowań dodaj parametr env=REDIRECT_STATUS
. W ten sposób wartość max-age
będzie dotyczyła jedynie przekierowań, a nie innych typów żądań.
Header set Cache-Control "public, max-age=300" env=REDIRECT_STATUS
Możesz korzystać z przekierowania 302 – jest jeden problem.
Jeśli chodzi o kontrolowanie zachowania pamięci podręcznej przekierowań, można też użyć kodu przekierowania 302 zamiast 301. Przekierowanie 302 jest przekierowaniem tymczasowym, a przeglądarki są mniej skłonne do przechowywania takich przekierowań w pamięci podręcznej. Aby to zrobić, możesz użyć poniższego kodu w pliku .htaccess
:
RewriteEngine On RewriteRule ^stara-strona$ https://twojastrona.pl/nowa-strona [R=302,L]
Jednak pamiętaj, że przekierowanie 302 nie przenosi wartości SEO („link juice”) tak skutecznie jak przekierowanie 301, dlatego jeśli jest to stałe przekierowanie, które ma na celu zachowanie wartości SEO, najlepiej stosować przekierowanie 301. I niestety koło się zamyka.