WordPress Multisite permette di gestire multipli siti da una singola installazione WordPress. Per un’agenzia web che gestisce 20, 50 o 100 siti clienti, questo significa un solo core da aggiornare, un solo set di plugin da manutenere e una sola infrastruttura da mettere in sicurezza. In questa guida spieghiamo come configurare WordPress Multisite per agenzie, con domini mappati, best practice di sicurezza WordPress e automazione dei flussi di lavoro.
Cos’è WordPress Multisite e Quando Usarlo per la Tua Agenzia
WordPress Multisite è una funzionalità nativa del core che permette di creare una rete di siti condividendo lo stesso ambiente. Ogni sito ha il proprio database (tabelle separate con prefisso univoco), i propri media, i propri temi attivi, ma condivide il core WordPress, i plugin uploadati e l’utente amministratore di rete.
Nella nostra esperienza con AgencyPilot, Multisite conviene quando:
- Gestisci 10+ siti con stack tecnologico simile (stessi plugin, stesso tema base)
- I siti condividono funzionalità comuni (e-commerce, membership, form)
- Vuoi centralizzare aggiornamenti, backup e monitoraggio
- Hai bisogno di onboarding rapido di nuovi clienti (creazione sito in minuti, non ore)
Non conviene invece quando i siti clienti hanno esigenze profondamente diverse (stack diversi, versioni PHP diverse, temi incompatibili) o quando un cliente ha bisogno di accesso amministrativo completo al server.
Requisiti Tecnici e Prerequisiti per Multisite
Prima di abilitare Multisite, verifica questi requisiti minimi:
| Requisito | Minimo | Consigliato |
|---|---|---|
| PHP | 8.1 | 8.3+ |
| MySQL/MariaDB | 5.7 / 10.3 | 8.0 / 10.11+ |
| RAM | 2 GB | 4 GB+ (dipende dal numero di siti) |
| Wildcard DNS | Necessario per sottodomini | – |
| SSL/TLS | Let’s Encrypt wildcard | Wildcard + autossl |
| Staging | Consigliato | Obbligatorio per agenzie |
Per un’infrastruttura di produzione, consigliamo di partire da un ambiente staging testato, poi migrare la configurazione su produzione.
Come Abilitare WordPress Multisite: Step by Step
1. Abilitare Multisite nel wp-config.php
Aggiungi questa riga al tuo wp-config.php prima della riga /* That's all, stop editing! */:
/* Multisite */
define( 'WP_ALLOW_MULTISITE', true );
Dopo aver salvato e ricaricato la pagina, vai su Strumenti → Configurazione rete nel pannello admin. WordPress ti guiderà attraverso due opzioni:
- Sottodomini:
sito1.agencypilot.it,sito2.agencypilot.it— richiede wildcard DNS - Sottodirectory:
agencypilot.it/sito1,agencypilot.it/sito2— non richiede configurazione DNS particolare
Per agenzie che gestiscono siti clienti, la modalità sottodomini con domain mapping è quasi sempre la scelta migliore: ogni cliente mantiene il proprio dominio (es. cliente1.it, cliente2.it) mappato su un sottodominio della rete.
2. Configurare wp-config.php e .htaccess
WordPress genererà le righe da aggiungere. Ecco la configurazione tipica per wp-config.php:
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', true );
define( 'DOMAIN_CURRENT_SITE', 'agencypilot.it' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );
Per Nginx (consigliato per performance), la configurazione del server block deve intercettare tutti i domini mappati:
server {
listen 80;
server_name agencypilot.it *.agencypilot.it;
root /var/www/agencypilot;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Per chi usa Apache, il file .htaccess generato da WordPress è sufficiente. Assicurati che AllowOverride All sia attivo nella configurazione del virtual host.
3. Domain Mapping con Mercury o Plugin
Dalla versione 4.5+ di WordPress, il domain mapping è nativo. Vai su Siti della rete → Modifica → Impostazioni e inserisci il dominio del cliente nel campo Siteurl e Home.
Per gestire 50+ domini in modo automatizzato, usiamo WP-CLI:
# Creare un nuovo sito nella rete
wp site create --slug=cliente-xyz --title="Cliente XYZ" --email=admin@agencypilot.it
# Mappare un dominio personalizzato
wp option update siteurl https://cliente-xyz.it --url=cliente-xyz.agencypilot.it
wp option update home https://cliente-xyz.it --url=cliente-xyz.agencypilot.it
# Installare e attivare plugin su un singolo sito
wp plugin activate woocommerce --url=cliente-xyz.it
Gestione Plugin e Temi in Ambiente Multisite
In Multisite, i plugin e i temi sono installati a livello di rete (network admin), ma l’attivazione può essere per-sito. Questo è uno dei vantaggi principali: installi un plugin una volta e lo attivi solo dove serve.
Strategia Plugin per Agenzie
Noi usiamo questa classificazione per ogni plugin installato:
| Tipo | Esempio | Attivazione |
|---|---|---|
| Network obbligatorio | Wordfence, WP Rocket | Network attivo |
| Network opzionale | WooCommerce, Elementor | Network attivo, disattivabile per sito |
| Per-sito | Form plugin, SEO specifici | Attivazione manuale per sito |
Per automatizzare l’attivazione selettiva, usiamo uno script bash che parte dal nostro sistema di automazione:
#!/bin/bash
# Attiva plugin standard su un nuovo sito cliente
SITE_URL=$1
wp plugin activate wordfence --url=$SITE_URL --network
wp plugin activate wp-rocket --url=$SITE_URL
wp plugin activate elementor --url=$SITE_URL
wp plugin activate seo-by-rank-math --url=$SITE_URL
echo "Plugin standard attivati per $SITE_URL"
Sicurezza WordPress Multisite: Proteggere la Rete
La sicurezza in Multisite ha una particolarità: una vulnerabilità in un sito può compromettere l’intera rete. Questo rende l’hardening ancora più critico.
Misure Obbligatorie per Multisite
- Isola i privilegi amministrativi: i clienti non dovrebbero mai avere accesso network admin. Crea ruoli personalizzati con
capabilitieslimitate. - Disabilita l’installazione di plugin/temi per i super admin dei singoli siti:
define('DISALLOW_FILE_MODS', true);a livello network. - SSL ovunque: ogni dominio mappato deve avere il suo certificato. Let’s Encrypt supporta wildcard e SAN certificates.
- Firewall a livello applicazione: Wordfence o Sucuri configurati a livello network, con regole propagate a tutti i siti.
- Backup separati per sito: ogni sito deve poter essere ripristinato indipendentemente. Usa il flag
--scope=blog:IDcon WP-CLI.
# Backup di un singolo sito nella rete
wp db export --url=cliente-xyz.it single-site-backup.sql
# Ripristino di un singolo sito
wp db import single-site-backup.sql --url=cliente-xyz.it
Performance WordPress Multisite: Core Web Vitals su Decine di Siti
La performance è la sfida più grande di Multisite: tutte le richieste passano dallo stesso core. Un plugin mal ottimizzato su un sito può rallentare l’intera rete.
Strategie di Cache per Multisite
La cache a livello oggetto (object cache) è fondamentale. Redis è la nostra scelta standard:
# wp-config.php
define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_MAXTTL', 3600 );
Per la cache a livello pagina, configuriamo Nginx FastCGI Cache con chiavi per-sito:
# Nginx FastCGI cache con chiave per-sito
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_path /var/cache/nginx levels=1:2
keys_zone=wordpress:100m inactive=60m max_size=1g;
Questo assicura che ogni dominio abbia la propria cache separata. Monitoriamo le Core Web Vitals di ogni sito con un dashboard centralizzato.
Database Optimization per Multisite
Ogni sito nella rete crea 12 tabelle (più quelle dei plugin). Con 50 siti, parliamo di 600+ tabelle. Alcune best practice:
- Usa MariaDB invece di MySQL per performance superiori su workload multi-tabella
- Configura
innodb_buffer_pool_sizeal 50-70% della RAM disponibile - Pulisci le tabelle
wp_sitemetaewp_blogsregolarmente con WP-CLI - Disabilita il cron di WordPress e usa un cron di sistema
# Disabilitare WP-Cron e usare system cron
define( 'DISABLE_WP_CRON', true );
# Crontab: esegui WP-Cron per ogni sito ogni 15 minuti
*/15 * * * * cd /var/www/agencypilot && wp cron event run --due-now --url=cliente1.agencypilot.it
*/15 * * * * cd /var/www/agencypilot && wp cron event run --due-now --url=cliente2.agencypilot.it
Automazione: Onboarding Nuovi Clienti in 5 Minuti
Il vantaggio più grande di Multisite per un’agenzia è la velocità di onboarding. Il nostro workflow standardizzato:
- Creazione sito:
wp site createcon slug e titolo cliente - Domain mapping: aggiornamento di
siteurlehome - Plugin standard: esecuzione dello script di attivazione plugin
- Tema base: attivazione del tema child personalizzato per il cliente
- Configurazione SSL: certificato Let’s Encrypt via Certbot con DNS challenge
- Configurazione SEO: importazione delle impostazioni SEO standard (Rank Math)
- Backup: aggiunta del sito al sistema di backup automatico
#!/bin/bash
# onboarding-cliente.sh - Onboarding completo nuovo cliente
# Uso: ./onboarding-cliente.sh "Nome Cliente" "cliente-dominio.it"
CLIENTE_NOME="$1"
CLIENTE_DOMAIN="$2"
SLUG=$(echo "$CLIENTE_DOMAIN" | sed 's/\./-/g' | cut -d'-' -f1)
echo "=== Onboarding $CLIENTE_NOME ($CLIENTE_DOMAIN) ==="
# 1. Creazione sito
wp site create --slug=$SLUG --title="$CLIENTE_NOME" --email=admin@agencypilot.it
# 2. Domain mapping
wp option update siteurl "https://$CLIENTE_DOMAIN" --url="${SLUG}.agencypilot.it"
wp option update home "https://$CLIENTE_DOMAIN" --url="${SLUG}.agencypilot.it"
# 3. Plugin standard
wp plugin activate wordfence wp-rocket elementor seo-by-rank-math --url="https://$CLIENTE_DOMAIN"
# 4. Tema child
wp theme activate agencypilot-child --url="https://$CLIENTE_DOMAIN"
# 5. SSL (Certbot)
sudo certbot certonly --webroot -w /var/www/agencypilot -d "$CLIENTE_DOMAIN"
# 6. Backup
wp backup create --url="https://$CLIENTE_DOMAIN"
echo "=== Onboarding completato per $CLIENTE_NOME ==="
echo "Sito disponibile: https://$CLIENTE_DOMAIN"
Con questo script, un nuovo cliente è operativo in meno di 5 minuti. Senza Multisite, lo stesso processo richiederebbe 30-45 minuti (installazione WordPress, configurazione database, installazione plugin, ecc.).
Monitoraggio Centralizzato della Rete
Gestire 50 siti richiede monitoring proattivo. Usiamo tre livelli di monitoraggio:
| Livello | Tool | Cosa monitora |
|---|---|---|
| Infrastruttura | Prometheus + Grafana | CPU, RAM, disk, database |
| Applicazione | UptimeRobot + Health Checks | HTTP status, response time per sito |
| Sicurezza | Wordfence Central | Malware, login attempts, firewall |
Per il monitoring delle performance, il comando WP-CLI seguente genera un report di stato di tutti i siti della rete:
#!/bin/bash
# report-rete.sh - Genera report stato rete
wp site list --field=url | while read -r url; do
if [ -n "$url" ]; then
echo "=== $url ==="
wp core verify-checksums --url="$url" 2>&1 || echo "CHECKSUM FAILED"
wp plugin list --status=update --url="$url" --format=table 2>&1
wp theme list --status=update --url="$url" --format=table 2>&1
fi
done
Questo report lo eseguiamo settimanalmente via automazione e i risultati vengono inviati su Discord.
WordPress Multisite vs ManageWP vs MainWP: Quando Scegliere Cosa
Multisite non è l’unica soluzione per gestire multipli siti. Esistono alternative come ManageWP, MainWP e AgencyPilot che funzionano senza Multisite, gestendo installazioni WordPress separate da un pannello centralizzato.
| Caratteristica | Multisite | ManageWP/MainWP |
|---|---|---|
| Installazioni separate | No (una sola) | Sì (una per sito) |
| Isolamento completo | Parziale | Completo |
| Onboarding | 5 min | 15-20 min |
| Plugin condivisi | Sì | No (installazione per sito) |
| Hosting | Un server | Multipli server possibili |
| Rischio blast radius | Alto (tutti insieme) | Basso (isolati) |
| Costo infrastruttura | Basso | Medio-alto |
La nostra raccomandazione: Multisite per siti simili con basso rischio (landing page, portfolio, blog aziendali), installazioni separate con pannello centralizzato per siti con esigenze diverse o clienti che richiedono isolamento completo.
FAQ: WordPress Multisite per Agenzie
Quanti siti posso gestire con WordPress Multisite?
Non c’è un limite tecnico nel codice. Nella nostra esperienza, fino a 100-150 siti su un server con 8 GB RAM e Redis configurato. Oltre, conviene separare la rete in cluster.
Posso usare plugin diversi su ogni sito?
Sì. I plugin sono installati a livello network ma l’attivazione è per-sito. Puoi attivare WooCommerce solo sui siti che ne hanno bisogno, lasciandolo disattivato sugli altri.
Cosa succede se un sito della rete viene hackerato?
Il rischio principale di Multisite è il blast radius: un attacco a un sito può compromettere l’intera rete. Per questo è fondamentale isolare i privilegi, disabilitare l’installazione di plugin per i singoli amministratori e mantenere backup per-sito ripristinabili indipendentemente.
WordPress Multisite supporta domini diversi?
Sì, con il domain mapping nativo dalla versione 4.5+. Ogni sito può avere il proprio dominio di secondo livello (es. cliente.it) mappato sulla rete.
Multisite influisce sulla SEO?
No, se configurato correttamente. Ogni sito ha il proprio sitemap.xml, il proprio robots.txt e i propri meta tag. Google tratta ogni dominio mappato come sito indipendente. Assicurati che ogni sito abbia le Core Web Vitals verdi.