ASP.NET y las URL SEO friendly

Las técnicas de posicionamiento web son algo muy importante para hacer que nuestro sitio sea conocido y fácilmente reconocible e indexable por los buscadores. Una de las opciones es utilizar unas URL que faciliten la tarea a los buscadores, las llamadas URL SEO friendly. Aunque supuestamente esto ya no es algo que tengan en cuenta los buscadores, tampoco ha sido confirmado 100% por ellos con lo que contar en nuestro sitio web con ellas es algo que siempre será, como mínimo, positivo.

Si realizamos nuestro sitio web con ASP.NET MVC, esto se consigue muy fácilmente, pero en ASP.NET WebForms no es algo común ya que se accede directamente a los archivos .aspx. Sin embargo, ASP.NET WebForms está preparado para poder dotar a nuestro sitio web de rutas URL SEO friendly. Esto se consigue configurado rutas en nuestra clase global de aplicación, global.asax.

El archivo global.asax nos permite controlar los eventos globales de nuestra aplicación web y con ellos podremos configurar las URL. Para ello, lo primero que debemos hacer es añadir dicho archivo a nuestra aplicación web en caso de que no lo tengamos. Haciendo clic derecho en nuestro proyecto, le damos a añadir nuevo elemento, y seleccionamos Clase de Aplicación Global.

add_global_asax

Ahora en nuestro archivo global.asax, debemos de añadir lo siguiente en el evento de Application_Start:

protected void Application_Start(object sender, EventArgs e)
{
	RegisterRoutes(RouteTable.Routes);
}

Y creamos el método RegisterRoutes de la siguiente manera:

void RegisterRoutes(RouteCollection routes)
{
            routes.MapPageRoute("SignUpRoute", "signup", "~/Signup.aspx");
            routes.MapPageRoute("SignInRoute", "signin", "~/Signin.aspx");
}

El primer parámetro del método MapPageRoute es un identificativo que debe ser único y que elegiremos a nuestro gusto. El segundo es el segmento de la URL que representará la ruta, y el tercero es la página a la que se enrutará, de manera que si por ejemplo abrimos http://www.contoso.com/signup, se nos abría la página de Signup.aspx pero en la URL de nuestro navegador seguirá apareciendo http://www.contoso.com/signup, y no http://www.contoso.com/Signup.aspx.

Normalmente en las páginas de ASP.NET WebForm los parámetros se envía por QueryString, pero también podemos utilizar los segmentos para enviar dichos parámetros. Para ello debemos de registrar la ruta de la siguiente manera:

            routes.MapPageRoute("SignUpRoute", "dashboard/{userName}", "~/UserDashboard.aspx");

Con esta ruta lo que estamos indicando es que cuando el usuario introduzca en la URL un segmento extra después de dashboard, se considere eso un parámetro al estar entre llaves {} y que se llamará userName. Sería equivalente a poner UserDashboard.aspx?userName=test si utilizáramos las QueryStrings.

Ahora, para obtener el valor en nuestra página UserDashboard.aspx, debemos de acceder a las datos de ruta de la siguiente manera desde nuestro CodeBehind:

	Page.RouteData.Values["userName"]

También podemos acceder desde la parte de aspx, para por ejemplo utilizarlo en un ObjectDataSource:

	<asp:RouteParameter Name="userName" RouteKey="userName" Type="String" />

Donde el parámetro RouteKey es el identificador del parámetro de ruta que hemos establecido en la ruta de nuestro global.asax.

Ahora que ya sabemos cómo funcionan las rutas en ASP.NET WebForms, podemos configurar nuestro sitio web para que disponga de unas URL SEO friendly perfectamente preparadas para los buscadores. En mi siguiente post hablaré sobre el módulo rewrite del IIS, para realizar redirecciones de una url a otra de forma eficiente sin utilizar Response.Redirect. ¡No te lo pierdas!