PHP

PHP redirect, czyli jak zrobić poprawnie przekierowanie

Daniel Wlaźlak
Ilustracja do artykułu o przekierowaniach
(Ilustracja do artykułu o przekierowaniach : envato, autor Maciejbledowski)

Cieszę się, kiedy mogę łączyć w artykule dwie moje pasje, jakimi są SEO i PHP. Temat przekierowań znakomicie ze sobą tutaj współgra.

Często seowcy karzą przekierować programiście "w htaccess" jedne adresy na drugie, i wszystko się zgadza, ale takie przekierowania "w htaccess" to się robi dla kilku linków, albo kilku wzorców.  A co jeśli mamy do przekierowania tysiące adresów?

Przekierowania wykonujemy przecież, bo:

  • sprzątamy jakieś stare zaniedbania,
  • sprzątamy broken links prowadzące z sieci,
  • robimy migrację na nowy CMS i każdy stary adres będzie miał nowy, gdzie nie da się wyłapać wzorca i zrobić to za pomocą sprytnego Regex-a,
  • chcemy wdrożyć krótkie adresy,
  • czasami po prostu chcemy mieć porządek w aplikacji, nawet tej małej, która obecnie ma tylko 20 przekierowań. 

Przychodzi z pomocą nam wykonanie przekierowanie w kodzie aplikacji.  Do samego przekierowania w PHP, bo o aplikacji w PHP dzisiaj rozmawiamy,  służy nam funkcja header(), która zwraca czyste nagłówki HTTP z kodami odpowiedzi. Do wykonania przekierowania potrzebujemy najczęściej statusu 301 i podanego Location gdzie ma przenieść  przekierowania. O samym wpływie na SEO i rodzajach przekierowań przeczytaj pod zaznaczonym linkiem lub odsyłam Cię do rfc2616, gdzie opisane jest całe HTTP/1.1 i poszczególne kody odpowiedzi HTTP

<?php
header( "Location: $location", $replace, $status );
exit;
?>

W funckji header() parametru $location nie musimy długo tłumaczyć, wskazujemy tam miejsce docelowe. Drugi parametr, jaki przyjmuje funkcja header, to $replace,  parametr ten nadpisuje takie same rodzaje header i nie pozwala na niepotrzebne wywołanie header location. W $status przekazujemy kod przekierowania, gdzie  301 to Moved Permanently, 302 Found. Zobacz inne kody serwera pod adresem.

Przykład:

<?php

header( "Location: https://www.google.pl", true, 301);
exit;
?>

Jeśli szukałeś tylko dokładnej funkcji, za pomocą której wywołasz header location to na tym koniec, pamiętaj tylko po jej wywołaniu zwrócić exit, żeby poszedł tylko sam nagłówek. Jeśli nie masz pomysłu jak wykonać aplikacje lub panel przekierowań w PHP zapraszam Cię do czytania dalej.

Musisz też pamiętać, że funkcja hader() to nie jedyna opcja na wykonanie przekierowania w PHP, które będzie backendowe i zgodnie z SEO. Możemy użyć meta refresh, bo jest to traktowane jak stałe przekierowanie 301 przez Google, pozwala na przeniesienie PageRank na stronę docelową. To  dzięki  Netscape mamy metatag meta refresh, w którym podajemy też lokalizacje, na którą ma przekierować nas przeglądarka. 

Metatag musi mieć postać: 

 <meta http-equiv="Refresh" content="0; url=http://www.example.com/" />

gdzie w   content="0; zero jest czasem wyrażonym w sekundach, po jakim strona ma przekierować się do innego adresu. 

Umieś metatag w sekkcji <head>, a jeśli czas zwiększasz do kilku sekund, to możesz umieścić w sekcji body informacji o nadchodzącym przekierowaniu, np.  "Za trzy sekundy przekierowujemy Cię na stronę https://optymeo.pl".

System przekierowań w PHP

Jeżeli rozważamy pisanie w czystym PHP, bez żadnego frameworka, to trzeba zacząć od pobrania wywołanej ścieżki w przeglądarce, która stanie się naszym kluczem w bazie danych.  Ścieżkę z adresu wyciągniesz ze zmiennej tablicowej $_SERVER['REQUEST_URI'] do trzymania przekierowań bazę danych musisz wybrać sobie sam, najlepiej taką, na której stoi CMS, ale przy rozwiązaniach z dużym ruchem, albo ze wzorcami przekierowania, o których za chwilę, może lepiej zastanowić się nad bazą NoSQL. 

Na pewno kluczowe jest założenie klucza na pole, kolumnę, która będzie trzymała ścieżkę do przekierowania i w szukaniu klucza przy bardzo dużym obciążeniu poradzi sobie zwykły MySQL.

Najczęstsze błędy przy używaniu przekierowania w PHP

