Linee guida per spostare un blog da WordPress a WP MU

Stampa / Print
Recentemente, ho spostato TechLog da un hosting gratuito al dominio Technoburger.net, e ne ho approfittato per passare da WordPress a WordPress MU, la versione multiblog che sta alla base del dominio WordPress.com. Riporto qui, sotto forma di appunti, i passi che ho seguito… e i problemi incontrati.

Premessa: uno spostamento “difficoltoso”

Innanzi tutto, perché lo spostamento non è stato semplice? Se avessi voluto semplicemente spostare l’installazione di WordPress da un dominio all’altro, sarebbero stati sufficienti quattro semplici passaggi:

1. Copiare i file di WordPress dal dominio di partenza a quello di destinazione, modificando il file di configurazione e il database per adattarli ai parametri del nuovo dominio (leggi “Wordpress: spostare il blog dal server remoto al computer locale” – l’esempio si può facilmente riadattare anche nel caso la destinazione sia un altro server remoto);
2. Implementare un semplice redirect 301 nel dominio di partenza: i Permalink non cambieranno, e basterà modificare solo il dominio delle URL.
3. Usare, nel nuovo blog, le stesse impostazioni di quello vecchio: mi riferisco a tutto ciò che trovi sotto Settings. Usa le stesse impostazioni per tagline, numero di post da visualizzare in ogni pagina (è importante, per non incorrere in errori di tipo 404), eccetera.
4. Modificare i link interni: non solo quelli che hai inserito nel template o negli widget, ma anche quelli interni ai post (per lo meno, nei tuoi post più importanti) e alle pagine statiche.

Invece, non solo volevo cambiare solo il dominio, ma anche CMS utilizzato, passando da WordPress a WordPress MU. Questo perché volevo avere la possibilità di aprire più blog (come sottodomini), con una sola installazione di WordPress da gestire. Degli esempi? Il blog degli SMS Gratis, il blog del mio amico Santo, oppure il mio blog personale (in inglese).

Impensabile, quindi, clonare il database del vecchio blog, perché usava una struttura diversa da quella di WordPress MU. Piuttosto, mi sono dovuto affidare agli strumenti di importazione / esportazione di WordPress… che hanno dato alcuni problemi, come vedrai in seguito. 😉

(i punti 3 e 4, invece, non hanno dato problemi)
Primo passo: importazione tramite file WXR

Vai nella bacheca del vecchio blog, su Manage > Export, per esportare il tuo vecchio blog in un file WXR, da importare, successivamente, tramite lo strumento Manage > Import del nuovo blog. In un mondo ideale, questo sarebbe stato sufficiente. Purtroppo non viviamo in un mondo ideale, e ho incontrato alcune difficoltà.
1° Problema: lo strumento di esportazione non funziona in presenza di molti articoli

Questa, più che una limitazione di WordPress, è una limitazione che dipende dal server su cui fai girare lo script in PHP. Infatti, se hai tanti post, il file WXR diventerà troppo grande, e la sua generazione verrà bloccata dal server. A me sono bastati 180 articoli per incorrere in questo problema.

Cosa fare quindi? Se hai un blog multi autore (come lo è TechLog / TechnoBurger) potresti avere la soluzione già pronta. Infatti il tool di esportazione permette di filtrare i post da esportare in base all’autore degli stessi… e il tool di importazione permette successivamente di riassegnare tutti i post importati a determinati utenti (che devi preventivamente ricreare). In questo modo, hai una speranza in più di ottenere file di esportazione più piccoli.

Ecco quindi gli step che ho seguito:

1. Su TechLog, ho creato i diversi file di esportazione, uno per ogni utente.
2. Su Technoburger, ho ricreato tutti gli autori presenti su TechLog;
3. Ho importato su Technoburger i diversi file di esportazione, riassegnandoli (rimappandoli) agli autori originali.

E se hai molti post, ma sul tuo blog scrivi solo tu? Il mio consiglio è di creare degli autori temporanei, e assegnare alcuni articoli a loro, finché il processo di esportazione non ti darà più errore. E come assegnare i post a questi autori? Se conosci MySQL, potresti farlo tramite phpmyadmin (ricordati di fare il backup del database, prima!), oppure manualmente, se non te la senti. 🙂

Comunque sia, ulteriori filtri di esportazione (ad esempio sulla data, e non solo sull’autore) avrebbero fatto parecchio comodo. Questa è una delle grandi limitazioni di WordPress da me riscontrate. 🙁
2° Problema: le categorie

L’importazione delle categorie non funziona perfettamente: la loro gerarchia viene persa. Prima di procedere, pertanto, ricostruiscila, editando le categorie una ad una, e riassegnandole alla categoria madre.

Un altro problema sono le url delle categorie: un’eventuale personalizzazione viene persa durante l’importazione. Questo è un problema che non puoi correggere immediatamente, in quanto con WordPress MU non puoi ridefinire le url per ogni categoria. 🙁 Dovrai tenerne conto, però, durante l’implementazione del redirect 301.
3° Problema: gli ID dei post, delle pagine e delle categorie

L’importazione del blog non preserva neanche gli ID delle pagine del tuo blog, che vengono ricreati ex-novo. Ciò rappresenterà un problema solo in 2 casi:

1. usavi il %postid% nel permalink dei tuoi articoli: in questo caso, non potrai fare un redirect del tipo “http://vecchio-blog.com/post-di-esempio-352/ -> http://nuovo-blog.com/post-di-esempio-352/“, in quanto nel nuovo blog il post di esempio non avrà più l’ID pari a 352. Ti consiglio di eliminare il %postid% dal permalink del nuovo blog su WordPress MU (tanto è inutile, se non addirittura dannoso). In questo modo lo script in PHP che scriverai per implementare il redirect sarà semplice:
1. Estrai il permalink dalla URL: ad esempio, da http://vecchio-blog.com/post-di-esempio-352/ ottieni post-di-esempio-352
2. Rimuovi l’ID numerico presente alla fine del permalink: passi da post-di-esempio-352 a post-di-esempio
3. Appendi il permalink così filtrato in coda al nuovo indirizzo, e fai il redirect: http://nuovo-blog.com/post-di-esempio/
2. hai inserito, nel tuo template in PHP di WordPress, delle condizioni basate sull’ID: in questo caso, prima di copiare il tuo template su WordPress MU, modificalo per adattarsi ai nuovi ID. Io, ad esempio, cambiavo l’attributo LANG in base all’appartenenza o meno dei post alla categoria “English Translations”. Il test lo eseguivo, appunto, sull’ID della categoria, che è cambiato in seguito all’importazione.

Secondo passo: implementare il redirect

In questo passo ho tenuto conto di tutte le considerazioni fatte finora. Inoltre, poiché su TechLog avevo già implementato, in passato, due redirect (in occasione di due modifiche alla struttura del permalink), ho voluto sbarazzarmi del Permalink Migration Plugin, e gestire anche le strutture passate (per non incorrere in un double redirect, che Google impiega più tempo a “digerire”).

Ho implementato il redirect tramite uno script in PHP, su TechLog (cioè, il blog di partenza); senza scendere troppo nel dettaglio (il mio è un caso piuttosto particolare, a causa dei redirect passati), ti mostro i passaggi fondamentali dell’algoritmo:

1. prendo il path della pagina corrente:
$path = $_SERVER[‘REQUEST_URI’];
Nella variabile $path verrà memorizzata la seconda parte della URL, senza dominio e sottodominio; ad esempio, /post-di-esempio-352/
2. rimuovo il trailing slash (se ci fai caso, negli indirizzi di Technoburger non è presente lo “/” alla fine dell’indirizzo:
if ($path!=”/”) $path = rtrim($path,”/”);
L’output di questa fase è /post-di-esempio-352
3. a questo punto compio delle “trasformazioni” su $path, ma solo se la pagina corrente è un post; infatti, per pagine statiche, categorie e tag la struttura delle url rimane inalterata, nel trasferimento.
Nel mio caso, ho compiuto tre tipi di trasformazioni (ricordi? tengo conto anche dei vecchi redirect):
* permalink con data: in un primo tempo, avevo usato i permalink di default di WordPress, cioè quelli che riportavano la data di pubblicazione. Con questa trasformazione passo da /2008/02/12/post-di-esempio a /post-di-esempio
* permalink con categoria: in un secondo tempo, avevo cambiato i permalink inserendo le categorie di appartenenza del post.
Con questa trasformazione passo da /categoria-esempio/post-di-esempio-234 a /post-di-esempio
In questo caso, rimuovo sia la categoria che il post id, lasciando solo il permalink;
* permalink con solo post id: accortomi che la categoria allungava troppo le url (usavo categorie gerarchiche), sono passato infine alla struttura /%postname%-%postid%/
Con questa trasformazione, passo da /post-di-esempio-234 a /post-di-esempio
4. Se sono sulle pagine delle categorie, compio ulteriori trasformazioni su $path, per risolvere quei problemi dovuti all’importazione delle stesse (problemi di cui avevo parlato prima);
5. Infine, faccio il redirect:
header(‘HTTP/1.1 301 Moved Permanently’);
header(“Location: http://technoburger.net”.$path);

Dove va inserito tutto questo codice? Nel file header.php del tuo tema, prima di ogni altro codice! 😉 Ti ricordo che prima del comando header (visto sopra) non puoi generare codice HTML (ad esempio, tramite echo), altrimenti otterresti l’errore “Cannot modify header information – headers already sent by“!
Passi finali

Innanzitutto, ho implementato, su Technoburger, un sistema di monitoraggio degli errori 404, per verificare che il redirect non contenesse bug, e per evitare di perdere visitatori e/o link in ingresso. Sostanzialmente, ogni volta che viene generato un errore, uno script mi avvisa per email indicandomi:

* la url che ha generato errore;
* il referer, cioè la pagina su cui è presente il link in ingresso “problematico”.

Inoltre, ho aggiunto Technoburger.net (e la sua sitemap) su Google Webmaster Tools, per aiutare un po’ Google nell’indicizzazione del nuovo dominio.

Infine, ho modificato il feed preesistente di Feedburner, in modo da fargli leggere il feed del nuovo blog, e rendere l’operazione di trasferimento del tutto trasparente ai lettori e ai motori di ricerca per blog (technorati e google blog search).
Aspetti da migliorare

Restano ancora due passaggi da fare:

* redirezionare qualunque feed: non solo quello di feedburner (cioè, quello principale del blog), ma anche i feed dei tag, delle categorie, dei commenti, etc…
* importare la lista di email di coloro che si sono sottoscritti ai commenti del blog.

Fonte: http://webcache.googleusercontent.com/search?q=cache:Btv90lT9kdsJ:blog.technoburger.net/da-wordpress-a-wp-mu+technoburger.net&cd=12&hl=it&ct=clnk&gl=it

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *