Migrazione WordPress Senza Downtime: Guida per Agenzie

28 maggio 202612 minGuide
In breveAI

Guida operativa per agenzie: migrare WordPress senza downtime usando il metodo doppio ambiente, sincronizzazione continua e switch DNS controllato. Include script, checklist e troubleshooting.

Perché il downtime è un problema nelle migrazioni WordPress

Per un sito aziendale o e-commerce, ogni minuto di downtime si traduce in perdita diretta di fatturato. Secondo dati Gartner 2025, il costo medio di un’ora di downtime per un’azienda medio-piccola è di circa €5.600. Per siti con traffico elevato, questa cifra può superare i €50.000.

Come agenzia, gestire migrazioni con downtime zero non è solo una questione tecnica: è un requisito professionale che distingue chi lavora in modo strutturato da chi improvvisa. Il cliente finale non deve nemmeno accorgersi che è in corso una migrazione.

Le situazioni più comuni che richiedono una migrazione WordPress includono:

  • Cambio hosting per prestazioni o costi
  • Passaggio da shared a VPS o cloud
  • Consolidamento di infrastrutture multi-sito
  • Migrazione da sviluppo a produzione
  • Disaster recovery e backup restore

In tutti questi scenari, l’obiettivo è mantenere il sito accessibile e funzionante durante l’intero processo.

Preparazione pre-migrazione: analisi e pianificazione

Una migrazione senza downtime si vince nella fase di preparazione. Prima di toccare qualsiasi file o database, serve un audit completo del sito e un piano d’azione dettagliato.

Audit tecnico completo

Inizia raccogliendo tutti i dati tecnici del sito attuale:

  • Dimensione totale dei file (wp-content, uploads, plugin, theme)
  • Dimensione database MySQL (esegui SELECT table_schema AS "Database", ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema;)
  • Versione PHP, MySQL, WordPress core
  • Lista completa di plugin e theme attivi con versioni
  • Configurazioni server custom (php.ini, .htaccess, nginx.conf)
  • Servizi esterni integrati (CDN, email, API, payment gateway)
  • Certificati SSL e configurazione HTTPS

Usa WP-CLI per velocizzare la raccolta dati. Comandi utili:

wp core version
wp plugin list --format=table
wp theme list
wp db size --format=bytes
wp option get siteurl
wp option get home

Identificare i punti critici

Alcuni elementi richiedono attenzione particolare durante la migrazione:

  • Path assoluti hardcoded: cerca nel database URL e path non gestiti da WordPress (serializzazioni custom, shortcode, builder page)
  • Cron job e scheduled tasks: plugin di backup, invio newsletter, sincronizzazioni devono essere temporaneamente disabilitati
  • Cache multipla: object cache, page cache, CDN cache vanno mappati e gestiti
  • Sessioni utente attive: e-commerce con carrelli, utenti loggati, transazioni in corso
  • DNS e propagazione: pianifica il TTL con almeno 48h di anticipo

Checklist pre-migrazione

Prima di procedere, verifica che siano soddisfatti questi requisiti:

  1. Backup completo verificato e testato (file + database)
  2. Accesso SSH/SFTP sia a server origine che destinazione
  3. Credenziali database vecchio e nuovo ambiente
  4. Lista whitelist IP per accesso staging
  5. Piano di rollback documentato
  6. Finestra di manutenzione concordata (anche se non servirà downtime)
  7. Stakeholder informati su tempistiche e processo

Strategia di migrazione: il metodo del doppio ambiente

La tecnica più affidabile per migrazioni senza downtime è il metodo del doppio ambiente: mentre il sito originale resta online e funzionante, si prepara una copia completa sul nuovo server, si testa tutto, e solo all’ultimo si esegue uno switch DNS quasi istantaneo.

Fase 1: Setup ambiente di destinazione

