17 de enero de 2011

URLs amigables a los buscadores - SEO friendly URLs - Convertir títulos a URL

Es un pequeño dolor de cabeza convertir en tiempo real los URLs de una aplicación al formato que actualmente se utiliza para lograr una mayor visibilidad en Google.

Este proceso tiene sus ventajas y desventajas: La ventaja principal en lo referente a seguridad es que esconden los parámetros y los nombres de las variables utilizadas en la aplicación, sin embargo en cuanto a desventajas, al hacer los URLs más largos, el usuario se ve forzado a utilizar recortadores de URL como goo.gl y otros para usar las direcciones en sus aplicaciones sociales, y de esta forma tendremos muchos menos presencia de enlaces directos que fortalezcan nuestro Page Rank en Google. Una va por otra.

Sin embargo son muy útiles también para que el usuario reconozca el contenido de una página desde su enlace, y además repiten el título en el URL lo que aumenta la posibilidad de que nuestras páginas aparezcan indexadas mejor.

Pero cuando uno va a tratar de aplicar este truco de SEO, se encuentra con que los scripts para hacerlo están todos adaptados para páginas con títulos en inglés, por lo cual no toman en cuenta los acentos y los caracteres como la "ñ" y la "ü" (u con dieresis).

Por tanto decidí realizar mi propia función en C# que convierte una cadena de texto de un título en otra cadena de texto utilizable por un URL y amigable con los métodos SEO.

A continuación una función adaptada al español que se basa en convertir caracteres acentuados, con tilde o con diéresis, en sus correspondientes sin agregado (es decir á se convierte en a y ñ en n). También convierte todos los caracteres en blanco en guiones luego de eliminar cualquiera de estos delante o detrás de la cadena. Cualquier otro caracter que no se encuentre en la lista o no sea letra, número o guión, es eliminado.

Espero les sea útil:

/// <summary>
/// Convierte cadenas convencionales de títulos 
/// en cadenas SEO URL amigables.
/// </summary>
/// <param name="strTitle">La cadena a convertir.</param>
/// <returns> El string en formato SEO amigable</returns>
public static string titleToSeoURL(string strTitle)
{
    char[] allChars;
 
    //cadena de caracteres a ser reemplazados    
    string sCharsToReplace = "áéíóúüñç_";
    //cadena de caracteres para reemplazar, en el mismo orden
    string sCharsForReplace = "aeiouunz-"; 
    string seoURL = string.Empty;
    int charPos = 0;
 
    // decodifica cualquier entidad HTML antes de empezar.
    strTitle = Server.HtmlDecode(strTitle);
    strTitle = strTitle.ToLower();
    strTitle = strTitle.Trim();
 
    // reemplaza todos los caracteres transparentes.
    strTitle = Regex.Replace(strTitle, @"\s+""-");
 
    // El siguiente bucle reemplaza todos los caracteres
    // encontrados en sCharsToReplace por los de sCharsForReplace 
    allChars = strTitle.ToCharArray();
    for (int i = 0; i < allChars.Length; i++)
    {
        charPos = sCharsToReplace.IndexOf(allChars[i]);
        if (charPos != -1)
        {  allChars[i] = sCharsForReplace[charPos]; }
        seoURL += allChars[i];
    }
 
    // Remueve cualquier caracter no reemplazado que no
    // esté entre a y z, que no sea número o que no sea un guión (-)
    seoURL = new Regex("[^a-z0-9-]").Replace(seoURL, "");
    // remueve cualquier guión solitario al final o principio
    // de la cadena resultante
    seoURL = seoURL.Trim('-');
 
    // Limita el resultado a 80 caracteres.
    if(seoURL.Lenght > 80)
        seoURL = seoURL.Substring(0, 80);
 
    return seoURL;
}

Hasta la próxima.

2 comentarios:

ranfael dijo...

Gracias por la función. Ahora, ¿va en el global.asax o dónde? Gracias nuevamente.

Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.

Entradas populares