2010-12-06 12 views
7

Ich habe die härteste Zeit, die Bestimmung der Ursache unserer Asp.net-Website nicht indiziert in Suchmaschinen - die gesamte Website. Wenn ich Googles Tool "Fetch As Googlebot" verwende, wird der folgende Fehler ausgegeben. Ich stellte sicher, dass meine Seite mit deaktivierten Sessions funktioniert (dh sessionMode = "Off" in web.config), ich habe im ganzen Internet gegoogelt und immer noch kein Glück.Suchmaschinen nicht in der Lage, Asp.net-Website aufgrund von 302 Weiterleitungen auf Fehler Seite

Hier ist der Fehler, den ich von Googlebot bin immer:

HTTP/1.1 302 Found 
Date: Thu, 02 Dec 2010 23:05:49 GMT 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET 
X-AspNet-Version: 2.0.50727 
Location: /ErrorPage.aspx?aspxerrorpath=/Default.aspx 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 
Content-Length: 168 

<html><head><title>Object moved</title></head><body> 
<h2>Object moved to <a href="%2fErrorPage.aspx%3faspxerrorpath%3d%2fDefault.aspx">here</a>.</h2> 
</body></html> 
+0

Dies ist weniger eine Frage und mehr eine Antwort. Obwohl sehr hilfreich, mach es vielleicht Community Wiki, oder es könnte geschlossen werden. –

+0

Gut zu wissen, klingt so schwer zu haben, herauszufinden. –

+3

Sie sollten darüber bloggen, nicht eine Rhetorik oder "wie" Dokument zu posten – stillstanding

Antwort

4

ich die Antwort selbst gefunden.

Stellen Sie sicher, Request.UserLanguages! = Null zu überprüfen, bevor Sie es verwenden. Stellen Sie außerdem sicher, dass CurrentCulture auf einen gültigen Standardwert festgelegt ist. Der Grund für diese beiden Überprüfungen liegt darin, dass Bots Request.UserLanguages ​​nicht verwenden - es ist immer null. Browser verwenden Request.UserLanguages. Um es mit anderen Worten neu zu formulieren: Setzen Sie die CurrentCulture nicht, wenn Request.UserLanguages ​​null ist.

Hier ist das Problem:

Alle aspx Seiten in meiner Website aus einer benutzerdefinierten Basisklasse erben, die von System.Web.UI.Page erbt. Dies ist kein Problem, bis Sie die OnLoad() - oder Init-Ereignisse mit Code überschreiben, der nur für Bots eine Ausnahme auslöst. Ich hatte diese Codezeile in meinem OnLoad() Ereignis:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);

Dieser Code funktioniert gut, wenn aspx Seiten über einen Browser. Duh! Wer wird keinen Browser benutzen ...? antwort: googlebot und alle anderen bots.

Wie kann man überprüfen, ob der Googlebot ein Problem Indizierung Ihrer Website hat:

  1. für Google Webmastertools Registrieren, wenn Sie nicht bereits haben.
  2. Gehen Sie zu Labs -> Abrufen als Googlebot
  3. Geben Sie die URL ein, die Sie überprüfen möchten. Klicken Sie dann auf den Statuslink, um zu sehen, was der googlebot gefunden hat. Wenn googlebot irgendwelche Weiterleitungen (wie 302) zurückgibt, ist das normalerweise keine gute Sache. Wenn alle Seiten Ihrer Website 302 Weiterleitungen zu Ihrer benutzerdefinierten Fehlerseite erhalten, liegt ein Problem vor. Es bedeutet, dass Ihre Webseiten einen Fehler (eine nicht behandelte Ausnahme) verursachen, wenn googlebot versucht, auf sie zuzugreifen. Sehen Sie sich die Funktionen Page Load() und Init() an, um mögliche Fehler von googlebot zu ermitteln. Sie können Ihre Seiten auch mit der coolen Befehlszeilen-App curl (http://curl.haxx.se/) testen. Mit diesem Tool war ich in der Lage, die Site auf unserem Testserver zu testen, bevor wir in die Produktion gehen (was Sie jedes Mal tun müssten, wenn Sie eine Änderung vornehmen, wenn Sie google fetch verwenden).