woensdag 2 april 2008

Een hoge notering op zoekmachines willen we natuurlijk erg graag, maar om in de resultaten van zoekmachines voor te komen, moet de zoekmachine de site wel kunnen indexeren. Dat lijkt allemaal vanzelfsprekend, maar is dat ook zo? Met ASP.NET 2.0 kan daar een addertje onder het gras zitten.

Sommige sites maken standaard gebruik van cookies, bewust of onbewust. Zonder aanpassingen wordt voor Session state gebruik gemaakt van een cookie met daarin het ID van de Session state, zodat deze terug te leiden is naar een specifieke gebruiker. Dat is op zich geen probleem voor de meeste zoekmachines, maar kan toch gevolgen hebben voor een slechte indexering in combinatie met ASP.NET 2.0.

Crawlers van zoekmachines identificeren zichzelf vaak als Mozilla/5.0. Ze doen dit om ervoor te zorgen dat meer sites ze op een goede manier accepteren en er dus meer sites geïndexeerd kunnen worden. Ook Google doet dit sinds 2006:

  • Voor: Googlebot/2.1 (+http://www.googlebot.com/bot.html)
  • Na: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

In ASP.NET 2.0 wordt gekeken naar de User agent en wordt vervolgens in de browserdefinities, die bekend zijn, gekeken welke mogelijkheden worden ondersteund, zoals javascript en cookies. Als de User agent niet herkend wordt, wordt gebruik gemaakt van de standaard browserdefinitie (default.browser), waarin beschreven staat dat cookies worden ondersteund. In het geval van de zoekmachines wordt de browserdefinitie van Mozilla (mozilla.browser) gevonden en wordt daarin opgezocht welke versie en welke variant wordt gebruikt. Er is echter geen definitie voor de generieke Mozilla/5.0, dus wordt de meest relevante definitie gebruikt, wat neerkomt op Mozilla/1.0 en er dus voor zorgt dat ASP.NET 2.0 vindt dat er geen cookies ondersteund worden en zorgt er dan voor dat het ID van de Session state in de url wordt meegestuurd.

Als je hier problemen van ondervindt en je site wordt niet goed geïndexeerd door zoekmachines - zoekresultaten naar je site bevatten de ID's van de Session state en werken daardoor niet, er worden niet of nauwelijks pagina's geïndexeerd of de crawler stuit op foutmeldingen bij het indexeren - dan is het mogelijk om zelf een browserdefinitie op te geven die ervoor zorgt dat de zoekmachines wel worden herkend met mogelijkheden als cookies.

In de speciale map App_Browsers kun je het bestand met de juiste browserdefinites opslaan. Het is niet nodig om de applicatie opnieuw te compileren, dus het kan zonder problemen in bestaande, draaiende applicatie toegepast worden.

Bij bestaande, draaiende applicaties kun je de map zonder problemen aanmaken en het bestand naar deze map kopiëeren. In de ontwikkelomgeving is het verstandig om het op de volgende manier te doen:
  1. Om de map App_Browsers aan te maken, klik je met de rechter muisknop op het betreffende Web Application Project en kies je voor Add > Add ASP.NET Folder > App_Browsers.
  2. Vervolgens kopiëer je het bestand met de juiste browserdefinitie in Visual Studio (dus niet de verkenner) naar deze map.
Je kunt het bestand met de browserdefinities hier downloaden.





Oorspronkelijke blogpost waar het meeste van deze informatie gevonden is: http://www.kowitz.net/archive/2006/12/11/asp.net-2.0-mozilla-browser-detection-hole.aspx