Un error 500 que impide la indexación en ASP.NET 2 + url rewriting
Si desarrolláis en ASP.NET 2 y utilizáis la escritura de URL´s (url rewriting), este post es de lectura obligatoria.
Llevo mucho tiempo intentando sacar tiempo para llamar la atención a ese bug en ASP.Net 2, del que no hay prácticamente información en español. De hecho cuando me pasó estuve varios días buscando la solución hasta que caí en un blog francés que me enlazaba por su parte con el blog de Matt Cutts (el famoso ingeniero de Google) que hablaba de ese problema. Es un bug que supone un impacto catastrófico sobre la indexación y por tanto sobre toda la estrategia SEO del site.
Descubrí este bug en noviembre del año pasado, trabajando sobre la optimización de un Site de un cliente de Nurun, habíamos reescrito las rutas para unos óptimos resultados, y mientras para nosotros todo funcionaba bien, Google y Yahoo no indexaban nada más allá de la página principal. Una semana después del lanzamiento, nos demos cuenta de que no era algo habitual ya que Googlebot pasaba todos los días por la página principal y no podía acceder a más páginas. Lo que hicimos fue instalar una aplicación para seguimiento de indexación, y ahí fue la gran sorpresa: Googlebot y Yahoo Slurp veían un error 500 en todas las páginas reescritas, mientras que la respuesta del servidor para nosotros era un 200, es decir OK.
Mediante Fiddler, vimos como cuando accedíamos a una página interior con el User-Agent Mozilla/4.0 el servidor daba la respuesta correcta (200), y cuando cambiábamos al User-Agent Mozilla/5.0 la respuesta del servidor era un 500. (Error interno de servidor), hay que saber que Google y Yahoo usan el mozilla/5.0 por tanto no eran capaces de ver nuestro contenido y por tanto no lo podían indexar, live.com sinembargo sí indexaba todo el site porque entra con Mozilla/4.0
Detectado el problema, el siguiente paso era más facil: investigar porque devuelve error 500 para Mozilla.5/0, había que especificarle a ese browser que estamos reutilizando url rewriting para que pueda interpretar bien las rutas. Lo cual lo hicimos añadiendo un archivo llamado GoogleBot.browser a la carpeta App_Browsers, el contenido de este archivo tiene que ser el siguiente:
<browsers>
<browser id=“Googlebot“ parentID=“Mozilla“>
<identification>
<userAgent match=“Googlebot“ />
</identification>
<capabilities>
<capability name=“browser“ value=“Googlebot/2.1“ />
<capability name=“Version“ value=“4.0“ />
<capability name=“MajorVersion“ value=“4“ />
<capability name=“MinorVersionString“ value=“” />
<capability name=“MinorVersion“ value=“.0“ />
<capability name=“activexcontrols“ value=“true“ />
<capability name=“backgroundsounds“ value=“true“ />
<capability name=“cookies“ value=“true“ />
<capability name=“css1“ value=“true“ />
<capability name=“css2“ value=“true“ />
<capability name=“ecmascriptversion“ value=“1.2“ />
<capability name=“frames“ value=“true“ />
<capability name=“javaapplets“ value=“true“ />
<capability name=“javascript“ value=“true“ />
<capability name=“jscriptversion“ value=“5.0“ />
<capability name=“supportsCallback“ value=“true“ />
<capability name=“supportsFileUpload“ value=“true“ />
<capability name=“supportsMultilineTextBoxDisplay“ value=“true“ />
<capability name=“supportsMaintainScrollPositionOnPostback“ value=“true“ />
<capability name=“supportsVCard“ value=“true“ />
<capability name=“supportsXmlHttp“ value=“true“ />
<capability name=“tables“ value=“true“ />
<capability name=“vbscript“ value=“true“ />
<capability name=“w3cdomversion“ value=“1.0“ />
<capability name=“xml“ value=“true“ />
<capability name=“tagwriter“ value=“System.Web.UI.HtmlTextWriter“ />
</capabilities>
</browser>
</browsers>
Y para Yahoo, yahooslurp.browser :
<browsers>
<browser id=“Slurp“ parentID=“Mozilla“>
<identification>
<userAgent match=“Slurp“ />
</identification>
<capabilities>
<capability name=“browser“ value=“Yahoo!Slurp“ />
<capability name=“Version“ value=“4.0“ />
<capability name=“MajorVersion“ value=“4“ />
<capability name=“MinorVersionString“ value=“” />
<capability name=“MinorVersion“ value=“.0“ />
<capability name=“activexcontrols“ value=“true“ />
<capability name=“backgroundsounds“ value=“true“ />
<capability name=“cookies“ value=“true“ />
<capability name=“css1“ value=“true“ />
<capability name=“css2“ value=“true“ />
<capability name=“ecmascriptversion“ value=“1.2“ />
<capability name=“frames“ value=“true“ />
<capability name=“javaapplets“ value=“true“ />
<capability name=“javascript“ value=“true“ />
<capability name=“jscriptversion“ value=“5.0“ />
<capability name=“supportsCallback“ value=“true“ />
<capability name=“supportsFileUpload“ value=“true“ />
<capability name=“supportsMultilineTextBoxDisplay“ value=“true“ />
<capability name=“supportsMaintainScrollPositionOnPostback“ value=“true“ />
<capability name=“supportsVCard“ value=“true“ />
<capability name=“supportsXmlHttp“ value=“true“ />
<capability name=“tables“ value=“true“ />
<capability name=“vbscript“ value=“true“ />
<capability name=“w3cdomversion“ value=“1.0“ />
<capability name=“xml“ value=“true“ />
<capability name=“tagwriter“ value=“System.Web.UI.HtmlTextWriter“ />
</capabilities>
</browser>
</browsers>
Nada más corregido ese problema, íbamos viendo como la actividad de los robots aumentaba, y el número de páginas indexadas también. La gran pregunta que hicimos al final fue: ¿a cuántas Webs les está pasando eso sin que los propietarios sean conscientes?


2 Responses to “Un error 500 que impide la indexación en ASP.NET 2 + url rewriting”
Mayo 5th, 2009 saat: 18:17
Hola, yo estoy utilizando urlrewrite en asp.net 2.0, en el articulo hablas de como resolver el problema para google y yahoo.
Hay problemas con los demas buscadores?
He sobrescribido una ruta como por ejemplo articulos/ donde antes se llamaba articulos.aspx, como resolviste el problema para que los exploradores te muestren los css y los demas enlaces que se escuentren en la pagina… es decir ahora con el urlrewrite tengo un enlace a clasificados y cuando acceso a articulos me queda asi articulos/clasificados/ y deberia de quedar solo clasificados/
tienes alguna idea? de ser posible me podrias ayudar con lo que te comento. de antemano muchas gracias, y el articulo muy bueno.
Mayo 7th, 2009 saat: 0:57
el problema se plantea solo para los buscadores que usan Mozilla 5 como user agent, y son yahoo y google, lo que deberías hacer es una vez hecho el URL rewriting lanzar una llamada a esas rutas usando el googlebot, y si te devuelve un error 500 es que tienes un problema.
Leave a Reply