Jak zmienić domenę w WordPress. Kompletny przewodnik techniczny
Zmiana domeny WordPress krok po kroku: wp-config.php, WP-CLI search-replace, zapytania SQL, przekierowania 301, certyfikat SSL i najczęstsze pułapki.

Zmiana domeny w WordPress to operacja, która wygląda prosto na papierze, ale w praktyce potrafi położyć stronę na kilka godzin. Adres starej domeny jest zakodowany w dziesiątkach miejsc: w bazie danych, plikach konfiguracyjnych, zserializowanych tablicach PHP i ścieżkach do mediów. Poniżej znajdziesz kompletną procedurę, którą stosuję przy migracjach domen dla klientów.
Wymagania wstępne
Zanim zaczniesz, upewnij się że masz:
- Dostęp SSH do serwera (lub przynajmniej phpMyAdmin)
- WP-CLI zainstalowane na serwerze (zdecydowanie zalecane)
- Pełny backup plików i bazy danych
- Dostęp do panelu DNS nowej domeny
- Dostęp do panelu hostingowego (dodanie domeny)
Backup jest obowiązkowy. Nie backup "chyba mam gdzieś na hostingu", tylko świeży, zweryfikowany backup bazy i plików. Bez tego nie zaczynaj.
Krok 1. Podpięcie nowej domeny do serwera
Zaloguj się do panelu hostingowego i dodaj nową domenę jako alias lub addon domain wskazujący na katalog instalacji WordPress. Następnie skonfiguruj rekordy DNS:
nowa-domena.pl. A 123.45.67.89
www.nowa-domena.pl. CNAME nowa-domena.pl.
Propagacja DNS trwa od kilku minut do 24 godzin. Sprawdź postęp:
dig nowa-domena.pl +short
# Powinno zwrócić IP Twojego serwera
Dopóki DNS się nie propaguje, możesz przetestować nową domenę dodając wpis do /etc/hosts na swoim komputerze:
123.45.67.89 nowa-domena.pl
Krok 2. Wymuszenie nowej domeny w wp-config.php
Otwórz wp-config.php i dodaj dwie stałe przed linią require_once ABSPATH . 'wp-settings.php';:
define('WP_HOME', 'https://nowa-domena.pl');
define('WP_SITEURL', 'https://nowa-domena.pl');
Te stałe nadpisują wartości siteurl i home z tabeli wp_options. Po zapisaniu pliku WordPress zacznie odpowiadać pod nową domeną.
Ważne: Użyj https://, nie http://. Jeśli SSL nie jest jeszcze skonfigurowany, użyj tymczasowo http:// i zmień na https:// po kroku 4.
Krok 3. Zamiana domeny w bazie danych
To kluczowy krok. Stara domena siedzi w:
wp_options:siteurl,homei dziesiątki opcji wtyczekwp_posts:guid,post_content(linki w treści, obrazki)wp_postmeta: metadane, dane page builderów (Elementor, WPBakery)wp_comments: URL-e autorów komentarzy- Tablice specyficzne dla wtyczek (WooCommerce, Yoast, itp.)
Metoda zalecana: WP-CLI
# Dry run, podgląd zmian bez ich wykonania
wp search-replace 'https://stara-domena.pl' 'https://nowa-domena.pl' --dry-run --all-tables
# Wykonanie zamiany
wp search-replace 'https://stara-domena.pl' 'https://nowa-domena.pl' --all-tables
# Zamień też wersję z http i www
wp search-replace 'http://stara-domena.pl' 'https://nowa-domena.pl' --all-tables
wp search-replace 'http://www.stara-domena.pl' 'https://nowa-domena.pl' --all-tables
wp search-replace 'https://www.stara-domena.pl' 'https://nowa-domena.pl' --all-tables
Flaga --all-tables jest istotna. Bez niej WP-CLI pominie tabele spoza standardowego prefiksu wp_, w tym tabele WooCommerce czy innych wtyczek.
Dlaczego WP-CLI, a nie SQL? WP-CLI poprawnie obsługuje zserializowane dane PHP. WordPress przechowuje wiele opcji jako zserializowane tablice, np.:
a:2:{s:4:"name";s:22:"https://stara-domena.pl";s:3:"url";s:22:"https://stara-domena.pl";}
Zwróć uwagę na s:22:, czyli długość stringa. Jeśli zmienisz domenę zwykłym SQL REPLACE, długość stringa się zmieni, ale s:22: pozostanie stare. WordPress nie odczyta takich danych. Widgety, opcje motywu i ustawienia wtyczek się zepsują.
Metoda awaryjna: SQL (tylko proste instalacje)
Jeśli nie masz WP-CLI i strona nie używa page builderów ani skomplikowanych wtyczek:
UPDATE wp_options
SET option_value = REPLACE(option_value, 'stara-domena.pl', 'nowa-domena.pl')
WHERE option_name IN ('siteurl', 'home');
UPDATE wp_posts
SET guid = REPLACE(guid, 'stara-domena.pl', 'nowa-domena.pl');
UPDATE wp_posts
SET post_content = REPLACE(post_content, 'stara-domena.pl', 'nowa-domena.pl');
UPDATE wp_postmeta
SET meta_value = REPLACE(meta_value, 'stara-domena.pl', 'nowa-domena.pl');
UPDATE wp_comments
SET comment_author_url = REPLACE(comment_author_url, 'stara-domena.pl', 'nowa-domena.pl');
Uwaga: Te zapytania złamią zserializowane dane. Dla prostych blogów może to nie być problem, ale dla sklepów WooCommerce lub stron z Elementorem lepiej użyć WP-CLI.
Krok 4. Certyfikat SSL
Stary certyfikat był wystawiony na starą domenę. Wygeneruj nowy:
# Let's Encrypt z Certbot (nginx)
certbot --nginx -d nowa-domena.pl -d www.nowa-domena.pl
# Let's Encrypt z Certbot (apache)
certbot --apache -d nowa-domena.pl -d www.nowa-domena.pl
W panelach hostingowych (cPanel, DirectAdmin) certyfikat Let's Encrypt generujesz jednym kliknięciem w sekcji SSL.
Po wygenerowaniu certyfikatu zmień w wp-config.php adres na https:// (jeśli wcześniej użyłeś http://).
Krok 5. Przekierowanie 301 ze starej domeny
Utrzymaj starą domenę z przekierowaniem 301 przez minimum 6-12 miesięcy. To mówi Google: "strona przeniosła się na stałe" i przekazuje wartość SEO na nową domenę.
Apache (.htaccess)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?stara-domena\.pl$ [NC]
RewriteRule ^(.*)$ https://nowa-domena.pl/$1 [R=301,L]
Nginx
server {
listen 80;
listen 443 ssl;
server_name stara-domena.pl www.stara-domena.pl;
return 301 https://nowa-domena.pl$request_uri;
}
Nie usuwaj starej domeny. Linki zewnętrzne, zakładki użytkowników, wpisy w Google, to wszystko wskazuje na starą domenę. Przekierowanie zapewnia, że te linki nadal działają.
Krok 6. Czyszczenie i weryfikacja
# Wyczyść cache WordPressa
wp cache flush
# Wyczyść transient
wp transient delete --all
# Wyczyść rewrite rules
wp rewrite flush
Checklist po migracji:
- Strona główna ładuje się pod nową domeną
- Panel admina (
/wp-admin) działa - Obrazki w treści się wyświetlają
- Linki wewnętrzne prowadzą do nowej domeny
- Formularz kontaktowy wysyła maile
- WooCommerce: koszyk, checkout, płatności (jeśli dotyczy)
- Przekierowanie 301 ze starej domeny działa (
curl -I stara-domena.pl) - SSL działa, zielona kłódka, brak mixed content
- Google Search Console: dodaj nową domenę, zgłoś zmianę adresu
- Google Analytics: zaktualizuj adres witryny
Najczęstsze problemy
Biały ekran (White Screen of Death)
Najczęściej literówka w wp-config.php. Sprawdź logi:
tail -f /var/log/php-error.log
# lub
wp --debug
Pętla przekierowań (ERR_TOO_MANY_REDIRECTS)
Konflikt między wymuszeniem HTTPS w .htaccess, wtyczką SSL (Really Simple SSL) i stałymi w wp-config.php. Rozwiązanie: wyłącz wtyczkę SSL, usuń reguły HTTPS z .htaccess, zostaw tylko stałe w wp-config.php.
Obrazki nie ładują się
Stara domena wciąż jest w atrybutach src obrazków w wp_posts.post_content. Uruchom wp search-replace jeszcze raz z pełnymi URL-ami (ze schematem).
Mixed content (kłódka z ostrzeżeniem)
Część zasobów (CSS, JS, obrazki) ładuje się po http:// zamiast https://. Uruchom:
wp search-replace 'http://nowa-domena.pl' 'https://nowa-domena.pl' --all-tables
Zepsute widgety i opcje motywu
Użyłeś SQL REPLACE zamiast WP-CLI. Zserializowane dane mają złe długości stringów. Jedyne rozwiązanie: przywróć backup i powtórz procedurę z WP-CLI.
Potrzebujesz pomocy?
Mogę zająć się tym za Ciebie — bezpiecznie, z backupem i bez przestojów.
Napisz do mnie