Migracja WordPress bezpiecznie krok po kroku
PL

Migracja WordPress bezpiecznie krok po kroku

Ostatnio zweryfikowano: 17 sierpnia 2026
24 min czytania
Poradnik
Full-stack developer
500+ projektów WP

Przenoszenie witryny WordPress może być zniechęcającym zadaniem, ale z odpowiednią wiedzą i przygotowaniem staje się procesem do zarządzania. Niezależnie od tego, czy zmieniasz domenę, ulepszasz hosting, czy restrukturyzujesz architekturę witryny, ten kompleksowy przewodnik przeprowadzi Cię przez każdy krok procesu migracji WordPress.

#Zrozumienie Adresów URL Witryny WordPress

Zanim zagłębimy się w techniki migracji, kluczowe jest zrozumienie dwóch fundamentalnych ustawień URL w WordPress:

  • Adres WordPress (URL): Tutaj znajdują się Twoje podstawowe pliki WordPress
  • Adres Witryny (URL): To adres, który odwiedzający wpisują w przeglądarce, aby dotrzeć do Twojej witryny

Oba ustawienia powinny zawierać część https:// i nie powinny mieć ukośnika / na końcu. Te ustawienia kontrolują, jak WordPress wyświetla adresy URL w całej Twojej witrynie, w tym w sekcji administracyjnej i frontendzie.

#Dlaczego Migracja WordPress Staje Się Konieczna

Kilka scenariuszy może wymagać migracji Twojej witryny WordPress:

  1. Zmiany Domeny: Rebranding lub przejście na lepszą nazwę domeny
  2. Migracja Hostingu: Przejście na lepszego dostawcę hostingu
  3. Zmiany Serwera: Uaktualnienie infrastruktury serwera
  4. Restrukturyzacja Witryny: Przeniesienie WordPress do podkatalogu lub katalogu głównego
  5. Rozwój do Produkcji: Przeniesienie ze środowiska staging do produkcji
  6. HTTP do HTTPS: Wdrożenie certyfikatów SSL

#Przygotowanie: Klucz do Udanej Migracji

#Stwórz Kopie Zapasowe Wszystkiego

Zanim spróbujesz jakiejkolwiek migracji, stwórz kompleksowe kopie zapasowe:

  1. Kopia Zapasowa Bazy Danych: Eksportuj bazę danych WordPress przez phpMyAdmin lub WP-CLI
  2. Kopia Zapasowa Plików: Pobierz wszystkie pliki i katalogi WordPress
  3. Kopia Zapasowa Konfiguracji: Zapisz plik wp-config.php osobno
  4. Ustawienia Pluginów/Motywów: Dokumentuj niestandardowe konfiguracje

#Konfiguracja Środowiska Testowego

Zawsze testuj migracje w środowisku staging przed przejściem na produkcję:

