Cambiare CMS è un’operazione delicata. Un errore può costare mesi di SEO e contenuti persi. Ecco come fare migrazioni pulite e sicure.
Anatomia di una Migrazione
# Elementi da migrare:
┌─────────────────────────────────────────────────────┐
│ CONTENUTI │
│ ├── Post/Articoli/Pagine │
│ ├── Media (immagini, PDF, video) │
│ ├── Metadati (SEO title, description) │
│ └── Relazioni (categorie, tag, autori) │
├─────────────────────────────────────────────────────┤
│ STRUTTURA │
│ ├── URL (redirect 301 obbligatori!) │
│ ├── Menu/navigazione │
│ └── Tassonomie │
├─────────────────────────────────────────────────────┤
│ UTENTI │
│ ├── Account e ruoli │
│ └── (Password NON migrabili - reset necessario) │
└─────────────────────────────────────────────────────┘
1. Da Joomla a WordPress
Metodo WP-CLI + Plugin
# Step 1: Export da Joomla
# Usa J2XML o esporta manualmente le tabelle:
# - #__content (articoli)
# - #__categories
# - #__menu
# - #__users
# Step 2: Installa WordPress pulito
wp core download
wp core config --dbname=newsite --dbuser=root --dbpass=xxx
wp core install --url=example.com --title="Sito" --admin_user=admin
# Step 3: Usa plugin FG Joomla to WordPress (gratuito)
wp plugin install fg-joomla-to-wordpress --activate
# Step 4: Configura connessione al DB Joomla
# Da admin: Tools → Import → Joomla (FG)
# Inserisci credenziali DB Joomla (può essere remoto)
# Step 5: Importa
# Il plugin migra: articoli, categorie, immagini, utenti
Mapping URL Joomla → WordPress
# URL Joomla tipici:
/index.php/categoria/123-titolo-articolo
/component/content/article/123
# URL WordPress:
/categoria/titolo-articolo/
# Redirect con plugin Redirection o .htaccess:
RewriteEngine On
RewriteRule ^index\.php/(.*)$ /$1 [R=301,L]
RewriteRule ^component/content/article/(\d+) /articolo-$1/ [R=301,L]
2. Da Drupal a WordPress
# Drupal ha struttura più complessa - migrare a mano o con plugin
# Opzione A: FG Drupal to WordPress (premium per Drupal 8+)
wp plugin install fg-drupal-to-wordpress --activate
# Opzione B: Export XML + trasformazione
# 1. Drupal: drush views-data-export
# 2. Trasforma CSV/XML in formato WP
# 3. wp import file.xml
# Opzione C: Database diretto (per esperti)
-- Query per estrarre nodi da Drupal 7
SELECT
n.nid,
n.title,
n.created,
b.body_value as content
FROM node n
JOIN field_data_body b ON n.nid = b.entity_id
WHERE n.type = 'article';
Attenzione: Field System Drupal
# Drupal usa campi personalizzati ovunque:
# - field_data_body
# - field_data_image
# - field_data_xxx (per ogni campo)
# WordPress usa:
# - wp_posts.post_content
# - wp_postmeta per custom fields
# Serve mapping personalizzato per ogni content type!
3. Da Wix/Squarespace a WordPress
# Piattaforme chiuse = export limitato
# Wix:
# 1. Esporta blog in RSS: tuosito.wixsite.com/blog-feed.xml
# 2. Tools → Import → RSS in WordPress
# ⚠️ Solo post blog, no pagine!
# Squarespace:
# 1. Settings → Advanced → Import/Export → Export
# 2. Scarica XML
# 3. wp import squarespace-export.xml --authors=create
# Per entrambi:
# - Immagini NON esportate (hosted su loro CDN)
# - Serve download manuale o scraping
Script Download Immagini
#!/bin/bash
# Scarica immagini da URL nel contenuto
# Estrai URL immagini dal database
wp db query "SELECT post_content FROM wp_posts" | \
grep -oE 'https?://[^"]+\.(jpg|png|webp)' | \
sort -u > image-urls.txt
# Scarica in bulk
mkdir -p wp-content/uploads/migrated
cd wp-content/uploads/migrated
xargs -n 1 curl -O < ../../../image-urls.txt
# Aggiorna URL nel database
wp search-replace 'https://static.wixstatic.com' \
'/wp-content/uploads/migrated' --dry-run
4. DA WordPress ad Altro
Headless / Static Site Generator
# WordPress → Markdown (per Hugo, Gatsby, 11ty)
# Plugin: WP Static HTML Output
# Oppure script custom:
wp post list --format=ids | while read id; do
title=$(wp post get $id --field=post_title)
slug=$(wp post get $id --field=post_name)
content=$(wp post get $id --field=post_content)
date=$(wp post get $id --field=post_date)
# Crea file Markdown
cat > content/posts/$slug.md << EOF
---
title: "$title"
date: $date
---
$content
EOF
done
WordPress → Shopify (solo blog)
# 1. Export WordPress
wp export --post_type=post --output=blog.xml
# 2. Converti in CSV per Shopify
# Tool: https://www.yourtrove.com/blog-importer
# 3. Import in Shopify Admin → Online Store → Blog posts
# ⚠️ URL cambieranno! Pianifica redirect 301
5. Redirect 301: Checklist Critica
# PRIMA della migrazione:
1. Crawla tutto il sito vecchio (Screaming Frog)
2. Esporta lista URL completa
3. Mappa vecchio → nuovo per ogni URL
4. Prepara file redirect
# Formato redirect (htaccess)
Redirect 301 /vecchio-url/ /nuovo-url/
Redirect 301 /categoria/titolo.html /categoria/titolo/
# O con plugin Redirection:
# Importa CSV con colonne: source, target, type
# DOPO la migrazione:
1. Testa TUTTI i redirect (tool: httpstatus.io)
2. Monitora 404 in Search Console
3. Aggiungi redirect mancanti
# ⚠️ Senza redirect perdi TUTTO il ranking SEO!
6. Checklist Pre-Migrazione
PRIMA:
□ Backup completo sito origine
□ Lista completa URL (crawl)
□ Export contenuti verificato
□ Mapping URL vecchio → nuovo
□ Piano redirect 301
□ Analisi SEO baseline (ranking, traffic)
□ Lista form/funzionalità da replicare
DURANTE:
□ Import in ambiente staging
□ Verifica contenuti importati
□ Test tutti i link interni
□ Verifica immagini
□ Test form e funzionalità
□ Test redirect (sample)
DOPO:
□ Monitor 404 Search Console
□ Submit sitemap aggiornata
□ Verifica indicizzazione
□ Monitor traffico (confronto)
□ Fix redirect mancanti
Tempistiche Realistiche
Tipo Migrazione Tempo Stimato
─────────────────────────────────────────────────
Sito vetrina (10-20 pagine) 1-2 giorni
Blog (100 articoli) 2-3 giorni
E-commerce (500 prodotti) 1-2 settimane
Portale enterprise 1-2 mesi
Fattori che aumentano tempo:
+ Custom post types complessi
+ Multilingua
+ Membership/utenti
+ Integrazioni esterne
+ Pulizia contenuti necessaria
Devi migrare il tuo sito? Gestiamo migrazioni CMS complete con zero downtime e preservazione SEO. Contattaci per una valutazione gratuita.