Jak ustawić przyjazne adresy w Joomla wtyczką Proste adresy

Przyjazne adresy w Joomla to nie jeden przełącznik.

To trzy opcje w konfiguracji globalnej i pięć w osobnej wtyczce, która sama z siebie nie zrobi nic, dopóki nie włączysz tych pierwszych.

Poniżej to, co wtyczka System - Proste adresy realnie robi — sprawdzone na kodzie źródłowym i na instalacji Joomla 6.1.2, a nie przepisane z dokumentacji.

Gdzie zaczynają się przyjazne adresy

Nie we wtyczce. W System → Konfiguracja globalna → Witryna, w sekcji SEO. Joomla sama to zresztą podpowiada — pod polami jest notka, że dodatkowe ustawienia znajdziesz w dodatku System - SEF.

Masz tam trzy przełączniki i jeden, o którym łatwo zapomnieć:

  • Proste adresy — zamienia index.php?option=com_content&view=article&id=42 na /aktualnosci/tytul-artykulu. To warunek działania całej reszty.
  • Zastosuj przepisywanie URL — usuwa człon index.php/ z adresu. Wymaga przygotowania serwera.
  • Dodaj przyrostek do URL — dokleja rozszerzenie w rodzaju .html zależnie od typu treści.
  • Aliasy w Unicode — na „Nie" Joomla transliteruje polskie znaki w aliasach, więc jagoda-kamczacka-świeża zamieni się na wersję bez ogonków. Na „Tak" alias zostaje taki, jaki wpisałeś.

Przepisywanie URL to jedyna opcja z tej czwórki, która zależy od serwera, a nie od Joomli:

SerwerCo trzeba zrobić
Apache, LiteSpeed zmienić nazwę htaccess.txt na .htaccess
IIS zmienić nazwę web.config.txt na web.config
nginx skonfigurować serwer, .htaccess nie zadziała w ogóle

Ostatni wiersz kosztuje ludzi najwięcej czasu. Na nginksie plik .htaccess jest po prostu ignorowany — możesz go wgrywać i poprawiać do skutku, a adresy dalej będą miały index.php/. Sam mam tak na własnym serwerze i wszystko, co dotyczy przepisywania, siedzi w konfiguracji nginksa.

Co wtyczka robi, choć nie ma na to żadnej opcji

Tu jest sedno. Wtyczka ma pięć pól, ale najważniejsza rzecz, którą robi, nie ma własnego przełącznika.

Po wygenerowaniu strony wtyczka przechodzi przez cały kod HTML i przepisuje względne adresy na takie, które zawierają bazę witryny. Dotyczy to atrybutów href, src, poster i srcset, obrazków tła w style="background: url(/...)", tagów <object> i <param>, a nawet adresów w window.open() oraz w onmouseover i onmouseout.

Po co? Bo przeglądarka liczy ścieżkę względną od katalogu w adresie. Przy /artykul i przy /oferta/strony/wizytowka to dwa różne katalogi. Bez tej podmiany szablon z względnymi ścieżkami rozsypywałby się na głębiej zagnieżdżonych adresach — znikałyby obrazki i style.

Druga rzecz z tej samej kategorii: wtyczka wyłapuje w treści linki wpisane surowo, w postaci href="/component/", i przepuszcza je przez router Joomli. Dostają przyjazny adres, mimo że w edytorze zostały wklejone po staremu.

Trzecia rzecz to adresy „skażone" — takie, które router rozpoznał, ale były częściowo błędne, na przykład dobre ID artykułu przy nieaktualnym aliasie. Wtyczka buduje wtedy poprawny adres i wykonuje przekierowanie 301. To ono sprawia, że po zmianie tytułu artykułu stary link nadal prowadzi do celu, a nie do błędu 404.

Od wersji 5.4.4 to samo dzieje się na stronach błędów, bo one omijają zwykły tryb renderowania.

Wszystko powyżej działa wyłącznie na froncie i tylko przy odpowiedziach HTML. I wszystko wyłącza się razem z wtyczką.

Pięć opcji i warunki, pod którymi działają

Każda z pięciu opcji ma warunek. Jeśli warunek nie jest spełniony, pole można ustawić, zapisać i nie zobaczyć żadnego efektu.

OpcjaCo robiKiedy działa
Domena witryny wstawia znacznik canonical z podaną domeną tylko gdy pole jest wypełnione
Wymuś przyrostek podczas przekierowania 301 z adresu bez rozszerzenia na adres z .html wymaga włączonego „Dodaj przyrostek do URL"
Ścisła obsługa index.php 301 usuwający index.php z adresu wymaga włączonego „Zastosuj przepisywanie URL"
Ukośnik dla adresów URL wymusza końcowy / albo jego brak tylko gdy przyrostek jest wyłączony
Ścisła obsługa adresów 301 z adresu z parametrami na przyjazny zawsze, przy żądaniach GET

Dwie z nich wymagają komentarza.

Domena witryny to jedyne pole w tej wtyczce, które dokłada canonical. Działa też wtedy, gdy komponent już taki znacznik ustawił — wtyczka podmienia w nim domenę, zostawiając ścieżkę, parametry i kotwicę bez zmian. To ratunek dla strony, która odpowiada jednocześnie pod www i bez www. Pamiętaj tylko, że dla Joomli, tak jak dla Google, https://example.com i https://www.example.com to dwie różne domeny.

Ukośnik dla adresów URL ma trzy stany: bez zmian, wymuś adresy bez ukośnika, wymuś z ukośnikiem. Warunek jest tu twardy i zapisany w kodzie: opcja jest ignorowana, gdy włączysz przyrostek .html. Trudno zresztą wyobrazić sobie adres kończący się na .html/.

Drobiazg z pola „Wymuś przyrostek": jego opis zapowiada, że od wersji 6.0 stanie się to zachowaniem domyślnym, a opcja zniknie. W 6.1.2 pole nadal tam jest.

Jak zamknąć duplikaty adresów

Ten sam artykuł potrafi w Joomli odpowiadać pod pięcioma adresami naraz:

  • /index.php?option=com_content&view=article&id=42&catid=8
  • /index.php/aktualnosci/tytul-artykulu
  • /aktualnosci/tytul-artykulu
  • /aktualnosci/tytul-artykulu/
  • /aktualnosci/tytul-artykulu.html

Dla Google to pięć adresów z tą samą treścią. Sygnały rozkładają się między nie zamiast sumować, a budżet indeksowania idzie na kopie.

Trzy opcje wtyczki zamykają cztery z tych wariantów, każda jednym przekierowaniem 301:

  • Ścisła obsługa adresów wycina wariant z parametrami zapytania.
  • Ścisła obsługa index.php wycina warianty z index.php w środku i na końcu.
  • Ukośnik dla adresów URL wycina jeden z dwóch wariantów: z ukośnikiem albo bez.

Jest jednak haczyk przy pierwszej z nich, o którym warto wiedzieć zawczasu. Przekierowanie z adresu z parametrami nastąpi tylko wtedy, gdy router zbuduje adres całkowicie przyjazny. Jeśli komponent nie potrafi zamienić wszystkich parametrów na segmenty ścieżki i w wyniku zostaje choćby jeden ?parametr=, wtyczka odpuszcza i nie przekierowuje. Zdarza się to przy rozszerzeniach firm trzecich z ubogim routerem, przy filtrach i przy stronicowaniu.

Dlatego po włączeniu tej opcji przeklikaj listingi, wyszukiwarkę i koszyk, jeśli masz sklep. Właśnie tam parametry zostają w adresie najczęściej.

Czego wtyczka nie zrobi: nie utworzy przekierowań ze starych adresów, których dziś już nie ma. Do tego służy osobny komponent Przekierowania razem z wtyczką System - Przekierowanie.

Kolejność wdrożenia i pułapki

Kolejność ma tu znaczenie, bo każda z tych opcji zmienia adresy, pod którymi odpowiada strona.

  1. Włącz Proste adresy w konfiguracji globalnej i przeklikaj stronę. To najbezpieczniejszy z tych kroków.
  2. Przygotuj serwer, potem włącz przepisywanie URL. Najpierw .htaccess, web.config albo reguły nginksa, dopiero potem przełącznik. W odwrotnej kolejności dostaniesz błędy 404 na całej stronie.
  3. Zdecyduj o przyrostku raz. Włączenie lub wyłączenie .html po indeksacji zmienia każdy adres w witrynie.
  4. Sprawdź, czy wtyczka jest włączona. Po instalacji jest, ale bywa wyłączana przy diagnozowaniu innych problemów.
  5. Ukośnik i ścisłą obsługę adresów włączaj na końcu, po jednej. Po każdej zmianie sprawdź curl -I https://twojadomena.pl/jakis-adres i zobacz, czy odpowiedź to 200, czy 301 w oczekiwane miejsce.

Pułapki, na które warto uważać:

  • Ukośnik i przyrostek wykluczają się. Ustawienie ukośnika przy włączonym .html nie zadziała i nie dostaniesz o tym żadnego komunikatu.
  • Zmiany na żywej stronie kosztują. Najlepiej ustawić to wszystko na starcie projektu. Przy stronie z historią w Google każda zmiana wymaga mapy przekierowań.
  • Na nginksie .htaccess nie istnieje. Reguły muszą trafić do konfiguracji serwera.
  • Nie zmieniaj aliasów masowo po fakcie. Wtyczka poratuje Cię przy pojedynczym artykule, ale nie zastąpi przekierowań przy przebudowie struktury.

Jeśli strona ma już historię w wyszukiwarce, a struktura adresów wymaga przebudowy, rozsądniej zaplanować to jako osobne zadanie — albo zlecić komuś, kto konfiguruje strony na Joomli na co dzień.

Podsumowanie

Wtyczka System - Proste adresy jest w rdzeniu Joomli, włączona domyślnie, i większość jej pracy dzieje się bez ustawiania czegokolwiek. To ona pilnuje, żeby względne ścieżki w szablonie nie rozsypały się na zagnieżdżonych adresach, i to ona przekierowuje stary alias na nowy.

Pięć opcji w panelu to warstwa dla porządkowania duplikatów. Domena witryny zamyka sprawę www, pozostałe cztery sprowadzają każdą stronę do jednego adresu.

Zacznij od curl -I na kilku adresach własnej strony. W kilka sekund zobaczysz, ile wariantów tej samej treści dziś odpowiada kodem 200.

Chcesz mieć czyste adresy bez grzebania w konfiguracji?

Ustawię przyjazne adresy, przepisywanie URL i przekierowania na Twojej stronie na Joomli — tak, żeby nic nie zniknęło z Google.

Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie w przeglądarce obsługi JavaScript.