Scenariusz, który zna każdy, kto kiedykolwiek przenosił WordPressa albo przestawiał go z HTTP na HTTPS: strona główna działa idealnie, ale kliknięcie w jakikolwiek wpis, podstronę lub kategorię zwraca surowy komunikat „404 Not Found”. Treść jest w bazie, pliki są na miejscu, a jednak WordPress upiera się, że niczego nie ma.
Dobra wiadomość: to jeden z najprostszych błędów do naprawienia. Cała operacja sprowadza się do przebudowania struktury permalinków — co można zrobić na pięć różnych sposobów, w zależności od tego, czy masz dostęp do panelu administracyjnego, do FTP, do SSH, czy tylko do bazy. W tym poradniku przechodzę przez wszystkie z nich.
Spis treści
ToggleDlaczego podstrony WordPressa wyrzucają 404?
Żeby naprawić problem, warto wiedzieć, co się naprawdę dzieje. WordPress nie przechowuje Twoich URL-i jako fizycznych plików na serwerze. Adres typu twojadomena.pl/kategoria/tytul-wpisu nie odpowiada żadnemu plikowi w systemie plików — to Apache (lub Nginx) decyduje, że takie żądanie ma trafić do index.php WordPressa, który dopiero odczyta parametry z URL-a i zwróci odpowiednią treść.
Za to przekierowanie odpowiada plik .htaccess (na Apache) lub odpowiadająca mu konfiguracja w bloku location (na Nginx). Gdy coś pójdzie nie tak z tym plikiem — zniknie, straci uprawnienia, ma złą zawartość, serwer nie ma włączonego mod_rewrite — WordPress nagle nie umie obsłużyć żadnego URL-a poza stroną główną. I wtedy widzisz setki 404.
Metoda 1. Reset permalinków w panelu administracyjnym (najprostsze)
W 80% przypadków wystarczy ten jeden ruch. Jeżeli dostajesz się do /wp-admin (czyli sam panel działa, a tylko frontend ma 404), zrób tak:
- Zaloguj się do WordPressa.
- Przejdź do Ustawienia → Bezpośrednie odnośniki (po angielsku: Settings → Permalinks).
- Nic nie zmieniaj — po prostu przewiń na dół strony.
- Kliknij „Zapisz zmiany”.
To jedno kliknięcie powoduje, że WordPress przebudowuje regulamin przepisywania URL-i i aktualizuje plik .htaccess (o ile ma do niego uprawnienia zapisu). W większości przypadków po odświeżeniu strony permalinki działają normalnie.
Co zrobić, jeśli reset nie pomógł?
Dwie najczęstsze przyczyny:
- WordPress nie ma uprawnień zapisu do .htaccess — na dole strony „Bezpośrednie odnośniki” pojawi się wtedy komunikat „Jeżeli Twój plik
.htaccessjest zapisywalny, WP mógłby go edytować…” z przykładowym kodem. Skopiuj ten kod ręcznie do pliku. - Serwer nie ma włączonego mod_rewrite — o tym za chwilę.
Metoda 2. Ręczna edycja pliku .htaccess
Jeżeli reset w panelu nie działa albo nie masz dostępu do panelu, wgraj .htaccess ręcznie.
Krok 1. Znajdź lub utwórz plik .htaccess
Zaloguj się przez FTP lub menedżer plików w panelu hostingu i wejdź do katalogu głównego WordPressa (tam, gdzie leży wp-config.php). Włącz widoczność plików ukrytych — plik zaczyna się od kropki, więc bez tego go nie zobaczysz.
Jeżeli plik istnieje — zrób jego kopię na wszelki wypadek i otwórz do edycji. Jeżeli nie istnieje — utwórz nowy plik o nazwie .htaccess (ważne: bez żadnego rozszerzenia!).
Krok 2. Wklej standardową konfigurację WordPressa
W pusty plik (lub na samym początku istniejącego, przed innymi regułami) wklej:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Zapisz plik i odśwież stronę. To dokładnie ta sama zawartość, którą WordPress sam wgrywa przy resetowaniu permalinków. Jeżeli Twoja strona siedzi w podkatalogu (np. /blog), zmień RewriteBase / na RewriteBase /blog/.
Krok 3. Sprawdź uprawnienia do pliku
Plik .htaccess powinien mieć uprawnienia 644. W FileZilli klikasz prawym przyciskiem i „Uprawnienia pliku”, wpisujesz 644, potwierdzasz. Za niskie uprawnienia (np. 600) mogą spowodować, że serwer nie odczyta pliku.
Metoda 3. Sprawdzenie, czy mod_rewrite jest włączony
Jeżeli masz idealny .htaccess, a strona nadal zwraca 404, problem może leżeć głębiej — po stronie konfiguracji serwera Apache. WordPress korzysta z modułu mod_rewrite, który musi być włączony. Na 95% hostingów współdzielonych jest włączony domyślnie, ale zdarzają się wyjątki (zwłaszcza przy świeżych VPS-ach).
Szybki test
Utwórz w katalogu głównym plik phpinfo.php z zawartością:
<?php phpinfo(); ?>
Wejdź pod twojadomena.pl/phpinfo.php i w polu „Loaded Modules” szukaj mod_rewrite. Jeśli go nie ma — musisz zadzwonić do hostingu i poprosić o włączenie. Po teście natychmiast usuń plik phpinfo.php, bo ujawnia zbyt wiele informacji o konfiguracji serwera publicznie.
Na własnym VPS
Jeżeli prowadzisz serwer sam, włącz mod_rewrite jednym poleceniem:
sudo a2enmod rewrite
sudo systemctl restart apache2
Dodatkowo w konfiguracji VirtualHost dla Twojej strony (zwykle /etc/apache2/sites-available/twojadomena.pl.conf) upewnij się, że jest wpis AllowOverride All — bez niego Apache ignoruje .htaccess.
Metoda 4. Nginx — inna konfiguracja
Jeżeli Twój serwer to Nginx, nie ma .htaccess i żadna edycja plików w katalogu WordPressa nie pomoże. Konfigurację przepisywania URL-i trzeba dodać bezpośrednio do pliku konfiguracji serwera (/etc/nginx/sites-available/twojadomena.pl). W bloku server dodaj:
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
Zapisz plik i zrestartuj Nginx:
sudo nginx -t
sudo systemctl reload nginx
Pierwsze polecenie sprawdza poprawność składni (robisz to zawsze — błąd konfiguracji w Nginx położy cały serwer), drugie przeładowuje konfigurację.
Metoda 5. Zmiana struktury permalinków przez bazę danych
Ostatnia deska ratunku, gdy żadna z powyższych metod nie działa. Zaloguj się do phpMyAdmin, wybierz bazę WordPressa i otwórz tabelę wp_options. Szukaj rekordu z option_name = permalink_structure i sprawdź jego wartość.
Jeżeli chcesz tymczasowo wrócić do tzw. „brzydkich” URL-i (typu ?p=123), które nie wymagają .htaccess, ustaw wartość permalink_structure na pustą. WordPress zacznie używać domyślnych linków i podstrony znów się otworzą — nie będą eleganckie, ale przynajmniej zadziałają. Potem wracasz do panelu i w „Bezpośrednich odnośnikach” ustawiasz docelową strukturę.
Co sprawdzić po naprawie?
Po przywróceniu permalinków zrób szybki audyt, żeby mieć pewność, że wszystko działa:
- ✅ Otwórz 10 losowych wpisów — każdy powinien się ładować bez 404.
- ✅ Otwórz strony kategorii (np.
/kategoria/seo/) — one też używają rewrite. - ✅ Otwórz strony tagów i archiwum autorów.
- ✅ Sprawdź wyszukiwarkę (
?s=test) — czy zwraca wyniki. - ✅ Sprawdź sitemap XML (
/sitemap.xmllub/sitemap_index.xml, jeśli używasz Yoast lub Rank Math) — powinna być dostępna. - ✅ Wejdź do Google Search Console → Stan indeksowania za 48–72 godziny i sprawdź, czy błędy 404 zniknęły z raportu.
Jak zapobiec 404 w przyszłości?
Kilka nawyków, które zmniejszają szansę na ponowne wystąpienie problemu:
- Zawsze rób backup .htaccess przed większymi zmianami w konfiguracji.
- Po migracji sprawdzaj permalinki jako pierwsze — to najczęstsze źródło 404 po przenosinach.
- Używaj jednej struktury permalinków od początku — raz ustawiona i nie zmieniana chroni przed przypadkowymi błędami.
- Monitoruj Search Console — raport „Stan indeksowania” pokaże 404 szybciej niż jakiekolwiek inne narzędzie.
- Po każdej aktualizacji wtyczek SEO (Yoast, Rank Math) wchodź do „Bezpośrednich odnośników” i klikaj „Zapisz zmiany” — niektóre wtyczki dopisują swoje reguły do
.htaccessi warto się upewnić, że nic się nie popsuło.
Najczęściej zadawane pytania
Dlaczego strona główna działa, a wpisy dają 404?
Bo strona główna WordPressa jest serwowana przez plik index.php bezpośrednio — nie wymaga przepisywania URL. Dopiero podstrony (wpisy, kategorie, tagi, strony) używają URL typu /kategoria/tytul, który musi być przepisany przez .htaccess. Gdy reguły rewrite nie działają, widzisz ten klasyczny objaw: home działa, reszta 404.
Czy 404 po migracji szkodzi SEO?
Jeżeli 404 trwa krótko (do kilku godzin), nie zrobi znaczącej krzywdy. Googlebot odwiedza popularne strony wielokrotnie w ciągu doby, więc jeden nieudany crawl nie zmienia nic. Dłużej utrzymujący się stan (24+ godziny, masowe 404) zaczyna wpływać na indeksację — Google może tymczasowo usunąć część adresów z indeksu. Dlatego priorytet: naprawiać natychmiast po wykryciu.
Czy muszę znać Apache/Nginx, żeby naprawić permalinki?
Nie. Dla większości przypadków wystarczy wejść do panelu WordPressa i kliknąć „Zapisz zmiany” w Ustawieniach → Bezpośrednich odnośnikach. Zaawansowane metody z ręczną edycją .htaccess i konfiguracją Nginx są potrzebne tylko wtedy, gdy prowadzisz stronę na VPS-ie albo masz niestandardową konfigurację.
Co jeśli mam problem tylko z niektórymi podstronami, nie wszystkimi?
To już nie jest klasyczny problem z permalinkami — to prawdopodobnie konflikt z inną wtyczką (często wtyczki cache, WooCommerce, BuddyPress) albo błędne przekierowania. Sprawdź wtyczkę Redirection (jeśli używasz), plik .htaccess pod kątem niestandardowych reguł, oraz logi wtyczek. W takich przypadkach pomocne jest też tymczasowe wyłączenie wtyczek po kolei, aż znajdziesz winowajcę.
Podsumowanie
404 na podstronach WordPressa to najczęściej problem z permalinkami — i w 8 na 10 przypadków wystarczy jedno kliknięcie w Ustawieniach → Bezpośrednich odnośnikach, żeby wszystko wróciło do normy. Gdy to nie działa, zaglądasz do .htaccess, upewniasz się, że ma właściwą zawartość i uprawnienia, a dopiero w ostateczności ingerujesz w konfigurację serwera lub bazę danych.
Jeżeli 404 pojawił się zaraz po migracji — najpewniej brakuje Ci .htaccess w nowym katalogu WordPressa albo zapomniałeś o niewidocznym pliku podczas kopiowania. Pełna instrukcja migracji, która tego unika, znajduje się w poradniku Jak przenieść WordPress na inny serwer bez utraty danych.