Sul nuovo server, configura l’ambiente identico o superiore a quello di origine:

  • Installa stesso stack LAMP/LEMP (o superiore)
  • Configura PHP con estensioni necessarie (gd, curl, mbstring, xml, zip, imagick)
  • Crea database MySQL con collation utf8mb4_unicode_ci
  • Configura utente database con privilegi corretti
  • Imposta memory_limit, max_execution_time, upload_max_filesize adeguati

Verifica compatibilità con:

php -m | grep -E "mysqli|curl|gd|mbstring|xml|zip"
mysql --version

Fase 2: Migrazione iniziale file e database

Copia completa del sito sul nuovo server. Usa rsync per efficienza:

rsync -avz -e "ssh -p 22" --exclude 'wp-config.php' \
  user@old-server:/var/www/html/ /var/www/newsite/

Esporta e importa il database:

# Sul server origine
wp db export - | gzip > database-export.sql.gz

# Sul server destinazione
gunzip < database-export.sql.gz | wp db import -

Aggiorna wp-config.php con nuove credenziali database:

define('DB_NAME', 'nuovo_database');
define('DB_USER', 'nuovo_user');
define('DB_PASSWORD', 'password_sicura');
define('DB_HOST', 'localhost');

Fase 3: Configurazione ambiente staging accessibile

Il nuovo sito deve essere accessibile per test, ma non pubblicamente. Opzioni:

  • Subdomain temporaneo: staging.clientsite.com puntato al nuovo IP
  • File hosts locale: modifica /etc/hosts per puntare il dominio al nuovo IP solo dalla tua postazione
  • IP whitelisting: permetti accesso solo a IP agenzia tramite .htaccess o nginx

Esempio .htaccess per IP whitelisting:

Order Deny,Allow
Deny from all
Allow from 203.0.113.0/24
Allow from 198.51.100.50

Aggiorna URL nel database senza modificare il dominio reale (usa subdomain staging):

wp search-replace 'https://clientsite.com' 'https://staging.clientsite.com' \
  --all-tables --precise

Testing completo sul nuovo ambiente

Prima dello switch definitivo, ogni funzionalità deve essere testata accuratamente. Non saltare questa fase: è qui che emergono il 90% dei problemi.

Checklist testing funzionale

  1. Frontend: naviga tutte le pagine principali, verifica immagini, CSS, JavaScript
  2. Backend: accedi a wp-admin, verifica editor, media library, plugin attivi
  3. Form e interazioni: testa contact form, newsletter signup, ricerca interna
  4. E-commerce: processo checkout completo (usa gateway test), calcolo spedizioni, tasse
  5. Utenti: login, registrazione, password reset, profili utente
  6. API e integrazioni: verifica chiamate a servizi esterni (CRM, analytics, email)
  7. Performance: misura TTFB, FCP, LCP con WebPageTest o GTmetrix
  8. Mobile: test responsive su device reali o BrowserStack

Test automatizzati con WP-CLI

Alcuni controlli possono essere automatizzati:

# Verifica integrità core
wp core verify-checksums

# Controlla plugin e theme aggiornabili
wp plugin list --update=available
wp theme list --update=available

# Test database
wp db check
wp db optimize

# Verifica permalink
wp rewrite flush
wp rewrite list

Monitoraggio errori e log

Abilita debug logging sul nuovo ambiente per intercettare warning e errori:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
define('SCRIPT_DEBUG', true);

Monitora i log in tempo reale:

tail -f /var/www/newsite/wp-content/debug.log
tail -f /var/log/nginx/error.log

Sincronizzazione continua pre-switch

Dal momento della migrazione iniziale allo switch DNS possono passare ore o giorni. Nel frattempo, il sito originale continua a ricevere aggiornamenti: nuovi contenuti, ordini, commenti, utenti.

Per evitare perdita di dati, serve una strategia di sincronizzazione continua.

Sincronizzazione database incrementale

Usa script per sincronizzare solo le tabelle che cambiano frequentemente:

#!/bin/bash
# sync-db-incremental.sh

TABLES="wp_posts wp_postmeta wp_comments wp_users wp_usermeta wp_woocommerce_order_items"

for table in $TABLES; do
  mysqldump -h old-server.com -u user -p database $table | \
  mysql -h localhost -u newuser -pnewpass newdatabase
done

Esegui questo script ogni 15-30 minuti tramite cron fino allo switch.

Sincronizzazione file uploads

Per wp-content/uploads, usa rsync incrementale:

*/15 * * * * rsync -avz --delete \
  user@old-server:/var/www/html/wp-content/uploads/ \
  /var/www/newsite/wp-content/uploads/

Per siti con volumi elevati di upload, considera soluzioni come:

  • Storage condiviso (NFS, S3) tra vecchio e nuovo server
  • Plugin di sync real-time (WP Offload Media per S3)
  • CDN con origin shield per servire assets da entrambi i server

Gestione e-commerce e transazioni

Per WooCommerce o shop con transazioni continue:

  • Pianifica switch in orario di basso traffico (notte, weekend)
  • Attiva modalità manutenzione solo su checkout/cart (non tutto il sito)
  • Sincronizza ordini fino a 5 minuti prima dello switch
  • Verifica gateway payment siano configurati correttamente (webhook URL)

Lo switch DNS: il momento critico

Quando tutto è testato e sincronizzato, è il momento dello switch. Questo è l'unico momento con potenziale micro-downtime (secondi, non minuti).

Preparazione DNS

Almeno 48 ore prima, abbassa il TTL dei record DNS a 300 secondi (5 minuti):

clientsite.com.    300    IN    A    203.0.113.10

Questo permette propagazione rapida quando cambierai l'IP.

Sincronizzazione finale

10 minuti prima dello switch:

  1. Esegui ultima sincronizzazione database completa
  2. Sincronizza uploads con rsync finale
  3. Opzionale: attiva pagina manutenzione sul vecchio sito (solo per form submission e login)

Cambio DNS

Aggiorna il record A (o CNAME) puntando al nuovo server IP:

clientsite.com.    300    IN    A    198.51.100.50

Usa servizi come CloudFlare o AWS Route53 per switch più rapido (propagazione ~1 minuto).

Aggiornamento URL nel database

Sul nuovo server, sostituisci staging URL con quello definitivo:

wp search-replace 'https://staging.clientsite.com' 'https://clientsite.com' \
  --all-tables --precise

wp cache flush

Verifica SSL e HTTPS

