Extension per BlogEngine - Meta Description

by andrea 15 April 2009 02:39

E' da parecchio tempo che seguo il progetto BlogEngine.NET e che ne faccio uso per questo blog. Con le prime versione, mi sono dovuto scrivere un bel pò di codice per adattarlo alle mie esigenze, e sopratutto per ottimizzarlo per l'indicizzazione nei motori di ricerca.
(SEO - Ottimizzazione per i motori di ricerca)
Ad ogni aggiornamento di BlogEngine.NET, mi accorgevo che il codice (scritto da me) che stavo riportando da una versione all'altra, si riduceva notevolmente. Fino a pochi giorni fa, che sono riuscito a inserire tutto il mio codice all'interno di una Extension, permettendomi d'ora in poi di agevolarmi nella procedura di aggiornamento (che ora si è ridotta ad un bel copia e incolla).

L'extension che ho creato permette di settare il tag meta-description della pagina con i primi 200 caratteri del post. Questo tag permette di specificare una descrizione per il contenuto della pagina migliorandone l'indicizzazione.

Creare l'Extension

Per fare questo, mi sono agganciato all'evento Serving del Post, ed al suo interno ho eliminato i tag html contenuti nel Body, e copiato i primi 200 caratteri all'interno della proprietà Description (che di default viene inserita nel tag meta description della pagina).

   1: /// <summary>
   2: /// Initializes the <see cref="MetaDescription"/> class.
   3: /// </summary>
   4: static MetaDescription()
   5: {
   6:     Post.Serving += new EventHandler<ServingEventArgs>(Post_Serving);
   7: }
   8:  
   9: /// <summary>
  10: /// Handles the Serving event of the Post control.
  11: /// </summary>
  12: /// <param name="sender">The source of the event.</param>
  13: /// <param name="e">The <see cref="BlogEngine.Core.ServingEventArgs"/> instance containing the event data.</param>
  14: static void Post_Serving(object sender, ServingEventArgs e)
  15: {
  16:     if (!string.IsNullOrEmpty(e.Body)
  17:         && string.IsNullOrEmpty(((Post)sender).Description)
  18:         && e.Location == ServingLocation.SinglePost)
  19:     {
  20:         // Remove the HTML tags
  21:         string content = ClearHTMLTags(HttpUtility.HtmlDecode(e.Body));            
  22:         
  23:         // Remove the encoded char. es: &#236; 
  24:         //content = ClearEncodedChar(HttpUtility.HtmlEncode(content));
  25:  
  26:         // Reduce the Length of text for meta description
  27:         if (content.Length > 200)
  28:             content = content.Substring(0, 200);
  29:  
  30:         // Set the description of post
  31:         ((Post)sender).Description = content;
  32:     }
  33: }

Rimuovere i tag HTML

Per elinare i tag HTML contenuti nel post ho utilizzato le Regular Expression, in quanto sono veramente performanti, e permettono agevolmente di eseguire ricerche e modifiche all'interno di testi scrivendo pochissime righe di codice:

   1: /// <summary>
   2: /// Clears the HTML tags.
   3: /// </summary>
   4: /// <param name="strHTML">The string with the tags to remove.</param>
   5: /// <returns></returns>
   6: private static string ClearHTMLTags(string strHTML)
   7: {
   8:     Regex regEx = null;
   9:     string strTagLess = string.Empty;
  10:     try
  11:     {
  12:         //this pattern mathces any html tag
  13:         regEx = new Regex("<[^>]*>", RegexOptions.IgnoreCase);
  14:         strTagLess = regEx.Replace(strHTML, "");
  15:         //matches a single <
  16:         regEx = new Regex("[<]", RegexOptions.IgnoreCase);
  17:         strTagLess = regEx.Replace(strTagLess, "&lt;");
  18:         //matches a single >
  19:         regEx = new Regex("[>]", RegexOptions.IgnoreCase);
  20:         strTagLess = regEx.Replace(strTagLess, "&gt;");
  21:  
  22:         return strTagLess;
  23:     }
  24:     catch
  25:     {
  26:         return strHTML;
  27:     }
  28: }

Rimuovere caratteri speciali

All'interno del codice del metodo Post_Serving, è presente una riga di codice commentata che punta a una funzione che permette (sempre tramita Regular Expression) di rimuovere i caratteri speciali/simboli presenti all'interno del post. Questo perchè vengono visualizzati con l'encoding e quindi il carattere "é" apparirebbe "&amp;#233;" (in quanto viene fatto un (doppio) encoding da BlogEnigne.NET). Questa informazione viene comunque interpretata correttamente dai motori di ricerca, e quindi ho preferito non rimuovere questi caratteri, ma per chi invece fosse interessato, è sufficiente che scommenti la linea.
Ecco qui la funzione che verrebbe eseguita:

   1: /// <summary>
   2: /// Clears the encoded char.
   3: /// </summary>
   4: /// <param name="strHTML">The string with encoded char to remove</param>
   5: /// <returns></returns>
   6: private static string ClearEncodedChar(string strHTML)
   7: {
   8:     Regex regEx = null;
   9:     string strEncodedCharLess = string.Empty;
  10:     try
  11:     {
  12:         regEx = new Regex(@"&(?ni:\#((x([\dA-F]){1,5})|(104857[0-5]|10485[0-6]\d|1048[0-4]\d\d|104[0-7]\d{3}|10[0-3]\d{4}|0?\d{1,6}))|([A-Za-z\d.]{2,31}));", RegexOptions.IgnoreCase);
  13:         strEncodedCharLess = regEx.Replace(strHTML, "");
  14:  
  15:         return strEncodedCharLess;
  16:     }
  17:     catch
  18:     {
  19:         return strHTML;
  20:     }
  21: }

Come utilizzare l'extension

Per utilizzare l'extension, non si deve fare altro che eseguire il download, e copiare il file contenuto all'interno della cartella \App_Code\Extensions del proprio blog.

Download file: http://files.dott.../BlogEngine-MetaDescription-01.zip

Tags: , ,

ASP .NET | .NET | Microsoft

Comments are closed