Migrare CMS: Da e Verso WordPress

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.