Gestire siti WordPress WordPress

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

Tiziano Fogliata

Scritto da: Tiziano Fogliata

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.

Scegli di ricevere gratuitamente via email consigli utili per creare, gestire e migliorare il tuo sito WordPress

Questo campo serve per la convalida e dovrebbe essere lasciato inalterato.

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
    • E’ strano che tu abbia perso le condivisioni se l’URL dei post è rimasto praticamente identico. Ma su Wordpress.com usavi un dominio personalizzato?

      Rispondi
      • Si usavo un dominio di primo livello comprato su wordpress.com con l’upgrade.

        Il mio sito su wordpress.org non è ancora live, devo ancora eseguire il redirect. Forse una volta eseguito vedrò anche le condivisioni. Ora vedo che i permanent link dei miei vecchi post sono con un URL diverso da quello in wordpress.com

        Rispondi
        • Allora è quello il problema, le condivisioni sono legate al permalink dei post. Se sono diversi rispetto al passato, perdi le condivisioni. La soluzione è usare lo script riportato in questo articolo.

          Rispondi
          • Capito,grazie. I permalink hanno nome uguale, cambia solo la parte iniziale del dominio ex. permalink wordpress.com: http://thewebmate.com/2013/07/02/dal-chief-cont…epoca-digitale/

            Permalink wordpress.org: http://69.195.124.112/~thewebm8/2013/07/02/dal-chief-cont…epoca-digitale/

            Credo che una volta fatto il redirect saranno completamente uguali, o sbaglio?
            grazie

          • Esatto, se il permalink è identico manterrai il conteggio delle condivisioni.

          • ok il sito è live ma non vedo le condivisioni, se poi cerco di accedere ai post sui motori di ricerca non riesco e mi dice che c’è un internal server error…

          • I permalink li vedo ancora nel formato 69.195.124.112/~thewebm8/ . Probabilmente hai messo live il sito senza variare l’indirizzo del blog nelle impostazioni di WordPress.

          • Perfetto grazie mille. Modificati e ora funzionano e vedo anche le condivisioni.
            Tranne quelle di Twitter e Google+.. strano. Hai idea del perché?
            Grazie

          • Perfetto grazie! ti farò sapere,sto aspettando che il blog sia live. Buona domenica

  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
    • Perché vuoi fare una modifica del genere?
      Via htaccess non è possibile perché come fai ad impostare la categoria se il vecchio URL non conteneva tale informazione? Al limite potresti usare un plugin come http://wordpress.org/plugins/redirection/

      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
    • Diciamo che più che altro con questo script si evita di perdere il conteggio dei like e dei retweet a livello di “immagine”. Per il resto i redirect 301 sono fondamentali.

      Rispondi
      • te pareva :D
        Se ti capita di scoprire qualcosa di adatto fammi sapere. Anche via email ;)

        Comunque lo immaginavo anche perché non si tratta del classico category, ma proprio del nome della categoria.

        Grazie per la tempestiva risposta.

        Massimo

        Rispondi
  4. Ottimo post, volevo segnalare anche che per chi vuole cambiare permalink e non dover modificare l’htaccess, c’è questo plugin che espande la sezione Permalink e facilita la procedura di migrazione dai vecchi ai nuovi. Inoltre, consente di tenere vecchi permalink e di agire anche sulla pagina autore e su “category”. :)

    http://wordpress.org/plugins/advanced-permalinks/

    Rispondi
  5. Ciao, sono passato da www.pippo.it/xx a www.pippo.it, posso usare questa funzione per recuperare i like?
    grazie
    domenico

    Rispondi
  6. 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
  7. 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
    • Sì, passando dalla struttura di default ad una diversa WP si occupa automaticamente del redirect, ma su server Windows non puoi usare i file .htaccess

      Rispondi
  8. Ciao ho utilizzato questa funzione nel mio template di pagina page.php, fino a ieri mi funzionava visualizzando oltre 11.000 like, ma ad un certo punto ha iniziato a segnarne solo 45!!! per quanto mi sia sforzato non riesco a venirne a capo…la mia impostazione dei permalinks era www.miosito.it/wordpress/?page_id=123 e l’ho cambiata col nome del post, cioè www.miosito.it/wordpress/titolo-pagina/ non so se mi sono spiegato bene…

    Rispondi
  9. 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
    • Puoi applicare una funzione simile a quella presentata in questo articolo, però anziché lavorare sulla data dovrai usare la funzione https://codex.wordpress.org/Function_Reference/get_the_ID per catturare l’ID del post.

      Rispondi
        • La funzione è un po’ diversa. Dai un’occhiata a questa pagina nella quale è spiegato esattamente il metodo da seguire: http://joaogarin.com/article/changing-permalinks-wordpress-keeping-social-proof

          Rispondi
          • Grazie mille. Ho seguito la guida da te indicata ma non sembra funzionare.
            Ad esempio, a questo punto $url_change_id = “1020”, quale valore numerico dovrei inserire? Ho provato sia con l’id dell’ultimo post pubblicato prima di cambiare permalink sia con un numero superiore ma non cambia nulla. Scusami per l’eventuale disturbo!

  10. 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
  11. 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
    • Ciao, se ti appaiono i pulsanti social allora la posizione è corretta. Forse però la funzione va modificata. La tua struttura dei permalink era come quella riportata nell’esempio?

      Rispondi
      • la struttura era:
        anno/mese/nomepost
        ed è diventata:
        categoria/nomepost

        se mi appaiono i pulsanti, vuol dire anche che devo disattivare i plugin o i pulsanti di condivisione predefiniti del tema, giusto?

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

    Rispondi
    • Ciao, nella sezione permalink delle impostazioni puoi tornare alle impostazioni precedenti. Mi pare strano che non te lo permetta.

      Rispondi
  13. Ciao, io ho adattato lo script da te creato in modo da adattarsi al mio cambio url, ovvero da shortlink del tipo www.blabla.it/?p=666 a 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
      • si, perchè ad esempio gli articoli di gennaio 2014 hanno i like corretti, quelli di febbraio no, e di nuovo quelli di marzo si

        questo è ciò che ho fatto io

        http://pastebin.com/ZbHbXkVc

        Rispondi
        • Anche perché gli articoli di questi 3 mesi dovrebbero essere stati condivisi solo con gli URL nuovi, non con il vecchio permalink. Se guardi il codice generato della pagina che tipo di URL vedi per le condivisioni?

          Rispondi
          • no, gli articoli dei tre mesi che ti ho indicato sono condivisi con i friendly url ovviamente, ma la sezione social fa riferimento al vecchio sistema basato sugli shortlink
            ho impostato (orientativamente) la distizione tra gli url al 7 dicembre 2014, oltre quella data la sezione social deve guardare i friendly url

          • Ciao,
            io ho controllato alcuni URL e sembra a posto. Ho fatto il confronto anche con https://www.sharedcount.com/ e i numeri tornano.
            È chiaro poi che i vecchi post dovrano essere condivisi sempre con i vecchi URL per incrementare il conteggio nel widget.

          • beh insomma, ho fatto due prove con quello strumento da te linkato e non funziona mica tanto bene… indica numeri diversi da quelli presenti attualmente…
            va beh, grazie per l’aiuto comunque.

          • Ciao, a me di solito dà risultati corretti. Poi è chiaro i risultati sono diversi tra http://www.lestroverso.it/sette-poesie-da-una-venere-nel-tevere/ e http://www.lestroverso.it/?p=6211

          • intendo che ad esempio su quest’articolo risultano 1 tweet e 106 likes
            http://www.lestroverso.it/intervista-allo-scrittore-orazio-caruso/
            mentre tramite il tool risultano 1 tweet e 75 likes
            https://www.sharedcount.com/#url=http%3A%2F%2Fwww.lestroverso.it%2Fintervista-allo-scrittore-orazio-caruso%2F

          • Io vedo 1 Tweet e 111 interazioni Facebook sul blog
            e 1 Tweet e 111 interazioni Facebook su Shared Count.
            La cosa strana è che vediamo due cose diverse ;)

          • vedo il codice corretto,
            questa riga è di febbraio 2014

            Condividi &nbsp

            questa è di gennaio 2015

            Condividi &nbsp

            guarda tu stesso se ti va, su www.lestroverso.it

  14. 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
  15. 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
  16. 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
  17. 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
        • Non sono riuscito a capire quello che vuoi fare. Io comunque eviterei di impazzire troppo per la conservazione dei like su Facebook :)

          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

          • In questo caso è necessario trovare il sistema per recuperare il nome della vecchia categoria del post al posto della regola che recupera la data di pubblicazione del post.

  18. 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