2009-08-25 22 views
6

Me estoy familiarizando con ASP.Net-MVC, y estaba tratando de realizar algunas tareas comunes que he logrado en el pasado con formularios web y otros funcionalidad. Una de las tareas más comunes que debo hacer es crear direcciones URL amigables para el SEO, lo que en el pasado ha significado hacer algunas reescrituras de URL para construir la cadena de consulta en la ruta del directorio.¿Cómo creo URLs de SEO amigable en ASP.Net-MVC

por ejemplo: www.somesite.com/productid/1234/widget

en lugar de: www.somesite.com?productid=1234 & name = widget de

¿Qué método debo utilizar para lograr esto en ASP.Net-MVC?

Tengo buscar alrededor, y todo lo que he encontrado es esto, que o bien no estoy entendiendo correctamente, o en realidad no responder a mi pregunta:

SEO URLs with ASP.NET MVC

Respuesta

6

Crear una nueva ruta en el Mundial.asax de manejar esto:

 routes.MapRoute(
      "productId",     // Route name 
      "productId/{id}/{name}",  // URL with parameters 
      new { controller = "Home", action = "productId", id = 1234, name = widget } // Parameter defaults 
     ); 

Asp.Net MVC enrutamiento tiene incorporada, por lo que no hay necesidad para el URL Rewriter.

10

MVC significa " modelo Vista controlador" y mientras esos conceptos no son lo que preguntas acerca de, por lo general, puede cablear URL como se ve por encima con bastante facilidad

Así, por ejemplo, de forma predeterminada el aspecto de la URL como la siguiente

http://www.somesite.com/controller/view/ 

donde el controlador se refiere a la clase de controlador dentro de su proyecto, y la vista hace referencia a la combinación de página/método dentro del controlador. Así, por ejemplo, usted podría escribir el fin de tomar en una entrada y un aspecto similar al siguiente

http://www.somesite.com/widget/productid/1234/ 

Ahora en cuanto a SEO Friendly URL, eso es sólo el azúcar inútil. Usted autoriza su controlador de forma tal que agrega crumble inofensivo al final de la URL.

Así, por ejemplo, usted notará que las siguientes tres maneras de llegar a esta pregunta producen el mismo resultado:

How do I create SEO-Friendly urls in ASP.Net-MVC

How do I create SEO-Friendly urls in ASP.Net-MVC

How do I create SEO-Friendly urls in ASP.Net-MVC

desbordamiento de pila es autor sus valores de ruta de tal manera que el bit que ocurre después de la identificación de la pregunta no es realmente necesario tener.

¿Por qué lo tiene allí? Para aumentar Google PageRank. Google PageRank depende de muchas cosas, la suma total de las cuales son secretas, pero una de las cosas que la gente ha notado es que, en igualdad de condiciones, el rango de la URL de texto descriptivo es más alto. Es por eso que Stack Overflow usa ese texto después del número de la pregunta.

1

También es importante manejar las URL heredadas. Tengo una base de datos de urls antiguas y nuevas y me redirecciona con el siguiente código;

public class AspxCatchHandler : IHttpHandler, IRequiresSessionState 
{ 

    #region IHttpHandler Members 

    public bool IsReusable 
    { 
     get { return true; } 
    } 

    public void ProcessRequest(HttpContext context) 
    { 
     if (context.Request.Url.AbsolutePath.Contains("aspx") && !context.Request.Url.AbsolutePath.ToLower().Contains("default.aspx")) 
     { 
      string strurl = context.Request.Url.PathAndQuery.ToString(); 
      string chrAction = ""; 
      string chrDest = ""; 

      try 
      { 

       DataTable dtRedirect = SqlFactory.Execute(
        ConfigurationManager.ConnectionStrings["emptum"].ConnectionString, 
        "spGetRedirectAction", 
        new SqlParameter[] { 
         new SqlParameter("@chrURL", strurl) 
        }, 
        true); 

       chrAction = dtRedirect.Rows[0]["chrAction"].ToString(); 
       chrDest = dtRedirect.Rows[0]["chrDest"].ToString(); 

       chrDest = context.Request.Url.Host.ToString() + "/" + chrDest; 
       chrDest = "http://" + chrDest; 


       if (string.IsNullOrEmpty(strurl)) 
        context.Response.Redirect("~/"); 
      } 
      catch 
      { 
       chrDest = "/";// context.Request.Url.Host.ToString(); 
      } 

      context.Response.Clear(); 
      context.Response.Status = "301 Moved Permanently"; 
      context.Response.AddHeader("Location", chrDest); 
      context.Response.End(); 

     } 
     else 
     { 
      string originalPath = context.Request.Path; 
      HttpContext.Current.RewritePath("/", false); 
      IHttpHandler httpHandler = new MvcHttpHandler(); 
      httpHandler.ProcessRequest(HttpContext.Current); 
      HttpContext.Current.RewritePath(originalPath, false); 
     } 
    } 

    #endregion 
} 

esperanza esto es útil

3

Tenga cuidado en la aplicación de rutas con nombres en ellos, es necesario para validar que el nombre que entra es correcta o puede terminar perjudicando su SEO-Clasificación de la página haciendo tener varios URI compartiendo el mismo contenido, ya sea configurar un canónico adecuado o hacer que tu controlador emita 301 cuando visites el URI 'incorrecto'.

Una valoración crítica rápida que hice en la última solución se puede encontrar en:
http://mynameiscoffey.com/2010/12/19/seo-friendly-urls-in-asp-net-mvc/

algo de información sobre canónicos:
http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html

+0

muy fresco, gracias por la entrada. –