Redirección 301 y etiqueta Canonical - SEO en ASP.NET MVC

Normalmente, la gran mayoría de aplicaciones Web ASP.NET son desarrolladas para funcionar en entornos corporativos (Intranet) donde son utilizadas por un número limitado de usuarios. Aun así, existen casos en los que debemos desarrollar aplicaciones (mejor llamarlas sitios Web) que tengan una visibilidad y acceso global (Internet). Es en estas situaciones donde el SEO pasa a tomar un papel relevante si queremos que nuestro sitio Web tenga una visibilidad aceptable en los motores de búsqueda de Internet.

Optimizar un sitio Web para motores de búsqueda por parte de los desarrolladores (SEO interno), es una labor que requiere tener en cuenta múltiples aspectos: Accesibilidad, diseño responsivo, cabeceras H, etiquetas 'meta', contenido duplicado, etc. En este Post veremos cómo solucionar el problema de 'contenido duplicado' en nuestros sitios Web ASP.NET MVC, de tal manera que los principales motores de búsqueda en Internet (Google, Bing, etc.) no penalicen nuestro posicionamiento.

El contenido duplicado

Los motores de búsqueda consideran como 'contenido duplicado' cuando "Existen recursos (páginas) en un mismo sitio Web que aún teniendo diferentes URLs presentan el mismo contenido". Google y Bing penalizan los sitios Web con mucho contenido duplicado como 'sitios de baja calidad', relegando a estos a las últimas posiciones cuando se realiza una búsqueda. 

Redirección permanente 301

Cuando asociamos nuestro sitio Web a un dominio, nos damos cuenta que este es accesible de dos maneras, con o sin las tres 'w': 'www.midominio.com' o 'midominio.com'. Este comportamiento tan habitual, es una de las causas de penalización mas importantes para los buscadores, ya que estos interpretan que todo nuestro sitio Web está duplicado.

Para solucionar este problema en nuestros sitios Web ASP.NET MVC, debemos realizar lo se se llama una 'Redirección permanente 301' de una dirección a otra. Este proceso de redirección lo configuraremos en el archivo Global.asax dentro del método Application_BeginRequest:

protected void Application_BeginRequest(object sender, EventArgs e)
{
   if (HttpContext.Current.Request.Url.ToString().ToLower().
       Contains("http://midominio.com"))
   {
       HttpContext.Current.Response.Status = "301 Moved Permanently";
       HttpContext.Current.Response.AddHeader("Location", Request.
       Url.ToString().ToLower().Replace("http://midominio.com", 
       "http://www.midominio.com"));
   }
}

Con esta configuración, le estamos indicando al servidor Web, que todas las peticiones http://midominio.com sean redirigidas de forma permanente a http://www.midominio.com, y por consecuencia, los buscadores interpretarán que todo el contenido es único y se encuentra en http://www.midominio.com.

Etiqueta rel=canonical

Muchos sitios Web (este Blog es un ejemplo), disponen de un sistema de búsqueda de contenidos por texto y/o un sistema de paginación de resultados. Normalmente, los desarrolladores implementamos esta funcionalidad mediante parámetros en la URL del tipo http://www.midominio.com/blog?param=xxxxxx.

En el caso de una búsqueda de contenidos por texto, puede darse el caso que dos búsquedas diferentes devuelvan el mismo resultado o similar: http://www.midominio.com/blog?search=ASP y http://www.midominio.com/blog?search=NET. 

También puede ocurrir que en un sistema de paginación de resultados, el contenido devuelto sea diferente, pero el título y descripción de las páginas sea el mismo: http://www.midominio.com/blog?page=1, http://www.midominio.com/blog?page=2, etc.

Para solucionar este problema, debemos indicarle a los buscadores cual es la versión 'Canónica' de una determinada URL, o sea, la versión original que tiene que indexar (cuando hay contenido duplicado) para devolver en los resultados. Esto lo hacemos mediante la etiqueta 'rel=canonical' en la sección 'head' de la página.

<link rel="canonical" href="http://url-canonica" />

En sitios Web ASP.NET MVC que utilizan una página o Vista maestra (Layout), tendremos que generar la etiqueta 'rel=canonical' de forma dinámica. Esto implica que en cada una de las Vistas del sitio Web deberemos configurar el 'rel=canonical' según nos convenga. 

En primer lugar definimos un 'rel=canonical' genérico en la página maestra _Layout.cshtml, donde el contenido href= lo obtendremos desde el @Viewbag

<link rel="canonical" href="@ViewBag.CanonicalURL" />

Luego en cada Vista de sitio Web, definiremos la URL canónica según nos convenga. En este caso lo hacemos de la siguiente manera:

@{    
    ViewBag.CanonicalURL = new UriBuilder(this.Request.Url.Scheme, this.Request.Url.Host);
}

De esta manera le indicaremos a los buscadores que la versión canónica (la que deben indexar) para las siguientes URLs:

http://www.midominio.com/blog?search=ASP

http://www.midominio.com/blog?search=NET

http://www.midominio.com/blog?page=1

http://www.midominio.com/blog?page=2

etc.

es la siguiente:

<link rel="canonical" href="http://www.midominio.com/blog" />

  Compartir


  Nuevo comentario

El campo Comentario es obligatorio.
El campo Nombre es obligatorio.

Enviando ...

  Comentarios

No hay comentarios para este Post.


Perfil para Rafael Acosta en Stack Overflow en español, preguntas y respuestas para programadores y profesionales de la informática.

  Etiquetas

.NET Core .NET Framework .NET MVC .NET Standard AJAX ASP.NET ASP.NET Core ASP.NET MVC Bootstrap Buenas prácticas C# Cookies Entity Framework Gráficos JavaScript jQuery JSON JWT PDF Pruebas Unitarias Seguridad SEO SOAP Sql Server SqLite Swagger Validación Web API Web Forms Web Services WYSIWYG

  Nuevos


  Populares















Utilizamos cookies propias y de terceros para mejorar nuestros servicios y ofrecerle una mejor experiencia de navegación. Si continúa navegando consideramos que acepta su uso. Más información   Acepto