Come modificare i permalink di WordPress mantenendo like, retweet e +1

Scritto da Tiziano Fogliata
Aggiornato il

Dopo una modifica ai permalink di un sito WordPress non è sufficiente impostare i redirect 301. Senza gli opportuni accorgimenti dal tuo sito spariranno anche tutte le condivisioni social effettuate in passato. Ecco come evitarlo.

Durante il ciclo di vita di un sito Web non è infrequente la necessità di dover cambiare la struttura degli URL delle varie pagine. Si tratta di una procedura in alcuni casi obbligata e in altri facoltativa ma che presenta comunque alcuni rischi, soprattutto se valutata dal punto di vista dei motori di ricerca.

Cambiare tutti gli URL delle pagine, in buona sostanza, è come spostare fisicamente quelle pagine in una nuova posizione. E’ quindi buona norma informare il mondo esterno di questo spostamento. La prassi e il buon senso suggeriscono di adottare il cosiddetto redirect di tipo 301 (quello permanente), per informare i motori di ricerca che una pagina non è più disponibile al vecchio URL ma è possibile recuperarla ad un nuovo URL.

Nel mondo dei blog è consuetudine definire gli URL delle pagine dei singoli articoli con il termine permalink. All’interno dell’interfaccia di amministrazione di WordPress infatti, nella sezione relativa alle impostazioni è presente appunto una pagina riservata alla gestione dei permalink.

La struttura dei permalink in WordPress

Attraverso le impostazioni presenti in questa pagina è possibile cambiare la struttura dei permalink dei post su WordPress.

Ora, a parte le considerazioni logiche, pratiche e filosofiche dietro questa scelta, immaginiamo di voler cambiare la struttura dei permalink di un sito WordPress passando dallo schema http://www.pippo.it/aaaa/mm/gg/titolo-post/ allo schema http://www.pippo.it/titolo-post/.

In questo esempio le lettere aaaa si riferiscono all’anno di pubblicazione del post (espresso in 4 cifre), mm al mese di pubblicazione e gg al giorno di pubblicazione.

Per effettuare il cambio è sufficiente selezionare l’opzione “Nome articolo” all’interno della pagina dei Permalink di WordPress e cliccare sul pulsante “Salva le modifiche”. Salvo intoppi particolari, i nuovi permalink dovrebbero essere attivi.

Ora però è necessario impostare i reindirizzamenti di tipo 301 per fare in modo che i motori di ricerca vengano indirizzati ai nuovi URL e che i backlink ai vecchi post non restituiscano un errore 404.

Per fare ciò è sufficiente una semplice regola da inserire nel file .htaccess del proprio sito o, meglio ancora, nel file di configurazione di Apache se potete farlo.

In base all’esempio sopra riporato, la regola è la seguente:

RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ http://www.pippo.it/$4

L’argomento principale di questo post comunque, non è tanto la modifica dei permalink, o le implicazioni di tale operazione da un punto di vista SEO, ma il loro impatto sul conteggio dei like, dei retweet e dei Google +1 ricevuti in passato dai vecchi URL.

Se infatti hai eseguito un cambio della struttura dei permalink e sul tuo sito adottavi (e adotti tuttora) i vari plugin sociali che mostrano il numero di like, di retweet e di +1 ricevuti dai vari articoli, scoprirai a malincuore che ora tutti quei contatori sono a zero, come se nessuno avesse mai condiviso alcuno dei tuoi articoli.

Se nessuno hai mai effettivamente condiviso un tuo post, ovviamente non sorge alcun problema ;)

Se invece i vecchi post potevano vantare un elevato numero di condivisioni, è sicuramente un peccato perderle. Per evitare questo però esiste una soluzione che non è nemmeno tanto complicata da adottare.

Prendendo spunto da questo articolo ho modificato lo script suggerito, per adattarlo alla mia situazione. Il codice ho scelto di inserirlo nel file functions.php del tema di WordPress utilizzato. Personalmente preferisco inserire le funzioni in questo file, piuttosto che all’interno dei file del tema stesso (come single.php, index.php e così via). Tale approccio permette infatti un maggior ordine ed evita di dover inserire lo stesso codice in diversi file, diminuendo di conseguenza anche i potenziali errori in caso di modifiche.

