Gestire aggiornamenti WordPress su 30, 50 o 100 siti diversi senza un sistema centralizzato e’ una ricetta per il disastro. Nella nostra esperienza con agenzie che gestiscono portali della Pubblica Amministrazione e clienti enterprise, abbiamo visto siti andare offline per un aggiornamento plugin mal configurato, temi che rompono il layout dopo un update del core, e conflitti di compatibilita’ che nessuno ha testato prima di cliccare “Aggiorna tutto”.
Questa guida raccoglie il workflow che usiamo in AgencyPilot per gestire aggiornamenti WordPress multi-sito in modo sicuro, ripetibile e automatizzato. Include strategie di staging, backup pre-aggiornamento, rollback rapido e automazione con API.
TL;DR: Il Workflow di Aggiornamento Sicuro
In sintesi, il processo corretto per aggiornare WordPress su piu siti segue questi passaggi:
- Backup completo del sito (file + database) prima di qualsiasi operazione
- Ambiente staging dove testare gli aggiornamenti prima di andare in produzione
- Aggiornamento del core WordPress per primo, se disponibile
- Aggiornamento plugin e temi uno alla volta nei siti critici, in blocco nei siti semplici
- Smoke test automatico: homepage, pagina di esempio, form di contatto, checkout
- Rollback immediato se qualcosa non funziona
- Report dell’avvenuto aggiornamento al cliente o nel dashboard agenzia
Nessuno di questi passaggi e’ opzionale. Quando gestisci multi-sito WordPress, saltare anche un solo step significa rischiare ore di debug notturno.
Perche gli Aggiornamenti WordPress Multi-Sito sono Complessi
Un sito WordPress medio ha 15-30 plugin installati. Ogni plugin puo’ avere un ciclo di rilascio diverso: alcuni sviluppatori pushano aggiornamenti settimanali, altri ogni pochi mesi. Quando moltiplichi questo numero per 50 siti, ottieni tra 750 e 1500 aggiornamenti potenziali da monitorare ogni mese.
I problemi principali che le agenzie affrontano sono:
| Problema | Frequenza | Impatto |
|---|---|---|
| Plugin abbandonato senza aggiornamenti | Molto frequente | Porte di sicurezza, incompatibilita’ future |
| Aggiornamento core che rompe plugin legacy | 4-6 volte l’anno | Sito non funzionante, errori fatali |
| Conflitto tra plugin dopo aggiornamento | Settimanale | White screen, layout rotto, form non funzionanti |
| Aggiornamento tema che sovrascrive customizzazioni | Raro ma critico | Perdita modifiche child theme, CSS custom |
| Timeout PHP su aggiornamenti massivi | Frequente su hosting condiviso | Aggiornamento parziale, stato inconsistente |
La sicurezza WordPress per agenzie inizia proprio da qui: un sito non aggiornato e’ un sito vulnerabile. Ma aggiornare senza metodo puo’ essere peggio di non aggiornare.
Strategia di Gestione Centralizzata WordPress
La gestione centralizzata degli aggiornamenti WordPress significa poter controllare, monitorare e applicare update su tutti i siti da un unico pannello. Questo riduce il tempo operativo del 70-80% rispetto all’accesso manuale a ogni wp-admin.
I tre approcci principali sono:
1. Dashboard di Gestione (AgencyPilot, ManageWP, MainWP)
Strumenti come AgencyPilot offrono un dashboard centralizzato dove vedi tutti i siti, gli aggiornamenti disponibili e lo stato di sicurezza. Il vantaggio e’ poter applicare aggiornamenti selettivamente: core su tutti, plugin specifici solo su alcuni siti.
Per un confronto dettagliato tra le piattaforme principali, consulta la nostra guida al confronto ManageWP vs MainWP vs AgencyPilot.
2. Automazione via WP-CLI e Cron
Per agenzie con accesso SSH ai server, WP-CLI permette di automatizzare gli aggiornamenti con script bash. Un esempio pratico:
#!/bin/bash
# update-wp-sites.sh - Aggiornamento centralizzato via WP-CLI
SITES=(
"/var/www/sito-cliente-1"
"/var/www/sito-cliente-2"
"/var/www/sito-cliente-3"
)
for site_path in "${SITES[@]}"; do
echo "=== Aggiornamento: $site_path ==="
# Backup database prima di tutto
wp db export "${site_path}/backups/pre-update-$(date +%Y%m%d).sql" \
--path="${site_path}" --allow-root
# Aggiorna core
wp core update --path="${site_path}" --allow-root
# Aggiorna plugin (uno alla volta per tracciare errori)
wp plugin list --path="${site_path}" --update=available --format=csv | \
tail -n +2 | cut -d',' -f1 | while read plugin; do
echo " Aggiornando plugin: $plugin"
wp plugin update "$plugin" --path="${site_path}" --allow-root
done
# Aggiorna temi
wp theme update --all --path="${site_path}" --allow-root
# Smoke test
wp rewrite flush --path="${site_path}" --allow-root
echo " Completato: $site_path"
done
Questo script fa backup, aggiorna core, plugin e temi in sequenza, e fa flush dei permalink. E’ base ma efficace. Per qualcosa di piu’ robusto vedi la sezione su automazione avanzata.
3. REST API per Automazione Custom
Se hai bisogno di logica custom (es. aggiornare solo nei fine settimana, solo siti con traffico sotto una soglia), la REST API WordPress permette di costruire pipeline su misura. AgencyPilot usa questo approccio per gestire aggiornamenti su centinaia di siti con regole diverse per ogni cliente.
Backup Pre-Aggiornamento: Non Opzionale
Ogni aggiornamento WordPress deve essere preceduto da un backup completo. Non un backup del solo database: file e database. Perche’ gli aggiornamenti plugin possono modificare file PHP, e un rollback richiede entrambi.
La strategia di backup che raccomandiamo segue il modello 3-2-1 adattato a WordPress:
- 3 copie dei dati: il sito live, il backup locale sul server, il backup remoto (S3, Backblaze B2, ecc.)
- 2 formati diversi: dump SQL per il database, archivio tar/zip per i file
- 1 copia off-site: almeno un backup remoto fuori dal server principale
Per il restore rapido in caso di rollback, il backup deve essere accessibile entro 5 minuti dal problema. Se usi un servizio di backup remoto, verifica i tempi di restore prima di averne bisogno davvero. Per approfondire, leggi la nostra guida al backup WordPress per agenzie.
Ambiente Staging per Test Pre-Produzione
Il staging environment e’ la tua rete di sicurezza. Prima di applicare qualsiasi aggiornamento in produzione, lo testi in staging. Questo e’ particolarmente critico per:
- Siti e-commerce (WooCommerce): un aggiornamento che rompe il checkout costa vendite ogni minuto
- Siti della Pubblica Amministrazione: downtime non accettabile durante orari di ufficio
- Siti con plugin custom: dove la compatibilita’ non e’ garantita dagli sviluppatori
- Siti con traffico elevato: dove anche 10 minuti di errori 500 sono visibili nei log e nei report
Configurazione Staging con WP-CLI
# Creare ambiente staging da produzione
# 1. Duplica il database
wp db export prod-dump.sql --path=/var/www/sito-prod
wp db import prod-dump.sql --path=/var/www/sito-staging
# 2. Aggiorna URL nel database di staging
wp search-replace 'https://cliente.it' 'https://staging.cliente.it' \
--path=/var/www/sito-staging
# 3. Copia i file (esclusi cache e upload temporanei)
rsync -av --exclude='cache/' --exclude='uploads/temp/' \
/var/www/sito-prod/ /var/www/sito-staging/
# 4. Applica aggiornamenti in staging
wp core update --path=/var/www/sito-staging
wp plugin update --all --path=/var/www/sito-staging
wp theme update --all --path=/var/www/sito-staging
# 5. Smoke test in staging
curl -s -o /dev/null -w "%{http_code}" https://staging.cliente.it/
wp plugin status --path=/var/www/sito-staging
Se tutto passa in staging senza errori, puoi procedere in produzione con sicurezza. Se qualcosa rompe, hai risparmiato ore di debug e un ticket urgente del cliente.
Automazione Avanzata con API
Per agenzie che gestiscono piu’ di 20 siti, l’automazione manuale con script bash non e’ sufficiente. Serve un sistema che:
- Monitora continuamente gli aggiornamenti disponibili
- Applica regole per sito (es. “aggiorna plugin X solo dopo aver testato”, “non aggiornare il core sul sito del cliente Y senza approvazione”)
- Esegue backup automatici prima di ogni operazione
- Notifica il team in caso di errore
- Genera report mensili per i clienti
AgencyPilot fa tutto questo tramite API. Un esempio di chiamata per verificare lo stato aggiornamenti di tutti i siti:
# Verifica aggiornamenti disponibili su tutti i siti
curl -s -H "Authorization: Bearer $API_TOKEN" \
"https://api.agencypilot.it/v1/sites/updates" | python3 -c "
import json, sys
data = json.load(sys.stdin)
for site in data:
updates = site.get('updates', {})
core = 'core' if updates.get('core') else '-'
plugins = len(updates.get('plugins', []))
themes = len(updates.get('themes', []))
print(f\"{site['domain']:30s} core={core} plugins={plugins} themes={themes}\")
"
Con questo output puoi decidere dove intervenire prima, invece di controllare ogni wp-admin manualmente.
WordPress Maintenance Mode durante gli Aggiornamenti
Per siti critici, attivare la maintenance mode durante l’aggiornamento evita che gli utenti vedano errori transitori. WordPress ha una funzione nativa, ma e’ meglio gestirla esplicitamente:
// functions.php - Maintenance mode controllato
function agencypilot_maintenance_mode() {
if (current_user_can('manage_options')) return;
wp_die(
'<h1>Manutenzione in corso</h1><p>Torneremo online a breve.</p>',
'Manutenzione',
array('response' => 503)
);
}
// Attiva solo durante aggiornamenti programmati
if (get_option('agencypilot_maintenance_active')) {
add_action('get_header', 'agencypilot_maintenance_mode');
}
Per siti con CDN o cache, ricorda di purgare la cache dopo aver disattivato la maintenance mode, altrimenti gli utenti vedranno ancora la pagina di manutenzione.
Gestire Aggiornamenti Plugin Abbandonati
Un problema ricorrente nelle agenzie: plugin installati anni fa che non ricevono piu’ aggiornamenti dallo sviluppatore. Secondo i dati di WPScan, oltre il 50% delle vulnerabilita’ WordPress deriva da plugin non aggiornati o abbandonati.
La strategia che applichiamo:
- Audit periodico: ogni 3 mesi, controlla tutti i siti per plugin non aggiornati da oltre 12 mesi
- Valutazione alternativa: cerca plugin moderni che fanno la stessa funzione, con sviluppatore attivo
- Piano di migrazione: se il plugin e’ critico, pianifica la sostituzione in finestra di basso traffico
- Isolamento: se non puoi sostituirlo subito, disabilitalo sui siti dove non serve
AgencyPilot segnala automaticamente i plugin senza aggiornamenti da oltre 6 mesi nel dashboard, cosi’ il team puo’ pianificare la migrazione senza urgenza.
Monitoraggio Post-Aggiornamento
Dopo aver applicato gli aggiornamenti, il lavoro non e’ finito. Serve verificare che tutto funzioni. Un sistema di automazione WordPress completo include:
Smoke Test Automatici
Pipeline di test minimi da eseguire dopo ogni aggiornamento:
| Test | Metodo | Soglia accettabile |
|---|---|---|
| Homepage raggiabile | HTTP 200 su URL principale | Status code 200 |
| Tempo risposta | Misurazione TTFB | Meno di 800ms |
| SSL valido | Verifica certificato | Data scadenza > 7 giorni |
| Pagina di contatto | HTTP 200 su /contatti/ | Status code 200 |
| Errori PHP | Scan error_log | Nessun fatal error nuovo |
| WooCommerce (se presente) | HTTP 200 su /carrello/ | Status code 200 |
Uptime Monitoring Continuo
Dopo un aggiornamento che introduce un bug latente (es. errore solo al checkout, non in homepage), l’uptime monitoring rileva il problema prima del cliente. AgencyPilot monitora ogni sito ogni 60 secondi e notifica su Discord o email in caso di anomalia.
Report di Aggiornamento per il Cliente
Il cliente non vede cosa succede dietro le quinte, ma apprezza un report chiaro. Ogni ciclo di aggiornamenti dovrebbe generare un report con:
- Elenco siti aggiornati
- Versioni: da quale a quale (core, plugin, temi)
- Stato post-aggiornamento (OK / attenzione / errore)
- Tempo impiegato
- Prossimi passi consigliati
Questo report costruisce fiducia e giustifica il costo della manutenzione. Nella nostra esperienza, i clienti che ricevono report mensili dettagliati rinnovano il contratto di manutenzione al 92%, contro il 64% di quelli senza report.
Errore Comune: Aggiornare Tutto in Un Colpo
Il pulsante “Aggiorna tutto” e’ la tentazione piu’ pericolosa di wp-admin. Quando aggiorni 20 plugin contemporaneamente e qualcosa si rompe, non sai quale plugin ha causato il problema. Il debug diventa un’operazione di eliminazione che puo’ richiedere ore.
Invece:
- Aggiorna il core WordPress per primo, verifica
- Aggiorna i plugin di sicurezza (Wordfence, iThemes Security) per secondi
- Aggiorna i plugin di performance (cache, ottimizzazione) per terzi
- Aggiorna i plugin funzionali (form, SEO, analytics) per quarti
- Aggiorna il tema per ultimo
Se qualcosa si rompe dopo il passo 3, sai che il colpevole e’ tra i plugin di performance. Il tempo di debug si riduce da ore a minuti.
FAQ: Aggiornamenti WordPress Multi-Sito
Quanto spesso dovrei aggiornare i siti WordPress dei clienti?
Il core WordPress va aggiornato non appena esce una nuova release, soprattutto se contiene fix di sicurezza. I plugin con fix di sicurezza vanno aggiornati immediatamente. Gli aggiornamenti funzionali (nuove feature, miglioramenti UI) possono essere pianificati nel ciclo di manutenzione mensile.
Cosa fare se un aggiornamento rompe il sito?
Ripristina immediatamente il backup pre-aggiornamento. Se non hai un backup recente, usa WP-CLI per fare il rollback del singolo plugin: wp plugin rollback nome-plugin --version=1.2.3. Verifica poi la causa del conflitto in staging prima di riprovare.
Val la pena usare un plugin di gestione multi-sito?
Se gestisci meno di 5 siti semplici, l’accesso manuale ai singoli wp-admin e’ sufficiente. Oltre 5 siti, o con siti complessi (e-commerce, PA, custom plugin), un sistema centralizzato come AgencyPilot ripaga l’investimento in tempo risparmiato gia’ dal primo mese.
Gli aggiornamenti automatici di WordPress sono sicuri?
WordPress ha aggiornamenti automatici per le release minori del core (security). Per i plugin, gli auto-updates sono disponibili dal 2021 ma raccomandiamo di attivarli solo per plugin specifici su siti non critici, dove un eventuale problema e’ gestibile. Per siti in produzione critici, il controllo manuale resta preferibile.
Quanto costa la gestione aggiornamenti a un’agenzia?
Il costo dipende dal numero di siti, complessita’ e livello di servizio. Per un riferimento, consulta la nostra guida alle tariffe di manutenzione WordPress 2026. In media, un sito gestito con aggiornamenti mensili e monitoraggio parte da 30-50 EUR al mese.