BlogEngine.net: come rimuovere la data dall’URL dei post

0 Condivisioni

Alcuni giorni fa ho preso inconsciamente la decisione di rimuovere le date dall’URL dei post nel mio sito sviluppato su piattaforma BlogEngine.net, un CMS open source in Asp.net.

La funzionalità disponibile su Impostazioni, nella sezione Altre Impostazioni, consente di aggiungere o rimuovere le date dagli URL dei post semplicemente mettendo o togliendo la spunta alla voce Aggiungi la data al collegamento del Post.

Segui Informarea su Telegram

Purtroppo per me questa operazione di rimozione ha causato un impatto negativo e seri danni lato SEO ad Informarea.

Come rimuovere le date dall'URL dei post in asp.net

Mentre WordPress gestisce l’eliminazione della data dall’URL dei post con diversi plugin, BlogEngine non prevede una funzione ad hoc che aiuti l’utente a risolvere tale problematica, e questo crea un certo fastidio ai motori di ricerca come Google, che interpretano i tuoi articoli come articoli duplicati, anche se hai fornito una sitemap valida e con nuovi URL. A tal proposito dai un’occhiata in Search Google nella sezione Aspetto nella ricerca > Miglioramento HTML > Meta Tag Title duplicati, per visualizzare che i post duplicati sono proprio quelli con data e senza data. Ad esempio una cosa del genere:

Come scrivere sulla tastiera del PC senza guardare
/post/2016/05/14/come-scrivere-sulla-tastiera-del-pc-senza-guardare.aspx
/post/2016/05/14/come-scrivere-sulla-tastiera-del-pc-senza-guardare

Questa situazione ha provocato una perdita di posizionamento dei miei articoli nei motori di ricerca ed un evidente calo di visite giornaliere. Nel frattempo ho provato a cercare su Internet la soluzione a tale problematica e cioè come rimuovere le date dall’URL dei post in Asp.net o C# e come effettuare un redirect 301 permanente. Ma niente di niente. Quindi?

Ecco come ho risolto in BlogEngine.net:

  • Effettuato il download dell’ultima versione di Visual Studio nella versione gratuita
  • Effettuato il download del file BlogEngine.net (source) della versione che stai utilizzando.
  • Aperto la versione BlogEngine.sln in Source/Blogengine
  • In Esplora Soluzioni di Visual Studio aperto BlogEngine.Core > Web > UrlRules.cs

In questo file ho aggiunto le seguenti righe di codice:

Nella #region Constants and Fields della classe UrlRules

private static readonly Regex YearMonthDayRegexs = new Regex("/([0-9][0-9][0-9][0-9])/([0-1][0-9])/([0-3][0-9])/", RegexOptions.IgnoreCase | RegexOptions.Compiled);


Nel metodo ExtractTitle, che riceve come secondo parametro la url dei post, devi scrivere le seguenti righe di codice all’interno subito dopo questa riga di codice

 url = url.ToLowerInvariant().Replace(“—“, “-“);

if (url.Contains("/post/") || url.Contains("/POST/"))
{
if (YearMonthDayRegexs.IsMatch(url))
{
var match = YearMonthDayRegexs.Match(url);
var year = match.Groups[1].Value;
var month = match.Groups[2].Value;
var day = match.Groups[3].Value;
url = url.ToLowerInvariant().Replace("/" + year.ToString(), "");
url = url.ToLowerInvariant().Replace("/" + month.ToString(), "");
url = url.ToLowerInvariant().Replace("/" + day.ToString(), "");

if (url.Contains("?"))
{
url = url.Substring(0, url.Length - 1);
}
context.Response.AppendHeader("location", url);
context.Response.StatusCode = 301;
}
}

     
Se però i tuoi post hanno un URL che termina con l’estensione .aspx dovrai spostare queste righe di codice subito dopo questa istruzione:

if (url.Contains(BlogConfig.FileExtension) && url.EndsWith("/"))
{
url = url.Substring(0, url.Length - 1);
context.Response.AppendHeader("location", url);
context.Response.StatusCode = 301;
}


           

In questo modo i tuoi vecchi articoli contenenti la data nella URL verranno reindirizzati in un URL senza data, proprio come nell’esempio qui sotto:

  • da: /post/2013/10/11/come-trasferire-i-contatti-e-altri-dati-da-iphone-ad-android.aspx
  • a: /post/come-trasferire-i-contatti-e-altri-dati-da-iphone-ad-android

Al termine in Visual Studio, vai nel menu Compilazione e seleziona Ricompila BlogEngine.Core. Attendi il completamento dell’operazione, poi vai su Source\BlogEngine\BlogEngine.Core\bin\Release per copiare il file Blogengine.core.dll e incollarlo nella cartella Bin nella root del tuo sito. E il gioco è fatto!

Se non vuoi mettere mano al BlogEngine.Core, puoi provare ad intervenire nel Web.Config con queste righe di codice. Attenzione è da testare dato che non l’ho provato.

<system.webServer>
<rewrite>
<rules>
<rule name="remove year month day" stopProcessing="true">
<match url="^/([0-9]+)/([0-9]+)/([0-9]+)/([_0-9a-z-]+)$" />
<action type="Rewrite" url="/post/{R:4}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>

Detto questo devo fare un ringraziamento particolare a due grandi blogger che, con la loro disponibilità, mi hanno aiutato ad uscire da questa brutta situazione, e che ammiro e stimo veramente:

Luca Congiu: sviluppatore asp.net e blogger di DotNetCode.it e autore di alcuni articoli su Informarea.it

Giorgio Borelli: autore e ideatore del blog Informaticando.net – un intorno web sull’Informatica.

Non perdere nessuna notizia, aggiungici agli amici!


Segui Informarea su Telegram

Fabrizio Cannatelli

Fondatore di Informarea.it, è un appassionato di informatica. Ha lavorato per molti anni come Analista Programmatore presso varie aziende utilizzando diversi linguaggi di sviluppo, oggi svolge un lavoro completamente diverso ma la voglia di comunicare e di condividere con il web i suoi studi e le sue curiosità lo hanno spinto a far nascere questo blog non solo per esprimere e mostrare la passione per questo mondo, ma anche per confrontarsi con nuove esperienze di sviluppo.

Fabrizio Cannatelli

Lascia un commento

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

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.