3

après avoir lu cet article "Slash or not to slash" (lien: http://googlewebmastercentral.blogspot.com/2010/04/to-slash-or-not-to-slash.html) sur Google Webmaster Central Blog (l'officiel) J'ai décidé de tester mon Application ASP.NET MVCSEO: URL dupliquées avec et sans tiret "/" et ASP.NET MVC

Par exemple: http://domain.com/products et http://domain.com/products/ (avec «/» à la fin), retournez le code 200, ce qui signifie: Google, il comprend que deux liens différents et susceptibles d'être un « contenu dupliqué ». Ils suggèrent de choisir la façon dont vous voulez ... avec ou sans tiret et de créer une redirection 301 permanente de la manière préférée.

Donc, si je choisis sans tiret, quand j'essaie d'accéder http://domain.com/products/ il renverra un 301 au lien sans tiret: http://domain.com/products. La question est, comment puis-je faire avec ASP.NET MVC?

Merci, Gui

Répondre

0

vous devez vérifier l'URI en cas INIT et vérifiez l'URI pour voir si elle vient avec la barre oblique, si elle est, il suffit de faire une redirection et ajouter le 301 tête à la réponse de sortie.

+0

Dois-je faire sur Application_BeginRequest? –

2

Si vous utilisez IIS 7, vous pouvez utiliser l'extension de réécriture d'URL ScottGu a un article de blog à ce sujet here. Alternativement, si vous voulez le faire en code, vous pouvez hériter de PerRequestTask. Voici quelques exemples de code supprime le www d'une adresse - c'est de Shrinkr:

public class RemoveWww : PerRequestTask 
{ 
    protected override TaskContinuation ExecuteCore(PerRequestExecutionContext executionContext) 
    { 
     const string Prefix = "http://www."; 

     Check.Argument.IsNotNull(executionContext, "executionContext"); 

     HttpContextBase httpContext = executionContext.HttpContext; 

     string url = httpContext.Request.Url.ToString(); 

     bool startsWith3W = url.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); 
     bool shouldContinue = true; 

     if (startsWith3W) 
     { 
      string newUrl = "http://" + url.Substring(Prefix.Length); 

      HttpResponseBase response = httpContext.Response; 

      response.StatusCode = (int) HttpStatusCode.MovedPermanently; 
      response.Status = "301 Moved Permanently"; 
      response.RedirectLocation = newUrl; 
      response.SuppressContent = true; 
      response.End(); 
      shouldContinue = false; 
     } 

     return shouldContinue ? TaskContinuation.Continue : TaskContinuation.Break; 
    } 
} 

Vous juste besoin de vérifier l'URL se terminant par un/dans votre code.

** Notez que cela utilise un espace de noms dll - System.Web.MVC.Extensibility tiers. **

+0

J'ai trouvé le lien de Scott Gu que vous avez posté très utile. – NGRhodes

1

Il dosnt vraiment question pour Google, mais ce qui importe est de savoir si les deux urls' http://domain.com/products et http://domain.com/products/ montrent la même page, vous devez aussi regarder avec les serveurs Windows que les liens vers votre site comme des pages externes où le l'utilisateur a tapé http://domain.com/PRODUCTS/ sera également considéré comme une page différente car le web est sensible à la casse.

Il se trouve autour de ce avec l'utilisation d'URL canonique balise meta, il dit de google ce que le nom de la page est vraiment, donc évitera les pages en double qui fourmi vraiment diuplicate

http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html