
🛠 Jak dodać rozszerzenie .html do adresów URL WordPress
Przenieśli Państwo stronę z Joomla lub statycznego HTML na WordPress, a wyszukiwarki zdążyły już zaindeksować setki stron z .html na końcu? Nie chcą Państwo tracić pozycji, a standardowe ustawienia bezpośrednich odnośników nie dają takiego formatu.
W praktyce .html w URL nie jest potrzebne dla ozdoby. To zabezpieczenie przed błędami 404 podczas przeprowadzki, gdy stara struktura site.ru/page.html zmienia się na site.ru/page/. Każdy uszkodzony link w indeksie to utrata ruchu. Na szczęście WordPress pozwala dodać rozszerzenie .html standardowo, bez prowizorek i wtyczek.
Poniżej trzy sposoby: przez panel administracyjny (najprostszy), przez kod functions.php i dla niestandardowych typów wpisów. Plus bezpieczne usunięcie .html z przekierowaniem, jeśli format nie jest już potrzebny.
💡 Szybki przegląd:
- Dodać
.htmlprzez Ustawienia → Bezpośrednie odnośniki, 30 sekund, bez kodu - Jeśli standardowy sposób nie zadziałał, edytujemy
functions.php(3 linijki) - Dla niestandardowych typów wpisów filtr
post_type_link - Usunąć
.htmlbez 404, przekierowanie w.htaccess
Po co linkom WordPress rozszerzenie.html
Dawniej, w czasach statycznych stron, każda podstrona była fizycznym plikiem .html na serwerze. Przeglądarka żądała site.ru/about.html i otrzymywała gotowy dokument. WordPress działa inaczej: wszystkie URL są wirtualne, obsługuje je index.php przez mod_rewrite.
Jednak przyzwyczajenie do „plikowych" końcówek jest wciąż żywe. Typowe scenariusze, gdy .html jest naprawdę potrzebne:
- Redesign lub przeprowadzka ze statycznej strony. Stare URL są już w indeksie Google i Yandex. Zmiana ich bez przekierowania to gwarantowany spadek pozycji na 2-4 miesiące.
- Migracja z Joomla, Drupal, ModX. Wiele CMS starej szkoły domyślnie generowało
.htmlna końcu adresu. - Wymóg klienta. Klient „chce tak, jak było" i koniec. Spierać się dłużej niż zrobić.
WordPress pozwala zamknąć wszystkie trzy przypadki bez żadnej wtyczki.
Sposób pierwszy: przez panel administracyjny
Najszybsza droga. Proszę wejść w Ustawienia → Bezpośrednie odnośniki i wybrać opcję „Struktura niestandardowa".
W polu struktury proszę dopisać .html na końcu szablonu. Na przykład:
1 /%category%/%postname%.html
Albo jeśli kategorie nie są potrzebne:
1 /%postname%.html
Proszę kliknąć „Zapisz zmiany". Gotowe. Wszystkie nowe i istniejące URL wpisów otrzymają końcówkę .html. Strony witryny (page) ten sposób pomija, dla nich potrzebny będzie kod z następnego rozdziału.
Proszę zwrócić uwagę: jeśli na stronie są już zaindeksowane linki bez .html, WordPress NIE wykonuje sam przekierowania ze starych URL na nowe. Potrzebna będzie osobna wtyczka do przekierowań lub reguły w .htaccess.
Sposób drugi: przez functions.php
Zdarza się, że panel administracyjny nie daje rezultatu: motyw lub inna wtyczka nadpisują strukturę linków. Wtedy idziemy w kod.
Proszę dodać w functions.php motywu potomnego lub przez wtyczkę Code Snippets:
1 /** 2 * Додає .html в кінець URL сторінок WordPress. 3 * Після вставки коду зайдіть у Налаштування → Постійні посилання 4 * і натисніть «Зберегти зміни» для скидання кешу rewrite-правил. 5 */ 6 add_action('init', function() { 7 global $wp_rewrite; 8 if (! strpos($wp_rewrite->get_page_permastruct(), '.html')) { 9 $wp_rewrite->page_structure .= '.html'; 10 } 11 });
Co tu się dzieje: hak init uruchamia się przy każdym ładowaniu WordPress i dodaje .html do struktury URL stron przez właściwość page_structure globalnego obiektu $wp_rewrite. Sprawdzenie strpos zabezpiecza przed podwójnym dodaniem, jeśli kod został wstawiony dwukrotnie.
Po dodaniu kodu koniecznie proszę wejść w Ustawienia → Bezpośrednie odnośniki i kliknąć „Zapisz zmiany". Bez tego kroku WordPress nie przebuduje cache reguł rewrite i nowe URL nie zadziałają, otrzymają Państwo 404.
Jeśli standardowy sposób i kod nie pomagają, można podłączyć wtyczkę Permalink Manager Lite. Ma ona 100 000+ aktywnych instalacji, ocenę 5 gwiazdek i wsparcie reguł rewrite dla każdego typu treści, włącznie z taksonomiami i WooCommerce.
Jak dodać.html do niestandardowych typów wpisów (CPT)
Mają Państwo na stronie portfolio, opinie, produkty lub inny typ treści utworzony przez register_post_type. Standardowy ekran „Bezpośrednie odnośniki" nie ma na nie wpływu. Pracujemy przez filtr post_type_link:
1 /** 2 * Додає розширення .html до URL довільного типу записів "portfolio". 3 * Замініть 'portfolio' на свій slug CPT. 4 */ 5 function sdstudio_cpt_html_permalink($post_link, $post) { 6 if ($post->post_type === 'portfolio') { 7 return home_url('/portfolio/' . $post->post_name . '.html'); 8 } 9 return $post_link; 10 } 11 add_filter('post_type_link', 'sdstudio_cpt_html_permalink', 10, 2);
Po wstawieniu kodu ponownie Ustawienia → Bezpośrednie odnośniki → Zapisz zmiany. Filtr post_type_link działa w locie: WordPress tworzy URL, Państwo przechwytują go dla żądanego typu wpisów i dopisują .html.
Jeśli CPT jest zarejestrowany z niestandardowym slugiem ('rewrite' => array('slug' => 'works')), proszę użyć go w home_url() zamiast standardowej nazwy typu.
Jak usunąć.html i nie zepsuć indeksacji
Zdecydowali się Państwo wrócić do czystych URL bez rozszerzeń? Samo usunięcie .html z ustawień nie wystarczy. Stare linki, które już trafiły do indeksu wyszukiwarek, staną się 404.
Kolejność działań:
- Proszę usunąć
.htmlz pola „Struktura niestandardowa" w Ustawienia → Bezpośrednie odnośniki i zapisać. - Proszę usunąć kod z
functions.php, jeśli był dodawany. - Proszę dodać w
.htaccess(w katalogu głównym strony, przed blokiem# BEGIN WordPress) przekierowanie:
1 RewriteEngine On 2 RewriteCond %{REQUEST_FILENAME} !-f 3 RewriteRule ^portfolio/(.+)\.html$ /portfolio/$1 [R=301,L]
Dla zwykłych wpisów i stron reguła jest analogiczna, wystarczy zamienić /portfolio/ na żądany segment. R=301 wskazuje wyszukiwarkom, że przeprowadzka jest stała: waga linku jest przekazywana do nowego URL.
Proszę sprawdzić wynik: otworzyć w przeglądarce stary adres z .html, powinno nastąpić przekierowanie na wersję bez rozszerzenia. Potem proszę zajrzeć do Google Search Console po kilku tygodniach i upewnić się, że liczba zaindeksowanych 404 spada.
Wideo: dodajemy.html w 2 minuty
Krótka demonstracja wszystkich trzech sposobów na działającej stronie WordPress:
⁉️🤔 Często zadawane pytania
Czy metoda działa z taksonomiami, kategoriami i tagami?
Standardowy ekran bezpośrednich odnośników nie dotyczy taksonomii. Dla kategorii i tagów potrzebne będą własne reguły rewrite przez
add_rewrite_rule()lub funkcjonalność Permalink Manager Pro. Ale w praktyce.htmlw URL kategorii używa się rzadko: wyszukiwarki normalnie przyjmują/category/seo/bez rozszerzenia.
Co stanie się ze starymi linkami bez.html po zmianie struktury?
WordPress nie tworzy automatycznego przekierowania ze starych URL na nowe. Jeśli strona jest już zaindeksowana, po zmianie struktury stare linki zaczną zwracać 404. Rozwiązanie: wtyczka do przekierowań (na przykład Redirection) z automatycznym śledzeniem zmian bezpośrednich odnośników. Zapamiętuje ona stary slug i sama podstawia 301.
Czy można użyć.php,.htm lub innego rozszerzenia?
Technicznie tak, WordPress obsługuje dowolny ciąg w polu „Struktura niestandardowa". Ale z punktu widzenia wyszukiwarek
.phpwygląda podejrzanie (zwykle zdradza technologię serwera), a.htmto przestarzały format z epoki Windows 3.1. Rozszerzenie.htmljest neutralne, zwyczajowe i nie budzi pytań ani u użytkowników, ani u robotów wyszukiwarek.
Czy pomoże to przy przenoszeniu bloga z Blogger na WordPress?
Tak, to klasyczny scenariusz. Blogger domyślnie udostępniał URL w formacie
/2024/06/post-title.html. Podczas importu do WordPress przez standardowe narzędzie struktura psuje się na/2024/06/post-title/. Dodanie.htmlw ustawieniach bezpośrednich odnośników zachowuje kompatybilność, wszystkie stare adresy nadal działają bez ręcznych przekierowań.
Czy warto dodawać.html: podsumowanie
Krótko mówiąc: dla nowego projektu na WordPress od zera .html nie jest potrzebne. Czyste URL site.ru/post-name/ to standard, który rozumieją zarówno użytkownicy, jak i wyszukiwarki.
Ale są dwa scenariusze, gdzie .html jest w pełni uzasadnione: przeprowadzka ze statycznej strony lub innego CMS oraz migracja z Blogger. W obu przypadkach zachowują Państwo pozycje w wyszukiwaniu i oszczędzają tygodnie na ręcznych przekierowaniach.
Najpewniejsza droga to standardowe ustawienie przez panel administracyjny. Nie zadziałało, functions.php. Dla CPT filtr post_type_link. Wszystkie trzy sposoby nie wymagają wtyczek i nie obciążają strony. A gdy .html przestanie być potrzebne, .htaccess z przekierowaniem 301 starannie przekaże wagę nowym URL.


