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.
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.
E se invece il problema รจ il cambio di dominio? come si puรฒ gestire?
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.
Grazie per la risposta. La vedo difficile perรฒ
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 …
Ciao, bell’articolo, solo che non vedo il codice della funzione
Hai ragione :) Avevo modificato il plugin per visualizzare il codice e mi ero scordato di aggiornare il post. Ora dovrebbe essere a posto.
Grazie mille, mi รจ molto utile.
Prego. Grazie a te per la segnalazione :)
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
E’ strano che tu abbia perso le condivisioni se l’URL dei post รจ rimasto praticamente identico. Ma su Wordpress.com usavi un dominio personalizzato?
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
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.
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
Non so, il plugin che hai usato รจ lo stesso, no?
si, la cosa strana รจ che le altre si vedono..
Perfetto grazie! ti farรฒ sapere,sto aspettando che il blog sia live. Buona domenica
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? :-)
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/
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 :-)
Ma non fai prima a mettere un meta tag robots noindex ai post che appartengono a tale categoria?
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
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.
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
Ok, prego :)
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/
Ciao, sono passato da www.pippo.it/xx a www.pippo.it, posso usare questa funzione per recuperare i like?
grazie
domenico
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.
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
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
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…
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!
La procedura รจ quella spiegata in questo articolo.
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.
Ti ringrazio. Per cui al posto di $url_change_date = strtotime(“1/7/2013”); dovrei inserire ?
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
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!
Sรฌ, quella funzione รจ pensata per l’utilizzo con il plugin.
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
ops rettifico versione 3.9
Ha parte la prima parte, quella che va messa nel functions.php, poi hai elencato altri file nei quali non va messa.
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!
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?
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?
Sรฌ, perรฒ devi includere i javascript dei vari social.
Scusa la domanda ma non ho la piรน pallida idea di cosa devo fare e come… Puoi aiutarmi?
Ciao,
รจ un po’ lunga da spiegare nei commenti. Casomai mandami una mail.
Ho scelto per errore “struttura personalizzata” e ora non riesco piรน a modificare i permalink dei miei articoli. come posso fare a risolvere?
Ciao, nella sezione permalink delle impostazioni puoi tornare alle impostazioni precedenti. Mi pare strano che non te lo permetta.
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
Pare strano anche a me. La data del cambio URL รจ impostata correttamente?
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
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?
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 ;)
O.o
boh
vedo il codice corretto,
questa riga รจ di febbraio 2014
Condividi Tweet  
questa รจ di gennaio 2015
Condividi Tweet  
guarda tu stesso se ti va, su www.lestroverso.it
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?
Ciao, hai provato a rigenerare i permalink all’interno delle impostazioni di WP?
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
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.
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.
Ciao penso di sรฌ, ma Joomla non lo utilizzo da parecchi anni e quindi non so dirti come.
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
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.
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
Non sono riuscito a capire quello che vuoi fare. Io comunque eviterei di impazzire troppo per la conservazione dei like su Facebook :)
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.
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
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.