## Utwórz podkatalog testowy
mkdir /var/www/html/test-site
## Skopiuj pliki do lokalizacji testowej
cp -r /var/www/html/wordpress/* /var/www/html/test-site/

#Metody Migracji: Od Prostej do Zaawansowanej

#Metoda 1: Użycie wp-config.php (Szybkie Rozwiązanie)

Dla tymczasowych zmian URL, dodaj te linie do swojego wp-config.php:

define('WP_HOME', 'https://example.com');
define('WP_SITEURL', 'https://example.com');

Zalety: Szybkie i natychmiastowe Wady: Wartości hardkodowane, nie można już edytować w admin WordPress

#Metoda 2: Podejście functions.php (Tymczasowe Rozwiązanie)

Jeśli masz dostęp FTP, ale nie możesz uzyskać dostępu do admin WordPress:

  1. Uzyskaj dostęp do pliku functions.php aktywnego motywu
  2. Dodaj te linie po otwierającym tagu <?php:
update_option('siteurl', 'https://example.com');
update_option('home', 'https://example.com');
  1. Prześlij plik i odwiedź swój panel administracyjny
  2. Ważne: Usuń te linie po tym, jak witryna zacznie działać

#Metoda 3: Metoda Relokacji WordPress

WordPress zawiera automatyczną metodę relokacji:

  1. Edytuj wp-config.php i dodaj przed “That’s all, stop editing!”:
define('RELOCATE', true);
  1. Odwiedź https://yoursite.com/wp-login.php
  2. Zaloguj się normalnie
  3. Sprawdź Ustawienia > Ogólne, aby zweryfikować adresy URL
  4. Usuń stałą RELOCATE po tym

Ostrzeżenie Bezpieczeństwa: Nigdy nie zostawiaj stałej RELOCATE w wp-config.php, ponieważ tworzy luki w zabezpieczeniach.

#Metoda 4: Bezpośrednia Edycja Bazy Danych

Dla precyzyjnej kontroli, edytuj adresy URL bezpośrednio w bazie danych:

  1. Uzyskaj dostęp do phpMyAdmin
  2. Wybierz bazę danych WordPress
  3. Znajdź tabelę wp_options (prefiks może się różnić)
  4. Edytuj wiersze ‘siteurl’ i ‘home’
  5. Zaktualizuj option_value do nowych adresów URL

Krytyczne: Zawsze twórz kopię zapasową bazy danych przed bezpośrednimi edycjami!

#Zaawansowane Scenariusze Migracji

#Przenoszenie Między Serwerami

Podczas migracji na nowy serwer:

  1. Stwórz Kopię Zapasową Wszystkiego: Kompletna kopia zapasowa witryny i bazy danych
  2. Eksportuj Bazę Danych: Użyj phpMyAdmin lub WP-CLI
  3. Przenieś Pliki: Użyj FTP, SFTP lub rsync
  4. Importuj Bazę Danych: Utwórz nową bazę danych i importuj
  5. Zaktualizuj wp-config.php: Zmień dane logowania do bazy danych
  6. Zaktualizuj Adresy URL: Użyj jednej z powyższych metod
  7. Przetestuj Dokładnie: Sprawdź wszystkie funkcjonalności

#Zmiany Nazwy Domeny

Zmiana domeny wymaga szczególnej uwagi na serializowane dane:

## Użycie WP-CLI (zalecane)
wp search-replace 'staradomena.com' 'nowadomena.com' --skip-columns=guid

## Lub użyj wyspecjalizowanych pluginów jak:
## - Velvet Blues Update URLs
## - Better Search Replace

Ważne: Nigdy nie aktualizuj kolumny GUID w tabeli wp_posts. GUID oznacza Global Unique Identifier i nigdy nie powinien być zmieniany, aby utrzymać kompatybilność z czytnikami kanałów.

#Migracja z Podkatalogu do Głównego

Przenoszenie WordPress z podkatalogu do głównego:

  1. Zaktualizuj Adresy URL w Admin WordPress: Ustawienia > Ogólne
  2. Skopiuj Pliki: Przenieś pliki WordPress do nowej lokalizacji
  3. Zaktualizuj .htaccess: Zmień reguły rewrite
  4. Zaktualizuj Permalinki: Zapisz ponownie strukturę permanentnych linków
  5. Sprawdź Wewnętrzne Linki: Zaktualizuj hardkodowane adresy URL

#Migracja Multisite

WordPress Multisite wymaga dodatkowych uwag:

  1. Kopia Zapasowa Sieci: Wszystkie witryny i bazy danych
  2. Edytuj wp-config.php: Zaktualizuj stałe multisite
  3. Zaktualizuj .htaccess: Zmień reguły rewrite multisite
  4. Aktualizacje Bazy Danych: Zaktualizuj tabele wp_blogs i wp_site
  5. Opcje Indywidualnych Witryn: Zaktualizuj tabele opcji każdej witryny

#Lista Kontrolna Po Migracji

#Natychmiastowe Działania

  • Przetestuj funkcjonalność frontend
  • Zweryfikuj dostęp admin
  • Sprawdź wszystkie formularze i zgłoszenia
  • Przetestuj funkcjonalność e-commerce
  • Zweryfikuj logowanie/rejestrację użytkowników

#Kwestie SEO

  • Wdroż przekierowania 301 ze starych adresów URL
  • Zaktualizuj sitemap.xml
  • Wyślij nową mapę witryny do wyszukiwarek
  • Zaktualizuj właściwość Google Analytics
  • Zweryfikuj Google Search Console

#Optymalizacja Wydajności

  • Wyczyść wszystkie pamięci podręczne
  • Optymalizuj tabele bazy danych
  • Sprawdź kompatybilność pluginów
  • Przetestuj prędkość witryny
  • Zweryfikuj certyfikat SSL

#Wspólne Problemy Migracji i Rozwiązania

#Biały Ekran Śmierci

Zwykle spowodowany przez:

  • Wyczerpanie limitu pamięci
  • Konflikty pluginów
  • Niekompatybilność motywu

Rozwiązanie: Zwiększ limit pamięci w wp-config.php:

define('WP_MEMORY_LIMIT', '256M');

#Błędy Połączenia z Bazą Danych

Sprawdź ustawienia wp-config.php:

define('DB_NAME', 'database_name');
define('DB_USER', 'username');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'localhost');

#Problemy z Mieszaną Zawartością

Zasoby HTTP na stronach HTTPS powodują ostrzeżenia bezpieczeństwa:

## Znajdź mieszaną zawartość
grep -r "http://" wp-content/

#Problemy z Linkami Obrazów i Mediów

Zaktualizuj adresy URL mediów w bazie danych:

UPDATE wp_posts SET post_content = REPLACE(post_content,'staradomena.com/wp-content/uploads','nowadomena.com/wp-content/uploads');

#Narzędzia i Pluginy do Migracji

#Polecane Pluginy Migracyjne

  1. All-in-One WP Migration: Kompletne narzędzie migracji witryny
  2. Duplicator: Łatwo twórz pakiety migracyjne
  3. WP Migrate DB: Specjalista migracji baz danych
  4. Velvet Blues Update URLs: Narzędzie aktualizacji adresów URL

#Narzędzia Linii Poleceń

## Eksport bazy danych WP-CLI
wp db export backup.sql

## Import bazy danych WP-CLI
wp db import backup.sql

## Szukaj i zamień
wp search-replace 'stary-url' 'nowy-url' --dry-run

#Kwestie Bezpieczeństwa Podczas Migracji

  1. Używaj HTTPS: Upewnij się, że SSL jest skonfigurowany na nowym serwerze
  2. Zaktualizuj Uprawnienia Plików: Zabezpiecz wp-config.php (600) i katalogi (755)
  3. Usuń Skrypty Migracyjne: Usuń pliki tymczasowe i stałe
  4. Zaktualizuj Klucze Bezpieczeństwa: Wygeneruj nowe klucze WordPress w wp-config.php
  5. Monitoruj Logi: Obserwuj nietypową aktywność po migracji

#Optymalizacja Wydajności Po Migracji

#Optymalizacja Bazy Danych

OPTIMIZE TABLE wp_posts;
OPTIMIZE TABLE wp_postmeta;
OPTIMIZE TABLE wp_options;

#Konfiguracja Pamięci Podręcznej

  • Skonfiguruj pamięć podręczną stron
  • Skonfiguruj pamięć podręczną przeglądarki
  • Włącz integrację CDN
  • Optymalizuj pamięć podręczną bazy danych

#Testy i Walidacja

#Testy Funkcjonalności

  1. Nawigacja: Wszystkie elementy menu działają poprawnie
  2. Formularze: Formularze kontaktowe i zgłoszenia działają
  3. Wyszukiwanie: Wyszukiwanie witryny zwraca wyniki
  4. Komentarze: System komentarzy działa
  5. Media: Obrazy i filmy ładują się poprawnie

#Walidacja SEO

  1. Meta Tagi: Tytuły i opisy wyświetlają się poprawnie
  2. Kanoniczne Adresy URL: Wskazują na nową domenę
  3. Dane Strukturalne: Markowanie schema jest poprawne
  4. Wewnętrzne Linki: Wszystkie linki działają i przekierowują poprawnie

#Konserwacja Po Migracji

#Monitorowanie

  • Skonfiguruj monitorowanie uptime
  • Monitoruj Google Search Console pod kątem błędów
  • Śledź wzorce ruchu w analytics
  • Monitoruj błędy 404 w logach

#Ciągła Optymalizacja

  • Regularna optymalizacja bazy danych
  • Optymalizacja i kompresja obrazów
  • Monitorowanie wydajności pluginów
  • Wdrożenie skanów bezpieczeństwa

#Studia Przypadków Migracji ze Świata Rzeczywistego

#Studium Przypadku 1: Migracja Domeny E-commerce

Scenariusz: Popularny sklep internetowy z 50 000+ produktów musiał przenieść się z sklep-stary.com na nowabrand.com, utrzymując jednocześnie rankingi SEO i zaufanie klientów.

Wyzwania Napotkane:

  • Ogromna baza danych produktów z złożonymi wariacjami
  • Aktywne sesje koszyka podczas migracji
  • Integracje bramek płatności stron trzecich
  • Kampanie emailowe klientów z linkami starej domeny

Strategia Migracji:

  1. Przygotowanie przed migracją (2 tygodnie):

    • Stworzono pełną kopię zapasową witryny, w tym dane klientów
    • Skonfigurowano tymczasowe środowisko staging
    • Przetestowano wszystkie integracje bramek płatności
    • Przygotowano szablony email do powiadomień klientów
  2. Implementacja techniczna (4 godziny):

    • Użyto WP-CLI do zastąpienia URL w bazie danych
    • Zaimplementowano niestandardowe reguły przekierowania 301
    • Zaktualizowano wszystkie endpointy API stron trzecich
    • Skonfigurowano certyfikat SSL dla nowej domeny
  3. Optymalizacja po migracji (1 tydzień):

    • Monitorowano Google Search Console pod kątem problemów z indeksowaniem
    • Zaktualizowano wszystkie przepływy pracy w automatyzacji marketingowej
    • Wdrożono ulepszone śledzenie wpływu migracji
    • Przeprowadzono ankietę satysfakcji klientów

Wyniki:

  • Niemal wszystkie rankingi SEO utrzymane w ciągu 2 tygodni
  • Zero utraty danych podczas migracji
  • Skargi klientów wyraźnie zmniejszone dzięki odpowiedniej komunikacji
  • Wzrost prędkości witryny dzięki nowej infrastrukturze hostingu

Kluczowe Lekcje:

  • Komunikacja z klientami jest równie ważna jak wykonanie techniczne
  • Testowanie bramek płatności w środowisku staging zapobiega utracie przychodów
  • Posiadanie planu rollback daje pewność siebie podczas wykonania

#Studium Przypadku 2: Migracja Sieci Multisite

Scenariusz: Instytucja edukacyjna z 200+ witryn subdomen musiała przenieść się z hostingu współdzielonego do dedykowanej infrastruktury chmurowej.

Złożoność Techniczna:

  • 201 indywidualnych witryn WordPress
  • Niestandardowe role użytkowników i uprawnienia między witrynami
  • Współdzielona biblioteka mediów z 100GB+ zawartości
  • Złożone zależności pluginów między witrynami

Podejście do Migracji:

  1. Faza Analizy Sieci:

    • Zmapowano wszystkie współzależności witryn
    • Zidentyfikowano niestandardowe konfiguracje pluginów
    • Udokumentowano hierarchie ról użytkowników
    • Przeanalizowano wzorce wykorzystania biblioteki mediów
  2. Konfiguracja Środowiska Staging:

    • Zreplikowano dokładną konfigurację serwera
    • Stworzono zautomatyzowane skrypty testowe
    • Wdrożono monitorowanie wydajności
    • Skonfigurowano procedury rollback
  3. Migracja Fazowa:

    • Najpierw przeniesiono 10 witryn pilotażowych
    • Udokumentowano i udoskonalono proces
    • Przeniesiono pozostałe witryny partiami
    • Ciągłe monitorowanie i optymalizacja

Rozwiązania Techniczne:

## Niestandardowy skrypt do migracji wsadowej multisite
#!/bin/bash
for site in $(wp site list --field=url); do
    echo "Migruję $site"
    wp search-replace 'stara-domena.com' 'nowa-domena.com' --url=$site
    wp cache flush --url=$site
done

Wyniki:

  • 99.8% uptime podczas procesu migracji
  • 40% poprawy czasu ładowania stron
  • Zero uszkodzeń danych we wszystkich witrynach
  • Uproszczona administracja dzięki centralnemu zarządzaniu

#Studium Przypadku 3: Migracja HTTP do HTTPS z Rozwiązaniem Mixed Content

Scenariusz: Blog bogaty w treści z 10 000+ postami i obszerną biblioteką mediów wymagał wdrożenia HTTPS.

Wyzwania Mixed Content:

  • Hardkodowane linki HTTP w treści postów
  • Zasoby zewnętrzne bez alternatyw HTTPS
  • Osadzone iframes z niebezpiecznych źródeł
  • Niestandardowy CSS z odniesieniami HTTP

Kompleksowe Rozwiązanie:

  1. Audyt i Czyszczenie Treści:
-- Znajdź i zastąp odniesienia HTTP w postach
UPDATE wp_posts 
SET post_content = REPLACE(post_content, 'http://przykład.com', 'https://przykład.com')
WHERE post_content LIKE '%http://przykład.com%';

-- Zaktualizuj pola guid (ostrożnie!)
UPDATE wp_posts 
SET guid = REPLACE(guid, 'http://przykład.com', 'https://przykład.com')
WHERE guid LIKE 'http://przykład.com%';
  1. Aktualizacje Konfiguracji Pluginów:
// Niestandardowe dodatki do functions.php do wymuszania HTTPS
add_action('template_redirect', function() {
    if (!is_ssl() && !is_admin()) {
        wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301);
        exit;
    }
});
  1. Zaawansowana Konfiguracja .htaccess:
## Wymuś HTTPS dla całego ruchu
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

## Obsłuż mixed content w WordPress
RewriteCond %{HTTP_REFERER} !^https://
RewriteRule ^(.*)$ - [F]

Wpływ na Wydajność:

  • Początkowy 5% spadek ruchu w pierwszym tygodniu
  • Pełne odzyskanie w ciągu 3 tygodni
  • 10% poprawy rankingów wyszukiwania
  • Poprawa metryk zaufania i bezpieczeństwa użytkowników

#Zaawansowane Techniki Migracji

#Strategie Optymalizacji Migracji Bazy Danych

#Efektywne Zarządzanie Dużymi Bazami Danych

Dla baz danych przekraczających 1GB, standardowe metody eksportu/importu często zawodzą. Oto zaawansowane techniki:

Metoda 1: Eksport Fragmentowany z WP-CLI

## Eksportuj fragmentami dla dużych baz danych
wp db export --tables=wp_posts,wp_postmeta --add-drop-table
wp db export --tables=wp_options,wp_users,wp_usermeta --add-drop-table

## Połącz i importuj oddzielnie
mysql nowa_baza_danych < fragment1.sql
mysql nowa_baza_danych < fragment2.sql

Metoda 2: Niestandardowy Skrypt PHP do Zarządzania Pamięcią

<?php
// Niestandardowy skrypt migracji bazy danych
set_time_limit(0);
ini_set('memory_limit', '1024M');

$source = new mysqli('localhost', 'user', 'pass', 'source_db');
$target = new mysqli('localhost', 'user', 'pass', 'target_db');

// Migruj partiami po 1000 rekordów
$offset = 0;
$batch_size = 1000;

do {
    $result = $source->query("SELECT * FROM wp_posts LIMIT $offset, $batch_size");
    $count = $result->num_rows;
    
    while ($row = $result->fetch_assoc()) {
        $columns = implode(',', array_keys($row));
        $values = implode(',', array_map([$target, 'real_escape_string'], $row));
        $target->query("INSERT INTO wp_posts ($columns) VALUES ($values)");
    }
    
    $offset += $batch_size;
} while ($count == $batch_size);
?>

#Obsługa Danych Serializowanych

WordPress przechowuje wiele ustawień jako serializowane dane PHP, które psują się, gdy zmieniają się długości URL:

Zaawansowane Rozwiązanie Serializacji:

<?php
// Napraw dane serializowane po zmianach URL
function fix_serialized_urls($old_url, $new_url) {
    global $wpdb;
    
    $options = $wpdb->get_results("SELECT option_id, option_value FROM $wpdb->options WHERE option_value LIKE '%$old_url%'");
    
    foreach ($options as $option) {
        $fixed_value = str_replace($old_url, $new_url, $option->option_value);
        
        // Sprawdź, czy to są dane serializowane
        if (is_serialized($fixed_value)) {
            $unserialized = unserialize($fixed_value);
            if ($unserialized !== false) {
                $fixed_value = serialize($unserialized);
            }
        }
        
        $wpdb->update(
            $wpdb->options,
            ['option_value' => $fixed_value],
            ['option_id' => $option->option_id]
        );
    }
}
?>

#Rozwój Niestandardowych Skryptów Migracji

#Framework Automatyzacji Migracji

Stwórz kompleksowy skrypt automatyzacji migracji:

#!/bin/bash
## Skrypt Automatyzacji Migracji WordPress

set -e  # Wyjdź przy każdym błędzie

## Konfiguracja
OLD_DOMAIN="stara-witryna.com"
NEW_DOMAIN="nowa-witryna.com"
BACKUP_DIR="/ścieżka/do/kopii"
STAGING_DIR="/ścieżka/do/staging"
LOG_FILE="$BACKUP_DIR/migracja_$(date +%Y%m%d_%H%M%S).log"

## Funkcja logowania
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

## Sprawdzenia przed migracją
pre_migration_checks() {
    log "Rozpocznij sprawdzenia przed migracją"
    
    # Sprawdź instalację WordPress
    if ! wp core is-installed --path=/var/www/html; then
        log "ERROR: Instalacja WordPress nie znaleziona"
        exit 1
    fi
    
    # Sprawdź połączenie z bazą danych
    if ! wp db check --path=/var/www/html; then
        log "ERROR: Połączenie z bazą danych nieudane"
        exit 1
    fi
    
    # Utwórz katalog kopii zapasowej
    mkdir -p "$BACKUP_DIR"
    mkdir -p "$STAGING_DIR"
    
    log "Sprawdzenia przed migracją zakończone"
}

## Tworzenie kopii zapasowych
create_backups() {
    log "Tworzenie kompleksowych kopii zapasowych"
    
    # Kopia zapasowa bazy danych
    wp db export "$BACKUP_DIR/database_$(date +%Y%m%d_%H%M%S).sql" --path=/var/www/html
    
    # Kopia zapasowa plików
    tar -czf "$BACKUP_DIR/files_$(date +%Y%m%d_%H%M%S).tar.gz" /var/www/html
    
    # Kopia zapasowa konfiguracji
    cp /var/www/html/wp-config.php "$BACKUP_DIR/wp-config_$(date +%Y%m%d_%H%M%S).php"
    
    log "Kopie zapasowe utworzone pomyślnie"
}

## Zastąpienie URL
replace_urls() {
    log "Rozpocznij proces zastępowania URL"
    
    # Główne URL WordPress
    wp search-replace "$OLD_DOMAIN" "$NEW_DOMAIN" --skip-columns=guid --path=/var/www/html
    
    # Dodatkowe zastąpienia URL w konkretnych tabelach
    wp db query "UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, '$OLD_DOMAIN', '$NEW_DOMAIN') WHERE meta_value LIKE '%$OLD_DOMAIN%'" --path=/var/www/html
    
    log "Zastąpienie URL zakończone"
}

## Walidacja po migracji
post_migration_validation() {
    log "Rozpocznij walidację po migracji"
    
    # Przetestuj dostępność witryny
    if curl -f -s "https://$NEW_DOMAIN" > /dev/null; then
        log "Witryna jest dostępna"
    else
        log "ERROR: Witryna nie jest dostępna"
        exit 1
    fi
    
    # Przetestuj admin WordPress
    if curl -f -s "https://$NEW_DOMAIN/wp-admin/" > /dev/null; then
        log "Admin WordPress jest dostępny"
    else
        log "ERROR: Admin WordPress nie jest dostępny"
        exit 1
    fi
    
    # Sprawdź integralność bazy danych
    wp db check --path=/var/www/html
    
    log "Walidacja po migracji zakończona"
}

## Główne wykonanie
main() {
    log "Rozpocznij proces migracji WordPress"
    
    pre_migration_checks
    create_backups
    replace_urls
    post_migration_validation
    
    log "Migracja zakończona pomyślnie"
}

## Wykonaj główną funkcję
main

#Strategie Optymalizacji Wydajności

#Optymalizacja Konfiguracji Serwera

#Konfiguracja Nginx dla Migrowanych Witryn

server {
    listen 80;
    server_name nowa-witryna.com www.nowa-witryna.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name nowa-witryna.com www.nowa-witryna.com;
    
    root /var/www/html;
    index index.php index.html;
    
    # Konfiguracja SSL
    ssl_certificate /ścieżka/do/ssl/cert.pem;
    ssl_certificate_key /ścieżka/do/ssl/private.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
    
    # Konfiguracja specyficzna dla WordPress
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        
        # Optymalizację wydajności
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
    }
    
    # Konfiguracja cache
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
    
    # Nagłówki bezpieczeństwa
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;
    add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
}

#Optymalizacja PHP dla Wydajności Migracji

; Konfiguracja PHP zoptymalizowana dla migracji WordPress
memory_limit = 512M
max_execution_time = 300
max_input_time = 300
upload_max_filesize = 64M
post_max_size = 64M
max_input_vars = 3000

; Konfiguracja OPcache dla lepszej wydajności
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=2
opcache.fast_shutdown=1

#Optymalizacja Wydajności Bazy Danych

#Optymalizacja Konfiguracji MySQL

-- Optymalizacja MySQL dla WordPress
SET GLOBAL innodb_buffer_pool_size = 1073741824; -- 1GB
SET GLOBAL innodb_log_file_size = 268435456; -- 256MB
SET GLOBAL innodb_flush_log_at_trx_commit = 2;
SET GLOBAL innodb_flush_method = O_DIRECT;

-- Konfiguracja cache zapytań
SET GLOBAL query_cache_type = ON;
SET GLOBAL query_cache_size = 67108864; -- 64MB

#Strategia Indeksowania Bazy Danych

-- Dodaj indeksy dla lepszej wydajności
ALTER TABLE wp_posts ADD INDEX idx_post_type_status (post_type, post_status);
ALTER TABLE wp_postmeta ADD INDEX idx_meta_key_value (meta_key, meta_value(191));
ALTER TABLE wp_options ADD INDEX idx_autoload (autoload, option_name);

-- Optymalizuj duże tabele
OPTIMIZE TABLE wp_posts;
OPTIMIZE TABLE wp_postmeta;
OPTIMIZE TABLE wp_options;

#Zaawansowany Przewodnik Rozwiązywania Problemów

#Złożone Problemy Migracji i Rozwiązania

#Problem 1: Uszkodzone Dane Serializowane

Problem: Po zastąpieniu URL, opcje motywu i ustawienia pluginów stają się uszkodzone.

Diagnoza:

<?php
// Sprawdź uszkodzone dane serializowane
function check_serialized_data() {
    global $wpdb;
    
    $corrupted = $wpdb->get_results("
        SELECT option_id, option_name 
        FROM {$wpdb->options} 
        WHERE option_value LIKE '%:%' 
        AND (option_value NOT LIKE 'a:%' OR option_value NOT LIKE '%;\"%\";%')
    ");
    
    foreach ($corrupted as $option) {
        echo "Uszkodzona opcja: {$option->option_name}\n";
    }
}
?>

Rozwiązanie:

<?php
// Zaawansowana naprawa danych serializowanych
function repair_serialized_data($old_length, $new_length) {
    global $wpdb;
    
    // Pobierz wszystkie opcje serializowane
    $serialized_options = $wpdb->get_results("
        SELECT option_id, option_value 
        FROM {$wpdb->options} 
        WHERE option_value REGEXP '^[aO]:[0-9]+:'
    ");
    
    foreach ($serialized_options as $option) {
        $data = $option->option_value;
        
        // Zaktualizuj odniesienia długości w danych serializowanych
        $pattern = '/s:([0-9]+):\"(.*?)\";/s';
        $callback = function($matches) use ($old_length, $new_length) {
            $length = strlen($matches[2]);
            return 's:' . $length . ':"' . $matches[2] . '";';
        };
        
        $repaired = preg_replace_callback($pattern, $callback, $data);
        
        if ($repaired !== $data) {
            $wpdb->update(
                $wpdb->options,
                ['option_value' => $repaired],
                ['option_id' => $option->option_id]
            );
        }
    }
}
?>

#Problem 2: Wyczerpanie Pamięci Podczas Migracji Dużej Bazy Danych

Problem: Limity pamięci PHP przekroczone podczas importu/eksportu bazy danych.

Rozwiązania:

Metoda 1: Przetwarzanie Fragmentami

<?php
// Przetwarzaj bazę danych fragmentami, aby uniknąć problemów z pamięcią
function process_database_in_chunks($table, $chunk_size = 1000) {
    global $wpdb;
    
    $offset = 0;
    do {
        $results = $wpdb->get_results("
            SELECT * FROM $table 
            LIMIT $offset, $chunk_size
        ");
        
        foreach ($results as $row) {
            // Przetwarzaj każdy wiersz
            process_row($row);
        }
        
        $offset += $chunk_size;
        
        // Zwolnij pamięć
        $wpdb->flush();
        
    } while (count($results) === $chunk_size);
}
?>

Metoda 2: Eksport Bazy Danych w Strumieniu

## Użyj mysqldump z kompresją dla dużych baz danych
mysqldump --single-transaction --quick --lock-tables=false \
  --host=localhost --user=username --password=password \
  nazwa_bazy_danych | gzip > backup.sql.gz

## Import ze strumieniowaniem
gunzip < backup.sql.gz | mysql -u username -p nazwa_bazy_danych

#Problem 3: Kompatybilność Pluginów Po Migracji

Problem: Pluginy nie działają po zmianach URL z powodu hardkodowanych odniesień.

Systematyczne Rozwiązanie:

  1. Stwórz Sprawdzacz Kompatybilności Pluginów:
<?php
// Sprawdzacz kompatybilności pluginów
function check_plugin_compatibility() {
    $plugins = get_option('active_plugins');
    $issues = [];
    
    foreach ($plugins as $plugin_path) {
        $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_path);
        
        // Sprawdź hardkodowane URL w plikach pluginów
        $plugin_files = glob(WP_PLUGIN_DIR . '/' . dirname($plugin_path) . '/*.php');
        
        foreach ($plugin_files as $file) {
            $content = file_get_contents($file);
            
            // Szukaj potencjalnych hardkodowanych URL
            if (preg_match('/https?:\/\/[^\s"\'<]+/', $content, $matches)) {
                $issues[] = [
                    'plugin' => $plugin_data['Name'],
                    'file' => $file,
                    'hardcoded_urls' => $matches
                ];
            }
        }
    }
    
    return $issues;
}
?>
  1. Automatyczny Aktualizator URL Pluginów:
<?php
// Zaktualizuj konfiguracje pluginów z nowymi URL
function update_plugin_configurations($old_url, $new_url) {
    global $wpdb;
    
    // Zaktualizuj opcje pluginów
    $plugin_options = $wpdb->get_results("
        SELECT option_name, option_value 
        FROM {$wpdb->options} 
        WHERE option_name LIKE 'plugin_%' 
        OR option_name LIKE '%_options'
    ");
    
    foreach ($plugin_options as $option) {
        if (strpos($option->option_value, $old_url) !== false) {
            $updated_value = str_replace($old_url, $new_url, $option->option_value);
            
            $wpdb->update(
                $wpdb->options,
                ['option_value' => $updated_value],
                ['option_name' => $option->option_name]
            );
        }
    }
}
?>

#Automatyzacja Migracji i Integracja CI/CD

#Ciągła Integracja dla Migracji WordPress

#Workflow GitHub Actions do Automatycznych Testów

name: Test Migracji WordPress

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  migration-test:
    runs-on: ubuntu-latest
    
    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: wordpress_test
        options: >-
          --health-cmd="mysqladmin ping"
          --health-interval=10s
          --health-timeout=5s
          --health-retries=3
    
    steps:
    - uses: actions/checkout@v3
    
    - name: Skonfiguruj PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '8.1'
        extensions: mysqli, gd, xml, mbstring
    
    - name: Zainstaluj WordPress
      run: |
        curl -O https://wordpress.org/latest.tar.gz
        tar -xzf latest.tar.gz
        cp -r wordpress/* /var/www/html/
        
    - name: Skonfiguruj WordPress
      run: |
        cp wp-config-sample.php wp-config.php
        sed -i "s/database_name_here/wordpress_test/" wp-config.php
        sed -i "s/username_here/root/" wp-config.php
        sed -i "s/password_here/password/" wp-config.php
        sed -i "s/localhost/127.0.0.1/" wp-config.php
        
    - name: Zainstaluj WP-CLI
      run: |
        curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
        chmod +x wp-cli.phar
        sudo mv wp-cli.phar /usr/local/bin/wp
        
    - name: Wykonaj Testy Migracji
      run: |
        wp core install --url=http://localhost --title="Test Site" --admin_user=admin --admin_password=password --admin_email=test@example.com
        wp plugin install all-in-one-wp-migration --activate
        # Dodaj skrypty testów migracji tutaj
        
    - name: Zweryfikuj Migrację
      run: |
        # Dodaj skrypty weryfikacji tutaj
        wp option get siteurl
        wp option get home

#Skrypt Wdrożenia Automatyzowanego

#!/bin/bash
## Automatyzowany Skrypt Wdrożenia WordPress

set -e

## Zmienne środowiskowe
ENVIRONMENT=${1:-staging}
BACKUP_DIR="/backups/wordpress"
DEPLOY_LOG="/var/log/deploy.log"

## Funkcja logowania
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$ENVIRONMENT] $1" | tee -a "$DEPLOY_LOG"
}

## Sprawdzenia przed wdrożeniem
pre_deployment_checks() {
    log "Rozpocznij sprawdzenia przed wdrożeniem"
    
    # Sprawdź, czy WordPress jest zainstalowany
    if ! wp core is-installed --path=/var/www/html; then
        log "ERROR: WordPress nie jest poprawnie zainstalowany"
        exit 1
    fi
    
    # Sprawdź łączność z bazą danych
    if ! wp db check --path=/var/www/html; then
        log "ERROR: Połączenie z bazą danych nieudane"
        exit 1
    fi
    
    # Sprawdź wymagane pluginy aktywne
    if ! wp plugin is-active all-in-one-wp-migration --path=/var/www/html; then
        log "ERROR: Wymagany plugin migracji nie jest aktywny"
        exit 1
    fi
    
    log "Sprawdzenia przed wdrożeniem zakończone"
}

## Utwórz kopię zapasową wdrożenia
create_deployment_backup() {
    log "Tworzenie kopii zapasowej wdrożenia"
    
    local timestamp=$(date +%Y%m%d_%H%M%S)
    local backup_file="$BACKUP_DIR/pre_deploy_$ENVIRONMENT_$timestamp.sql"
    
    wp db export "$backup_file" --path=/var/www/html
    
    # Zweryfikuj integralność kopii zapasowej
    if wp db import "$backup_file" --path=/var/www/html --dry-run; then
        log "Kopia zapasowa utworzona i zweryfikowana: $backup_file"
    else
        log "ERROR: Tworzenie kopii zapasowej nieudane"
        exit 1
    fi
}

## Wykonaj migrację
execute_migration() {
    log "Wykonanie migracji WordPress"
    
    # Zaktualizuj URL witryny, jeśli to konieczne
    if [ "$ENVIRONMENT" = "production" ]; then
        wp search-replace "staging.przykład.com" "przykład.com" --skip-columns=guid --path=/var/www/html
    fi
    
    # Wyczyść wszystkie cache
    wp cache flush --path=/var/www/html
    
    # Zaktualizuj reguły rewrite
    wp rewrite flush --path=/var/www/html
    
    log "Migracja zakończona"
}

## Walidacja po wdrożeniu
post_deployment_validation() {
    log "Rozpocznij walidację po wdrożeniu"
    
    # Sprawdź dostępność witryny
    local site_url=$(wp option get siteurl --path=/var/www/html)
    
    if curl -f -s "$site_url" > /dev/null; then
        log "Witryna jest dostępna: $site_url"
    else
        log "ERROR: Witryna nie jest dostępna"
        exit 1
    fi
    
    # Sprawdź admin WordPress
    if curl -f -s "$site_url/wp-admin/" > /dev/null; then
        log "Admin WordPress jest dostępny"
    else
        log "ERROR: Admin WordPress nie jest dostępny"
        exit 1
    fi
    
    # Zweryfikuj integralność bazy danych
    if wp db check --path=/var/www/html; then
        log "Integralność bazy danych zweryfikowana"
    else
        log "ERROR: Sprawdzenie integralności bazy danych nieudane"
        exit 1
    fi
    
    # Sprawdź krytyczne pluginy
    local critical_plugins=("all-in-one-wp-migration" "wp-super-cache")
    
    for plugin in "${critical_plugins[@]}"; do
        if wp plugin is-active "$plugin" --path=/var/www/html; then
            log "Plugin $plugin jest aktywny"
        else
            log "WARNING: Plugin $plugin nie jest aktywny"
        fi
    done
    
    log "Walidacja po wdrożeniu zakończona"
}

## Główna funkcja wdrożenia
main() {
    log "Rozpocznij wdrożenie WordPress dla środowiska $ENVIRONMENT"
    
    pre_deployment_checks
    create_deployment_backup
    execute_migration
    post_deployment_validation
    
    log "Wdrożenie zakończone pomyślnie"
    
    # Wyślij powiadomienie (opcjonalnie)
    if command -v slack-cli &> /dev/null; then
        slack-cli send "Wdrożenie WordPress do $ENVIRONMENT zakończone pomyślnie"
    fi
}

## Wykonaj główną funkcję
main

#Strategia Zero-Downtime: Przygotowanie DNS i wyprzedzające obniżenie TTL

Profesjonalna migracja serwisu firmowego nie może wiązać się z przestojem w dostępności dla klientów:

  • Obniżenie parametru Time-To-Live (TTL) na 48 godzin przed migracją: Skrócenie czasu ważności rekordów A i AAAA w strefie DNS domeny do 300 sekund (5 minut) gwarantuje, że serwery DNS dostawców internetu na całym świecie błyskawicznie zainfekują nowy adres IP po przełączeniu.
  • Testowanie serwisu docelowego za pomocą pliku hosts: Przed wprowadzeniem zmian w publicznym DNS należy zweryfikować całe środowisko na nowym hostingu, dopisując adres IP serwera i domenę do lokalnego pliku hosts na stacji roboczej. Pozwala to na przetestowanie koszyka zakupowego, formularzy kontaktowych i panelu administracyjnego w warunkach w 100% odpowiadających produkcji.
  • Blokada zapisu do bazy danych podczas migracji końcowej (Delta Sync): Aby uniknąć rozjechania się danych transakcyjnych w sklepie WooCommerce, na czas zrzutu ostatecznej delty bazy danych stary serwis zostaje wprowadzony w tryb tylko do odczytu.

#Błyskawiczny transfer gigabajtowych bibliotek mediów za pomocą rsync

W przypadku dojrzałych serwisów posiadających dziesiątki tysięcy zdjęć i plików PDF tradycyjne przesyłanie przez protokół FTP jest zawodne i powolne:

  • Inkrementacyjna synchronizacja rsync przez SSH: Polecenie rsync kopiuje jedynie nowe oraz zmodyfikowane pliki przez bezpieczny tunel kryptograficzny. Nawet bazy mediów o rozmiarze ponad 50 GB mogą zostać zsynchronizowane w ciągu kilku minut.
  • Bezpieczna zamiana adresów URL z WP-CLI: W WordPressie surowe zapytania SQL UPDATE w bazie danych niszczą dane zapisane w postaci zserializowanej (PHP serialized arrays). Użycie narzędzia konsolowego wp search-replace precyzyjnie aktualizuje długości stringów, chroniąc ustawienia motywów i widżetów przed uszkodzeniem.
  • Regeneracja miniatur graficznych: Wywołanie polecenia wp media regenerate tworzy zoptymalizowane wersje grafik w nowoczesnych formatach WebP i AVIF dopasowane do wymagań nowego szablonu.

#Rygorystyczny audyt powdrożeniowy: SEO, bezpieczeństwo SSL i Core Web Vitals

Zakończenie propagacji DNS otwiera etap skrupulatnej weryfikacji parametrów jakościowych serwisu:

  • Kompleksowe skanowanie przekierowań 301 i kodów odpowiedzi: Przy użyciu crawlerów należy przeskanować całą domenę, upewniając się, że wszystkie dawne adresy URL zwracają prawidłowy kod 301 i kierują do właściwych odpowiedników w nowej strukturze serwisu.
  • Instalacja i konfiguracja certyfikatów SSL/TLS z mechanizmem HSTS: Nowy serwer musi obsługiwać nowoczesny protokół TLS 1.3 z automatycznym odnawianiem certyfikatów Let’s Encrypt oraz wdrożoną dyrektywą HTTP Strict Transport Security.
  • Pomiary metryk wydajnościowych Core Web Vitals: Testy w Google PageSpeed Insights powinny potwierdzić, że wdrożenie pamięci podręcznej Redis, kompresji Brotli i akceleratora PHP OPcache przyniosło pożądaną redukcję parametru Time to First Byte (TTFB) poniżej 200 milisekund.

#Aspekty prawne i zgodność z RODO podczas migracji infrastruktury

Zmiana serwera i dostawcy hostingu wiąże się ze ścisłymi wymogami prawnymi w Unii Europejskiej:

  • Zawarcie nowej umowy powierzenia przetwarzania danych (DPA): Zgodnie z artykułem 28 RODO przedsiębiorstwo musi podpisać formalną umowę powierzenia z nowym operatorem centrum danych, precyzując lokalizację serwerów (preferowany obszar EOG) oraz wdrożone środki bezpieczeństwa technicznego i organizacyjnego.
  • Aktualizacja polityki prywatności i klauzul informacyjnych: Jeśli w ramach migracji wdrożono nową sieć CDN (np. Cloudflare) lub zewnętrzny system backupów w chmurze, należy zaktualizować wykaz podmiotów przetwarzających dane w polityce prywatności serwisu.
  • Bezpieczne, bezpowrotne usunięcie danych ze starego hostingu: Po ustabilizowaniu pracy nowego serwera i zachowaniu 30-dniowego okresu ochronnego, wszystkie kopie zapasowe, bazy danych MySQL i pliki instalacji na serwerze poprzedniego dostawcy muszą zostać trwale zniszczone. Zapobiega to powstawaniu niekontrolowanych wycieków danych osobowych.
  • Wnioski końcowe: Rzetelnie przeprowadzona migracja to nie tylko sukces techniczny, ale przede wszystkim spokój operacyjny i pełne bezpieczeństwo prawne dla całego przedsiębiorstwa.

#Automatyzacja wdrożeń i powtarzalność dzięki potokom CI/CD

Nowoczesne zespoły inżynierskie rezygnują z ręcznych operacji na serwerze na rzecz zautomatyzowanych procedur DevOps:

  • Zautomatyzowane potoki GitHub Actions i GitLab CI: Wdrożenie kodu, kompilacja assetów graficznych oraz optymalizacja stylów CSS odbywają się automatycznie po zatwierdzeniu zmian w gałęzi głównej repozytorium Git.
  • Mechanizm natychmiastowego wycofania zmian (One-Click Rollback): Każdy etap potoku wdrożeniowego tworzy atomowy punkt przywracania. W przypadku wykrycia nieoczekiwanego błędu w testach automatycznych, system natychmiast przywraca poprzednią, stabilną wersję serwisu bez udziału człowieka.
  • Zarządzanie konfiguracją środowiskową (Environment Parity): Zapewnienie pełnej zgodności wersji PHP, baz danych MariaDB oraz modułów serwera pomiędzy środowiskiem lokalnym, serwerem testowym a klastrem produkcyjnym całkowicie eliminuje problem błędów ujawniających się dopiero po wdrożeniu.
  • Podsumowanie: Inwestycja w nowoczesne standardy inżynieryjne to gwarancja bezpieczeństwa i stabilności serwisu w długiej perspektywie.

Przemyślana strategia migracji, wysokie standardy bezpieczeństwa oraz troska o zachowanie integralności danych to fundament, na którym opiera się sukces każdego dojrzałego projektu internetowego. Profesjonalizm w inżynierii webowej zawsze procentuje stabilnością i zaufaniem użytkowników.

Konsekwencja w działaniu, precyzyjne planowanie harmonogramu prac oraz skrupulatne testowanie wszystkich funkcji serwisu gwarantują płynne przejście bez zakłóceń w sprzedaży i obsłudze klientów.

Bezpieczeństwo danych to priorytet.

#Wniosek

Migracja WordPress nie musi być przytłaczająca, gdy podejście jest systematyczne. Postępując zgodnie z tym kompleksowym przewodnikiem, przygotowując się starannie i testując dokładnie, możesz pomyślnie migrować swoją witrynę WordPress z minimalnym zakłóceniem dla użytkowników i wydajności SEO.

Pamiętaj, że przygotowanie jest kluczowe, nigdy nie próbuj migracji bez kompletnych kopii zapasowych i jasnego planu powrotu. Weź swój czas, testuj dokładnie i nie wahaj się szukać profesjonalnej pomocy dla złożonych migracji.

Z odpowiednim planowaniem i wykonaniem, Twoja migracja WordPress może być płynnym procesem, który przygotuje Twoją witrynę na przyszły wzrost i sukces.

Zobacz nasze projekty migracji WordPress, jeśli planujesz przebudowę albo przejście na Astro lub Next.js.

Następny krok

Przekuj artykuł w realne wdrożenie

Pod tym wpisem dokładam linki, które domykają intencję użytkownika i prowadzą dalej w strukturze serwisu.

Chcesz wdrożyć ten temat na swojej stronie?

Jeśli chcesz przełożyć wiedzę z artykułu na działającą stronę, sklep albo przebudowę serwisu, przygotuję konkretny zakres prac.

Powiązany klaster

Sprawdź inne usługi WordPress i bazę wiedzy

Wzmocnij swój biznes dzięki profesjonalnemu wsparciu technicznemu w kluczowych obszarach ekosystemu WordPress.

Ile trwa migracja WordPress?#
Czas migracji zależy od rozmiaru witryny: Małe witryny (1-5GB): 1-2 godziny, Średnie witryny (5-20GB): 2-4 godziny, Duże witryny (20GB+): 4+ godzin.
Czy potrzebuję umiejętności technicznych do migracji WordPress?#
Podstawowe umiejętności techniczne są pomocne, ale z odpowiednim przewodnictwem i narzędziami nawet początkujący mogą pomyślnie migrować witryny WordPress.
Czy moje SEO będzie dotknięte migracją?#
Prawidłowo wykonana migracja z przekierowaniami 301 zachowuje rankingi SEO. Zawsze informuj Google o zmianach domeny przez Search Console.
Jaka jest różnica między migracją ręczną a przy użyciu wtyczki?#
Migracja ręczna oferuje pełną kontrolę, ale wymaga wiedzy technicznej. Migracja przy użyciu wtyczki jest łatwiejsza, ale może mieć ograniczenia dla złożonych witryn.
Jak migrować instalację multisite WordPress?#
Migracja multisite wymaga specjalnego traktowania konfiguracji sieci, współdzielonych baz danych i mapowania domen. Rozważ profesjonalną pomoc dla złożonych migracji multisite.
Czy muszę zaktualizować wszystkie pluginy po migracji?#
Sama migracja nie wymusza aktualizacji, ale po przeniesieniu sprawdź zgodność wtyczek z wersją PHP i MySQL na nowym serwerze. Aktualizuj pojedynczo, z działającą kopią zapasową, i po każdej wtyczce sprawdzaj front oraz panel administracyjny. Wtyczki związane ze środowiskiem (cache, firewall, kopie zapasowe) zwykle wymagają ponownej konfiguracji, a nie tylko aktualizacji.
Jaka jest różnica między WP_HOME a WP_SITEURL?#
WP_SITEURL wskazuje adres, pod którym leżą pliki rdzenia WordPressa (odpowiednik opcji siteurl), a WP_HOME to adres strony głównej, który widzi odwiedzający (opcja home). Zwykle są identyczne, różnią się wtedy, gdy WordPress stoi w podkatalogu, a witryna serwowana jest z katalogu głównego. Obie stałe zdefiniowane w wp-config.php nadpisują wartości z bazy danych, więc pola w Ustawienia > Ogólne przestają być edytowalne.
Czy powinienem migrować podczas godzin pracy?#
Samo przecięcie, czyli ostatnią synchronizację bazy i przełączenie DNS, planuj na okno najniższego ruchu. W sklepie unikaj godzin, w których powstają zamówienia, bo rekordy zapisane na starym serwerze po wykonaniu eksportu bazy zostaną utracone. Przygotowanie, kopia na środowisku staging i testy mogą iść w dowolnym momencie.
Jak obsłużyć formularze email podczas migracji?#
Po przeniesieniu sprawdź, czy nowy serwer w ogóle wysyła pocztę: funkcja wp_mail domyślnie korzysta z lokalnego sendmaila, który na części hostingów jest wyłączony. Najpewniejsze jest wysyłanie przez SMTP z uwierzytelnianiem, z rekordami SPF i DKIM ustawionymi dla nowego serwera. Każdy formularz przetestuj realnym zgłoszeniem i sprawdź, czy wiadomość nie ląduje w spamie.
Co się stanie, jeśli zepsuję coś podczas migracji?#
Dlatego kopia zapasowa plików i bazy sprzed migracji jest warunkiem startu, a nie opcją: przywrócenie zrzutu bazy i katalogu wp-content cofa witrynę do stanu wyjściowego. Nie kasuj starej instalacji, dopóki nowa nie przejdzie pełnych testów. Najczęstsze awarie, biały ekran i błąd połączenia z bazą, są odwracalne przez poprawienie wp-config.php albo wyłączenie wtyczki przez zmianę nazwy jej katalogu.
Czy mogę migrować WordPress bez przestoju?#
Tak, jeśli najpierw uruchomisz kompletną kopię na nowym serwerze i przetestujesz ją wskazując jego adres IP w lokalnym pliku hosts, a dopiero potem przełączysz DNS. Z wyprzedzeniem obniż TTL rekordu domeny, żeby propagacja poszła szybko. Na czas przecięcia wstrzymaj zapisy (zamówienia, komentarze) i dosynchronizuj bazę, bo przez pewien czas część ruchu trafia jeszcze na stary serwer.
Czy muszę zaktualizować mój certyfikat SSL?#
Certyfikat jest wystawiony na konkretną nazwę domeny i zainstalowany na konkretnym serwerze, więc przy zmianie hostingu wystawiasz go od nowa, a przy zmianie domeny potrzebujesz certyfikatu na nową nazwę. Wystaw i zweryfikuj go zanim przełączysz DNS, inaczej odwiedzający zobaczą ostrzeżenie przeglądarki. Po przełączeniu domknij temat mieszanej zawartości, szukając odwołań http:// w treści i w katalogu wp-content.
Jak obsłużyć duże bazy danych podczas migracji?#
Przy dużych bazach zamiast phpMyAdmin użyj linii poleceń: mysqldump albo wp db export po stronie źródła i wp db import po stronie celu, najlepiej na skompresowanym pliku. Import przez przeglądarkę wykłada się na limitach upload_max_filesize i max_execution_time. Zamianę adresów rób przez wp search-replace, bo poprawnie obsługuje dane serializowane, a bardzo duże tabele przetwarzaj partiami.
Czy powinienem usunąć starą witrynę po migracji?#
Nie od razu. Zostaw starą instalację nietkniętą przez co najmniej kilka tygodni, aż potwierdzisz w Search Console, że nowe adresy są zaindeksowane, a przekierowania 301 działają. Przy zmianie domeny stary serwer musi dalej odpowiadać, bo to on obsługuje przekierowania ze starych adresów. Zanim cokolwiek wyłączysz, zachowaj offline pełną kopię plików i bazy.
Co z danymi użytkowników i hasłami?#
Hasła leżą w tabeli wp_users jako skróty, więc przeniesienie całej bazy zachowuje je i nikt nie musi ich resetować. Klucze i sole z wp-config.php nie biorą udziału w weryfikacji hasła, podpisują ciasteczka sesji, więc ich zmiana po prostu wylogowuje wszystkich zalogowanych. Dane użytkowników to dane osobowe: robocze zrzuty bazy trzymaj w bezpiecznym miejscu i kasuj po zakończeniu migracji.
Jak zaktualizować Google Analytics po migracji?#
Przy zmianie samego hostingu identyfikator pomiaru zostaje ten sam, sprawdź tylko, czy kod śledzący nie zniknął razem z podmienionym motywem lub wtyczką. Przy zmianie domeny zaktualizuj adres w ustawieniach strumienia danych GA4 i popraw listę domen wykluczonych z odesłań. Zanotuj datę przecięcia, bo bez niej późniejsze porównania ruchu wprowadzają w błąd.
Jaki jest najlepszy sposób na przetestowanie migracji?#
Uruchom kopię na docelowym serwerze i wejdź na nią po docelowej domenie, wskazując jego adres IP w lokalnym pliku hosts, zamiast testować na adresie tymczasowym, który sam wymusza podmianę URL. Przejdź ścieżki, które realnie coś zapisują: logowanie, formularz kontaktowy, koszyk i płatność w trybie testowym, wysyłkę pliku do biblioteki mediów. Na koniec przeklikaj permalinki wpisów i podstron oraz sprawdź logi serwera pod kątem błędów 404 i 500.
Czy muszę zaktualizować mój plik robots.txt?#
Jeśli plik jest fizyczny w katalogu głównym, przenieś go razem z resztą i sprawdź, czy nie wjechała reguła Disallow ze środowiska testowego, bo to najczęstsza przyczyna zniknięcia witryny z wyników wyszukiwania. Popraw w nim bezwzględny adres mapy witryny na nową domenę. Zajrzyj też do Ustawienia > Czytanie, czy nie jest zaznaczone odstraszanie wyszukiwarek, bo wtedy WordPress serwuje własny robots.txt blokujący indeksowanie.
Jak obsłużyć niestandardowe typy postów i taksonomie?#
Wpisy i terminy siedzą w tabelach wp_posts i wp_terms, więc przenoszą się razem z bazą, ale ich rejestracja żyje w kodzie: jeśli wtyczka lub motyw z register_post_type zostanie na starym serwerze, treść stanie się niewidoczna. Przenieś więc cały katalog wp-content, łącznie z wtyczkami własnymi i motywem potomnym. Po migracji zapisz ponownie strukturę permalinków, żeby przepisać reguły adresów dla własnych typów i taksonomii.
Co z integracjami API i webhookami?#
Adresy zwrotne i klucze są zwykle zapisane po stronie usługi zewnętrznej, więc po zmianie domeny trzeba je zaktualizować ręcznie: bramki płatności, systemy mailingowe, CRM, dostawcy wysyłki. Część usług filtruje ruch po adresie IP, więc po zmianie hostingu dopisz nowy adres do listy dozwolonych. Sprawdź też, czy tokeny nie były trzymane w wp-config.php lub w zmiennych środowiskowych, które nie przeniosły się razem z plikami.
Czy powinienem użyć usługi migracji?#
Decyduje ryzyko, nie rozmiar: prosty blog przeniesiesz wtyczką w godzinę, natomiast sklep z aktywnymi zamówieniami, multisite albo witryna z własnymi integracjami wymagają zaplanowanego przecięcia i scenariusza wycofania. Wielu dostawców hostingu przenosi witryny w ramach usługi, sprawdź to przed zakupem. Jeśli przestój kosztuje więcej niż praca specjalisty, wybór jest oczywisty.

Potrzebujesz FAQ dopasowanego do branży i rynku? Przygotujemy wersję pod Twoje cele biznesowe.

Porozmawiajmy

Polecane artykuły