Configura certificato SSL sul nuovo server (Let's Encrypt o certificato esistente):

certbot --nginx -d clientsite.com -d www.clientsite.com

Forza HTTPS in wp-config.php:

define('FORCE_SSL_ADMIN', true);
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
   $_SERVER['HTTPS'] = 'on';

Post-migrazione: monitoraggio e ottimizzazione

Lo switch è completato, ma il lavoro non finisce qui. Le prime 24-48 ore sono critiche per intercettare problemi.

Monitoraggio immediato

Nelle prime ore post-migrazione:

  • Verifica uptime ogni 5 minuti (UptimeRobot, Pingdom)
  • Monitora error log server e WordPress debug.log
  • Controlla Google Search Console per errori crawling
  • Verifica Analytics continui a tracciare correttamente
  • Testa form e-commerce con transazioni reali

Ottimizzazioni performance

Con il sito stabile sul nuovo server, ottimizza:

  • Configura object cache (Redis o Memcached)
  • Attiva page caching (Nginx FastCGI cache, WP Rocket, o W3TC)
  • Ottimizza immagini esistenti (WP-CLI + ImageMagick)
  • Configura CDN e cache browser headers
  • Abilita HTTP/2 o HTTP/3 su server
# Object cache Redis
wp redis enable

# Ottimizzazione immagini batch
wp media regenerate --image_size=all --yes

Documentazione e handover

Completa la migrazione con documentazione per il cliente:

  • Credenziali aggiornate (hosting, database, wp-admin)
  • Modifiche configurazione server
  • Backup schedule sul nuovo ambiente
  • Procedure rollback in caso emergenza
  • Contatti supporto nuovo hosting

Troubleshooting: problemi comuni e soluzioni

Problema: Mixed content warnings dopo switch HTTPS

Soluzione: cerca URL hardcoded HTTP nel database:

wp search-replace 'http://clientsite.com' 'https://clientsite.com' \
  --all-tables --report-changed-only

Aggiungi header Content-Security-Policy per forzare HTTPS:

add_action('send_headers', function() {
    header('Content-Security-Policy: upgrade-insecure-requests');
});

Problema: Plugin non funzionanti sul nuovo server

Causa comune: path assoluti o permessi file. Verifica:

# Permessi corretti
find /var/www/newsite -type d -exec chmod 755 {} \;
find /var/www/newsite -type f -exec chmod 644 {} \;

# Owner corretto
chown -R www-data:www-data /var/www/newsite

Problema: Performance peggiorate dopo migrazione

Checklist diagnostica:

  • Verifica configurazione PHP OpCache attiva
  • Controlla slow query log MySQL
  • Testa TTFB con curl -w "@curl-format.txt" -o /dev/null -s https://clientsite.com
  • Verifica non ci siano plugin debug attivi
  • Controlla limitazioni risorse server (RAM, CPU, IOPS)

Problema: Email non inviate dal nuovo server

Soluzione: configura SMTP esterno (non usare mail() PHP):

// wp-config.php
define('SMTP_HOST', 'smtp.mailgun.org');
define('SMTP_PORT', 587);
define('SMTP_USER', 'postmaster@mg.clientsite.com');
define('SMTP_PASS', 'password');

Oppure usa plugin WP Mail SMTP o Post SMTP.

Strumenti e plugin consigliati per agenzie

Stack strumenti professionali per migrazioni:

  • WP-CLI: indispensabile per automazione e operazioni batch
  • WP Migrate DB Pro: sincronizzazione database push/pull tra ambienti
  • Duplicator Pro: backup e migrazione completa con script installer
  • All-in-One WP Migration: alternativa user-friendly per siti fino 512MB
  • WP Stagecoach: gestione staging environment automatizzato
  • ManageWP: orchestrazione migrazioni multiple per agenzie
  • ServerPilot o RunCloud: gestione server semplificata con staging built-in

Tool esterni:

  • CloudFlare: DNS con TTL bassi e switch rapido + DDoS protection
  • UptimeRobot: monitoring uptime gratuito ogni 5 minuti
  • New Relic o Datadog: monitoring performance APM per siti enterprise
  • WebPageTest: test performance comparativi pre/post migrazione

Automazione: script per migrazioni ripetibili

Per agenzie che gestiscono migrazioni frequenti, vale la pena investire in automazione.

Script bash migrazione completa

#!/bin/bash
# wordpress-migration.sh

SOURCE_HOST="old-server.com"
SOURCE_PATH="/var/www/html"
DEST_PATH="/var/www/newsite"
DB_NAME="wordpress_db"

echo "[1/5] Syncing files..."
rsync -avz --exclude 'wp-config.php' \
  user@$SOURCE_HOST:$SOURCE_PATH/ $DEST_PATH/

echo "[2/5] Exporting database..."
ssh user@$SOURCE_HOST "wp db export - --path=$SOURCE_PATH" | \
  wp db import - --path=$DEST_PATH

echo "[3/5] Updating URLs..."
wp search-replace "$SOURCE_HOST" "$DEST_HOST" \
  --path=$DEST_PATH --all-tables

echo "[4/5] Flushing cache..."
wp cache flush --path=$DEST_PATH
wp rewrite flush --path=$DEST_PATH

echo "[5/5] Setting permissions..."
chown -R www-data:www-data $DEST_PATH
find $DEST_PATH -type d -exec chmod 755 {} \;
find $DEST_PATH -type f -exec chmod 644 {} \;

echo "Migration complete!"

Integrazione con AgencyPilot

Se usi AgencyPilot per gestire siti client, puoi:

  • Monitorare stato migrazione real-time da dashboard centrale
  • Automatizzare checklist pre/post migrazione per ogni sito
  • Schedulare sincronizzazioni database incrementali
  • Ricevere alert automatici su errori o downtime
  • Documentare processo e credenziali in modo strutturato

L'integrazione con WP-CLI permette di eseguire comandi su tutti i siti gestiti tramite API AgencyPilot.

Conclusioni operative

Una migrazione WordPress senza downtime richiede pianificazione, strumenti adeguati e attenzione ai dettagli. Il metodo del doppio ambiente con sincronizzazione continua è la strategia più affidabile per agenzie che non possono permettersi errori.

I punti chiave da ricordare:

  • Investi tempo nella preparazione e testing: previene il 90% dei problemi
  • Usa automazione dove possibile: WP-CLI, rsync, script personalizzati
  • Sincronizza database e files continuamente fino allo switch
  • Abbassa TTL DNS con 48h anticipo per propagazione rapida
  • Monitora attentamente le prime 48h post-migrazione
  • Documenta tutto per riferimento futuro e handover cliente

Con questo approccio strutturato, puoi garantire migrazioni professionali che i clienti nemmeno percepiscono, mantenendo reputazione e standard di qualità elevati.

FAQ

Quanto tempo richiede una migrazione WordPress senza downtime?

Dipende dalla dimensione del sito. Per un sito standard (5-10GB, database 100-500MB), calcola: 2-3 ore per setup iniziale e migrazione, 4-8 ore per testing completo, 1-2 giorni per sincronizzazione continua se necessario. Lo switch DNS finale richiede 5-15 minuti. In totale, pianifica 2-4 giorni lavorativi per gestire l'intero processo in modo professionale, anche se il downtime effettivo sarà zero.

È possibile migrare un e-commerce WooCommerce senza perdere ordini?

Sì, usando sincronizzazione database incrementale. Configura uno script che sincronizza le tabelle degli ordini ogni 10-15 minuti fino allo switch DNS. Pianifica lo switch in orario di basso traffico (es. 3-4 AM) e sincronizza ordini fino a 5 minuti prima. Verifica che webhook dei payment gateway (PayPal, Stripe) siano aggiornati con i nuovi URL. Dopo lo switch, controlla che non ci siano ordini pending sul vecchio server.

Cosa fare se qualcosa va storto durante lo switch DNS?

Preparati con un piano di rollback: mantieni il vecchio server attivo per almeno 48 ore dopo lo switch. Se emergono problemi critici, puoi invertire il record DNS puntando nuovamente al vecchio IP. Con TTL a 300 secondi, la propagazione inversa richiede 5-30 minuti. Per questo motivo, non spegnere mai il vecchio server immediatamente dopo lo switch. Conserva backup completi di entrambi gli ambienti fino a conferma stabilità.

Come gestire la cache CDN durante la migrazione?

Prima dello switch DNS, configura il CDN sul nuovo server ma non attivarlo. Dopo lo switch, purga completamente la cache CDN (Cloudflare: Purge Everything, o via API). Se usi plugin cache come WP Rocket, disabilita CDN temporaneamente durante lo switch e riattivalo dopo 30 minuti. Monitora che il CDN punti correttamente al nuovo origin server verificando gli header HTTP della risposta.

È necessario avvisare Google della migrazione se l'URL non cambia?

No, se il dominio resta identico, Google non percepisce la migrazione come cambio di sito. Tuttavia, monitora Google Search Console per eventuali errori di crawling nelle 48 ore successive. Verifica che robots.txt, sitemap.xml e canonical tag siano identici al vecchio sito. Se cambi da HTTP a HTTPS durante la migrazione, aggiungi la nuova property HTTPS in Search Console e imposta redirect 301 permanenti da HTTP a HTTPS.

Gestisci i siti WordPress dei tuoi clienti?

AgencyPilot ti dà report AI, uptime monitoring, backup e portale clienti in un’unica dashboard. Gratis per 3 siti.

Prova gratis
Leggi anche
Tutti gli articoli
Tutti gli articoli