Lo scopo di questa funzione è quello di passare ai vari social plugin il vecchio URL per gli articoli inseriti prima del cambio dei permalink ed il nuovo URL per quelli inseriti successivamente. Questo permetterà quindi di non perdere le informazioni sulle condivisioni social che si sono verificate in passato.

Ecco la funzione:

function social_sharing() {
  global $post;
  $url_change_date = strtotime("1/7/2013");
  $post_date = strtotime(get_the_date('m/d/Y'));

  $sharing_urlgp = get_permalink();
  $sharing_url = get_permalink();

  if ($post_date < $url_change_date ) {
    $url_date_prefix = "/" . date("Y", $post_date) .
                       "/" . date("m", $post_date) .
                       "/" . date("d", $post_date);

    $sharing_url = str_replace("://www.pippo.it",
                               "://www.pippo.it" . $url_date_prefix,
                               $sharing_url);
  } ?>
<div class="tweetshare"><a href="https://twitter.com/share" class="twitter-share-button" data-url="<?php echo $sharing_url; ?>" data-via="tixx" data-lang="it" data-related="utente_twitter">Tweet</a></div>
<div class="fb-like" data-href="<?php echo $sharing_url; ?>" data-send="true" data-layout="button_count" data-width="180" data-show-faces="false"></div>
<div class="g-plusone" data-size="medium" data-href="<?php echo $sharing_url; ?>"></div>
<?php }

Ti basterà poi richiamare questa funzione all’interno del tuo template, usando il codice:
<?php social_sharing(); ?>
All’interno della funzione ci sono alcune impostazioni che devi modificare per adattarle alla tua situazione.

Nella riga

$url_change_date = strtotime("1/7/2013");

Dovrai inserire la data nella quale hai effettuato il cambio di permalink, in formato inglese, quindi mese/giorno/anno.

Al posto di www.pippo.it dovrai poi ovviamente inserire il nome del tuo dominio.

Al posto di utente_twitter dovrai invece scrivere il nome del tuo account Twitter.

Ricordati poi di inserire all’interno del tuo tema i codici per richiamare i JavaScript relativi a Facebook, Twitter e Google +1, altrimenti questi pulsanti non funzioneranno.

Sottolineo inoltre di valutare bene se è il caso o meno di modificare i permalink del tuo sito, dato che non è sicuramente un’operazione da prendere alla leggera.

AGGIORNAMENTO: da alcuni mesi è disponibile un nuovo plugin chiamato Social Warfare che, tra le varie interessanti funzioni, ne possiede una chiamata “Share Count Recovery” che permette di recuperare il conteggio delle condivisioni social dei vari post in caso di modifica della struttura dei permalink o di passaggio da HTTP a HTTPS. Io lo utilizzo e funziona alla grande, non semplicemente per questa funzione :)

Tra l’altro ho avuto necessità di contattare il supporto di Social Warfare in un paio di occasioni e mi hanno sempre risposto in tempi rapidissimi, in un caso anche apportando delle correzioni al plugin nel giro di pochi giorni.

Tiziano Fogliata

Mi chiamo Tiziano Fogliata e mi occupo di consulenza e formazione.
Aiuto aziende e professionisti a sfruttare strumenti come WordPress, l'email marketing e la marketing automation per comunicare, trovare nuovi clienti e far crescere la propria attività. Autore di due libri su WordPress editi da Hoepli. Continua…

Altri articoli che ti suggerisco…

Nessun articolo correlato