Podczas pracy z funkcją header() mogą wystąpić pewne błędy, które sprawiają, że przekierowanie nie działa poprawnie. Oto najczęstsze z nich:

  • Wysłane dane przed nagłówkiem: Funkcja header() musi być wywoływana przed jakimkolwiek wyjściem treści (w tym pustymi znakami, spacjami, HTML itp.). Gdy PHP wykryje jakiekolwiek wyjście, nagłówki HTTP są już wysyłane, co uniemożliwia zmianę nagłówka. Błąd ten objawia się ostrzeżeniem typu „Cannot modify header information – headers already sent”.
  • Brak użycia exit: Jeśli nie zakończysz działania skryptu za pomocą exit, przeglądarka może próbować załadować pozostałą część strony, co może skutkować nieprzewidywalnym działaniem.

Alternatywy dla przekierowania w PHP

Chociaż header() jest najpopularniejszą metodą przekierowania w PHP, istnieją także inne techniki, które mogą być przydatne w różnych sytuacjach:

Przekierowanie z użyciem JavaScript

Jeśli nie można użyć header(), np. gdy już wyświetlono część strony, można wykorzystać JavaScript do przekierowania:


<script>
    window.location.href = 'https://optymeo.pl';
</script>

Ten sposób nie jest idealny pod względem SEO, ale może być przydatny w specyficznych przypadkach.

Meta tag refresh

Można także użyć metatagu refresh, aby przekierować użytkownika po określonym czasie:


<meta http-equiv="refresh" content="3;url=https://optymeo.pl">

Ta metoda ustawia przekierowanie po 3 sekundach i może być użyteczna np. w celu pokazania wiadomości przed przekierowaniem. Jest jednak mniej wydajna niż metody oparte na nagłówkach HTTP.

Najlepsze praktyki w stosowaniu przekierowań w PHP

W celu zapewnienia optymalnego działania przekierowań, warto przestrzegać kilku kluczowych zasad:

  • Unikaj wysyłania danych przed nagłówkiem. Staraj się, aby funkcja header() była wywoływana na samym początku skryptu lub zaraz po zakończeniu przetwarzania logiki, aby uniknąć błędów związanych z wysyłaniem nagłówków.
  • Używaj exit po header(). Zawsze kończ skrypt, aby zapobiec dalszemu przetwarzaniu danych po przekierowaniu.
  • Stosuj przekierowania 301 lub 302 odpowiednio: Przekierowanie 301 oznacza trwałe przeniesienie i jest lepsze pod kątem SEO, podczas gdy 302 oznacza przeniesienie tymczasowe.

Przekierowanie w WordPress

WordPress, jako jeden z najpopularniejszych systemów zarządzania treścią, umożliwia łatwe wykonywanie przekierowań za pomocą wbudowanych funkcji. Aby wykonać przekierowanie w WordPressie, możesz skorzystać z funkcji wp_redirect(), która działa podobnie jak header() w czystym PHP. Przykład użycia wygląda następująco:


<?php
wp_redirect('https://example.com', 301);
exit;
?>

Funkcja wp_redirect() przyjmuje dwa argumenty: pierwszy to adres URL, na który ma nastąpić przekierowanie, a drugi opcjonalny – kod statusu HTTP, taki jak 301 (przekierowanie trwałe). Ważne jest, aby zawsze używać exit po wp_redirect(), aby przerwać dalsze przetwarzanie skryptu.

Przekierowanie w Laravel

Laravel, popularny framework PHP, również oferuje wbudowane funkcje do wykonywania przekierowań. Przekierowanie w Laravel można wykonać za pomocą metody redirect() w kontrolerze:


return redirect('https://example.com', 301);

W Laravel można też przekierować użytkownika do konkretnej trasy (route) lub z danymi sesyjnymi. Na przykład:


return redirect()->route('home')->with('status', 'Zalogowano pomyślnie');

Warto jednak pamiętać, że sposób korzystania z funkcji przekierowujących w Laravel może różnić się w zależności od wersji frameworka. W związku z tym, aby być na bieżąco z najlepszymi praktykami i ewentualnymi zmianami w najnowszych wersjach, zaleca się regularne sprawdzanie oficjalnej dokumentacji Laravel: Laravel Documentation.


Czy ten artykuł był Ci pomocny? Jesteśmy doświadczoną agencją SEO, skontakuj się z nami, jeśli potrzebujesz pomocy ze swoją stroną.

Prowadziłem i rozwijałem działy SEO w bardzo dużych wydawnictwach (Agora, gazeta.pl). Specjalizuję się w tworzeniu kompleksowych rozwiązań zasięgowych oraz programowaniu. @wlazlak

Spotkajmy się też w moich social media :
Zobacz moje wszystkie artykuły
Zaufali nam:
ElbudBis
Instytu cyfrowego obywatelstwa
Kinesso
Fundacja Orange
Rodzice.pl

Współpracuj z nami!

Naszą mocą jest technologia i doświadczony zespół

Przez lata zdobywaliśmy doświadczenie u największych wydawców w Polsce, a teraz zadbamy o rozwój Twojej firmy od strategii wzrostu po wdrożenia na stronach dzięki naszemu własnemu software house'owi. Zaufaj nam, aby osiągać dobre wyniki.

Porozmawiajmy o Twoich celach i potrzebach!

Przejrzyj najnowsze artykuły i wpisy na naszym blogu