2009-08-25 8 views
6

Je me familiarise avec ASP.Net-MVC, et j'essayais d'accomplir certaines tâches courantes que j'ai accomplies dans le passé avec des formulaires Web et d'autres fonctionnalité. L'une des tâches les plus courantes que je dois faire est de créer des URL conviviales pour le référencement, ce qui dans le passé a nécessité une réécriture d'url pour construire la chaîne de requête dans le chemin du répertoire.Comment créer des liens SEO-Friendly dans ASP.Net-MVC

par exemple: www.somesite.com/productid/1234/widget

plutôt que: www.somesite.com?productid=1234 nom & = widget de

Quelle méthode dois-je utiliser pour accomplir cela dans ASP.Net-MVC?

J'ai recherche autour, et tout ce que j'ai trouvé est ce qui soit je ne comprends pas bien, ou ne répond pas vraiment à ma question:

SEO URLs with ASP.NET MVC

Répondre

6

Créer une nouvelle route dans le Global.asax pour gérer ceci:

 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 a routage intégré, donc pas besoin de l'Url Rewriter.

10

MVC signifie " Model View Controller » et alors que ces concepts ne sont pas ce que vous demandez au sujet, vous pouvez généralement câbler URL comme vous voyez ci-dessus assez facilement

Ainsi, par exemple par défaut le regard de l'URL comme le

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

où contrôleur fait référence à la classe de contrôleur dans votre projet, et la vue se réfère à la combinaison de page/méthode dans le contrôleur. Ainsi, par exemple, vous pouvez écrire en vue de prendre une entrée et ressembler à quelque chose comme ce qui suit

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

Maintenant que pour SEO Friendly URL, c'est juste du sucre inutile. Vous créez votre contrôleur de telle sorte qu'il ajoute une incrustation inoffensive à la fin de l'URL.

Ainsi, par exemple, vous remarquerez que les trois méthodes suivantes pour arriver à cette question produisent le même résultat:

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

Stack Overflow est l'auteur leurs valeurs de route telles que le bit qui se produit après l'ID de question n'est pas vraiment nécessaire d'avoir.

Alors pourquoi l'avoir là? Pour augmenter Google PageRank. Google PageRank s'appuie sur beaucoup de choses, dont la somme totale est secrète, mais l'une des choses que les gens ont remarqué est que, toutes choses égales par ailleurs, les URL descriptives des textes sont plus hautes. C'est pourquoi Stack Overflow utilise ce texte après le numéro de la question.

1

Il est également important de gérer les URL héritées. J'ai une base de données d'anciennes et nouvelles URL et je redirige avec le code suivant;

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 
} 

Espérons que cela est utile

3

Soyez prudent lors de la mise en œuvre des itinéraires avec des noms à eux, vous devez valider que le nom entrant est correct ou vous pouvez finir par nuire à votre SEO Classement sur la page par Avoir plusieurs URI partagent le même contenu, soit configurer une canonique appropriée ou avoir votre contrôleur problème 301 lors de la visite de la «mauvaise» URI.

Un writeup rapide, je l'ai fait sur la dernière solution peut être trouvée à:
http://mynameiscoffey.com/2010/12/19/seo-friendly-urls-in-asp-net-mvc/

Quelques infos sur sacerdotaux:
http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html

+0

Très cool, merci pour l'entrée. –

Questions connexes