78 commenti su “Come modificare i permalink di WordPress mantenendo like, retweet e +1”

    • In questo caso è possibile strutturare gli URL per la condivisione inserendo il vecchio dominio al posto del nuovo. Tieni presente però che tutte le condivisioni effettuate con i pulsanti così configurati verranno effettuate con il vecchio URL.

      Rispondi
      • Ciao, sto provando ad utilizzare la funzione da te indicata e nel mio caso devo modificare l’url da blog.miodominio.com/home/ a miodominio.com e i permalink erano postati come nel tuo articolo, ho provato a modificare nel seguente modo la funzione

        $sharing_url = str_replace(“://blog.miodominio.com/home/”,”://miodominio.com” . $url_date_prefix,
        $sharing_url);

        Ma presumo che sto sbagliando qualcosa in quanto non funziona …

        Rispondi
  1. Ciao! Interessante
    Come faccio a mantenere le condivisioni passando da wordpress.com a wordpress.org?
    Il dominio di primo livello è lo stesso quindi anche gli url dei post sono rimasti invariati ma non vedo le condivisioni

    Rispondi
  2. Ciao Tiziano, giuro che ci ho provato un po’, senza successo, prima di romperti le scatole. La modifica al permalink che vorrei fare è leggermente diversa. Vorrei trasformare la struttura dei miei link da http://www.miosito.it/post-name a http://www.miosito.it/category/post-name. La modifica del permalink in Worpress è ok, ma poi non so come scrivere la stringa di redirect per il file htacess e non so come modificare il tuo script php per il mio caso. Sarai ricompensato. Una cassa di birra? :-)

    Rispondi
      • Grazie della risposta. Voglio fare questa modifica perchè devo nascondere ai motori una determinata categoria, e quindi nel robots.txt dovrò mettere l’istruzione Disallow: /mia-categoria e quindi ho la necessità che tutti i post di ‘mia-categoria’ contengano ‘mia-categoria’ nell’url. Per quel che riguarda il redirect… e già… hai ragione, farò un redirect puntuale, tanto per ora gli articoli non sono tanti (una 30ina). Invece per modificare il php per mantenere like, pensi sia possibile sistemare il tuo script per le mie esigenze? Grazie per la pazienza :-)

        Rispondi
  3. Ciao e complimenti per l’articolo.

    Sono appena passato da /titolo-post a nome-categoria/titolo-post

    Immagino che lo script per il Social così com’è non vada bene, giusto?

    Inoltre volevo domandarti se è una questione di “immagine” semplicemente (Tanti mi piace da importanza) oppure anche lato “Social SEO” possa influire. Tieni presente che sto manualmente inserendo redirect 301 di tutti gli articoli.

    Grazi

    Massimo Prete

    Rispondi
  4. Ciao Tiziano,
    Articolo interessante.
    Una domanda: come si comporta il tutto nel momento in cui i pulsanti social condividono il contenuto? Vengono condivisi i nuovi URL o i vecchi?
    Come si può adattare il codice nel caso in cui il permalink resti lo stessi e cambi solo il dominio? (da aaaa.it/pagine-di-prova a bbbb.it/pagina-di-prova).
    Grazie molte.

    Rispondi
  5. ciao, io son passato dal permalink predefinito a quello con nome articolo solo che lo strumento di joost mi dice: “You don’t have to do any redirects, WordPress will do it for you.”
    Come posso fare?
    Peggio, attraverso il plugin WP Htaccess Editor che permette di modificare il file .htaccess appunto, mi dice che non è presente nessun file .htaccess

    Rispondi
  6. Passando dal permalink predefinito a quello con il solo nome, come dovrei modificare la funzione atta a mantenere la conta dei social network? Grazie mille!

    Rispondi
  7. uso wordpress 2.9 ho cambiato i permalink ed ho perso i like. ho ustato la funzione proposta prima in function.php e poi in page.php ed inserito nell’header ma nulla… continuo a non avere il conteggio dei mi piace

    Rispondi
  8. Ciao Tiziano!
    Volevo chiederti alcune precisazioni.
    Ho inserito questa funzione nel file function.php.
    Adesso però, qual è il file del template dove aggiungere il richiamo alla funzione? Perché ho provato a richiamare la funzione su single.php e mi aggiunge i pulsanti social ma sempre lasciandoli a 0.
    Grazie!

    Rispondi
  9. Ho scelto per errore “struttura personalizzata” e ora non riesco più a modificare i permalink dei miei articoli. come posso fare a risolvere?

    Rispondi
  10. Ciao, io ho adattato lo script da te creato in modo da adattarsi al mio cambio url, ovvero da shortlink del tipo http://www.blabla.it/?p=666 a http://www.blabla.it/articolobello e funziona tutto correttamente
    quello che mi pare strano è che la mia cliente proprietaria del sito sostiene che alcuni articoli hanno recuperato i like, mentre altri sono rimasti a zero… mi pare strano dato che lo script agisce su tutti gli articoli senza distinzioni, qualche idea sulla causa? Grazie
    se ti interessa posto qui il mio script modificato

    Rispondi
  11. Ciao Tiziano,
    io sono riuscito a cambiare la struttura facendo redirect con Advanced Redirect,
    l’unica cosa che non funziona più sono i feed! Hai qualche idea?

    Rispondi
  12. ciao Tiziano grazie per questo articoli scritto così chiaramente… stavo proprio cercando qualcosa che facesse al caso mio perchè ho deciso di cambiare i permalink. ho tre domande:
    1) Non ho capito DOVE devo inserire il codice nel file Function… in che posizione insomma…
    2) quando dici Ti basterà poi richiamare questa funzione all’interno del tuo template,…
    in quale file precisamente? ed in qual posizione?
    3) dici inoltre di inserire i codici per richiamare gli script dei network…COME? io ho un plugin per i bottini di fb twitter ecc.. non basta?
    grazie e scusa per la mia ignoranza :-)
    marni

    Rispondi
    • Ciao, scusa per il ritardo nella risposta. Dunque: nel file functions.php la funzione la puoi inserire più o meno dove vuoi, quello che è importante è inserire nel posto giusto il codice

      Però nel tuo caso, se usi un plugin dedicato cambia tutto. Dato che il procedimento che ho indicato io vale solo nel caso in cui tu inserisca “a mano” il codice di condivisione di ogni singolo social network.

      Se utilizzi un plugin di condivisione è necessario intervenire sulla funzione utilizzata da quel plugin.

      Rispondi
  13. Ciao Tiziano,

    complimenti per l’articolo.

    Vorrei sapere se è possibile adottare una soluzione simile con gli articoli di Joomla, quindi mantenere i like, twitter e plus dopo aver cambiato le url.

    Grazie.

    Rispondi
  14. Ciao,
    ottimo articolo… Secondo te è possibile recuperare i like persi in seguito ad una migrazione da un sito non wordpress a uno wordpress? I permalink del primo hanno come base dopo il dominio /notizia/numero articolo, ora questa categoria non esiste più e il sito nuovo ha nomedomnio.it/postname.

    Grazie in anticipo per l’attenzione
    Giulio

    Rispondi
    • Ciao Giulio, teoricamente credo di sì, ma come prima cosa dovresti poter associare correttamente per ogni pagina il vecchio URL con quello nuovo. In questo modo puoi pensare di sommare i like ricevuti dal vecchio URL con quelli che riceverai con il nuovo URL.

      Rispondi
      • Ciao e grazie per la celere risposta !!
        Al momento per non avere un 404 ho reindirizzato gli articoli i post di Facebook agli articoli sul blog con un redirect 301.
        Visto la struttura del vecchio permalink è praticamente dominio.it/categoria/post pensavo di rinominare gli slug degli articoli (annullando di fatto il redirect) e di utilizzare il codice che hai postato non per data ma per per categoria. Che ne pensi ?
        Se credi sia una buona idea mi suggeriresti tale modifica
        Grazie
        Giulio

        Rispondi
          • Scusa se non ti ho risposto prima ma è stata una girornatina…..
            Quello che intendevo chiederti è questo: i miei vecchi permalink hanno un formato categoria tipo nomedominio.it/%category%/%postname%/ pensi si possa modificare il codice che riporti nell’articolo per riallineare i like ad un permalink nomedominio.it/postname ?

            Grazie
            Giulio

  15. Ciao e complimenti per l’articolo e per la tua passione molto ammirevole. Volevo chiederti una cosa, un problema che non so se si possa risolvere, e sapere cosa tu ne pensi. Ho un blog creato su altervista che supporta wordpress sul quale genero articoli per la condivisione sul social. I permalink che genera il blog di dafault sono del tipo nome.altervista.org/blog/nome articolo. Praticamente ho comprato poi un dominio del tipo blog.nome.it sul quale ho eseguito il redirect al sito con dominio altervista che funziona. La mia domanda e’: siccome ho notato che se condivido un articolo sul social si prende sempre il permalink di default, esiste un modo che invece si potesse prendere permalink blog.nome.it quando appare sul social? T ringrazio per la disponibilita’ e scusa il disturbo

    Rispondi
    • Ciao, da quanto ho capito il dominio che hai registrato reindirizza al tuo blog su altervista, ma il dominio effettivo del sito è rimasto quello di altervista. O mi sbaglio?
      In questo caso è normale che i permalink siano ancora con il dominio di altervista.

      Rispondi

Lascia un commento