Zoekmachine bots en serverbelasting

Googlebot

Googlebot

Zoekmachine bots zoals de Googlebot kunnen een grote impact hebben op de serverbelasting. De load kan zelfs ongemerkt van het ene op het andere moment gigantisch toenemen, zonder dat je als websitebeheerder iets hebt verandert. Gelukkig zijn er een aantal acties die je kunt ondernemen om de belasting weer op een gezond niveau te krijgen.

We hebben hier zelf met onze eigen site byte.nl ook mee te maken gehad en zullen daarom aan de hand van printscreens en praktische tips toelichten hoe je de load veroorzaakt door zoekmachine bots zoals de Googlebot kunt terugdringen en dus ook je BPU. Het kan dus nogal schelen in je portemonnee.

En een ander bijkomend voordeel is natuurlijk dat een lage serverbelasting ook nog eens gunstig is voor de snelheid van de server en dus voor de snelheid van je website. En ja, dat is natuurlijk ook zeker niet onbelangrijk! :)

Wat zijn zoekmachine bots en wat doen ze?

Een zoekmachine bot, ook wel bekend als zoekmachine spider, is een geautomatiseerde programma dat websites indexeren ten behoeve van de weergave in de zoekresultaten. Dat doorzoeken van pagina's wordt ook wel crawlen genoemd.

De bots bekijken de leesbare content van de pagina's die ze scannen. Die content is nodig om te bepalen bij welke zoekopdrachten in de zoekmachine de pagina's relevant zijn. Daarnaast worden linkjes die de bots tegenkomen op de pagina's onder andere gebruikt om nog onbekende pagina's te vinden. Als je je website niet handmatig aanmeldt bij de zoekmachines, is dit de manier waarop deze toch terecht komen in de zoekresultaten van zoekmachines.

Zoekmachine bots en de serverbelasting

Voor de load op de servers is er geen verschil of een pagina wordt opgevraagd door een zoekmachine bot of door een 'normale' bezoeker. Voor ieder verzoek zijn er resources van de webserver en eventueel ook databaseserver nodig. Hoe vaker de zoekmachine bots je site bezoeken en hoe groter het aantal pagina's dat ze bekijken, des te hoger ook de belasting voor je servers.

googlebot crawlstatistieken byte.nl

Googlebot crawlgegevens byte.nl

Als de verschillende zoekmachine bots dus erg vaak langs komen of je website erg veel verschillende pagina's bevat die de bots doorzoeken, zul je dit gegarandeerd terug zien in een hogere serverbelasting dan wanneer de bots in een lagere frequentie je site bezoeken en het aantal te indexeren pagina's klein is.

databaseserver belasting byte.nl

databaseserver belasting byte.nl

Een duidelijk voorbeeld geven we aan de hand van onze eigen website byte.nl in de afbeeldingen hier rechts. Als eerste boven zie je een grafiek van het aantal gecrawlde pagina's door de Googlebot. Halverwege september nam dat in een keer gigantisch toe.

De tweede grafiek daaronder is een grafiek van onze eigen databaseserverbelasting. Deze stijging werd volledig veroorzaakt door de extra belasting door de Googlebot. Waar dit door kwam, vertellen we later in dit artikel.

Hoe kun je de serverbelasting door zoekmachinebots verminderen?

Om de serverload terug te dringen, heb je als websitebeheerder gelukkig een aantal stappen die je zelf direct kunt zetten. In dit artikel zullen we twee effectieve acties behandelen:

  1. Voorkom dat specifieke delen van je website of individuele pagina's worden doorzocht door zoekmachinebots;
  2. Reguleer de crawlsnelheid van de zoekmachinebots. Die mag soms best wat lager;

1. Voorkom de indexatie van specifieke delen van je website of individuele pagina's

Je kunt zelf instellen welke pagina's je niet geïndexeerd wilt hebben. Deze pagina's zullen dan uit de zoekmachineresultaten verdwijnen (dit kan soms enige tijd duren nadat je het hebt ingesteld) en zullen niet meer doorzocht worden door zoekmachinebots, wat scheelt in de serverbelasting. Dit kun je als volgt instellen:

Hoe werkt een robots.txt file

Hoe werkt een robots.txt file

Met behulp van een robots.txt file, vertel je de zoekmachinebots welke pagina ze niet mogen bezoeken (disallow). Dit robots.txt bestand zet je in de root van je hoofddomein. Bij een juist gebruik, zullen de zoekmachinebots de hierin door jou opgelegde regels netjes naleven. Op onze kennisbank leggen we stap voor stap uit hoe een robots.txt file werkt.

Als je voor individuele pagina's op je website wilt instellen dat deze niet geïndexeerd mag worden door zoekmachinebots, kun je dit doen door in de metatag "noindex" te gebruiken. Dit is echter vooral effectief om de pagina uit de zoekresultaten te halen. De zoekmachinebot moet immers de pagina crawlen om überhaupt te zien dat deze de tag "noindex" bevat. Als je daarnaast nog de metatag "nofollow" toevoegt, vertel je de crawlers de links op deze pagina niet te volgen.

2. Reguleer de crawlsnelheid van de zoekmachinebots

Crawlsnelheid Googlebot instellen

Crawlsnelheid Googlebot instellen

Via je Google Webmasterhulpprogramma's kun je de crawlsnelheid van de Googlebot handmatig aanpassen. Dit kun je doen onder Siteconfiguratie > Instellingen > Aangepast crawlsnelheid instellen.

Wil je dit meteen voor alle zoekmachinebots doen en dus niet alleen voor Google, dan kun je het ook via je robots.txt file instellen. Lees op onze kennisbank hoe je zo'n crawl-delay instelt.

Let op, deze handmatige instelling geldt maar voor 90 dagen. De kans is groot dat de Googlebot daarna weer meteen terugschiet naar de (te hoge) crawlsnelheid. Hou er dus rekening mee dat je dit mogelijk steeds opnieuw zult moeten aanpassen.

Hoe voorkom je een op hol geslagen zoekmachine bot?

Laten we nog even teruggaan naar het voorbeeld van Byte.nl. Aangezien we geen wijzigingen hadden doorgevoerd die de gigantische stijging konden verklaren, waren we erg benieuwd wat er voor had gezorgd dat de Googlebot zo op hol was geslagen:

Niet bestaande pagina's / doodlopende verwijzingen

Een speurtocht door onze Google Webmasterhulpprogramma's leerde ons dat de Googlebot een hele lading voor ons nog onbekende categorie-url's en nieuwsartikelenverwijzingen had gevonden die ook nog eens een foutmelding opleverden. De Googlebot bleef steeds maar controleren of de verwijzingen al werkten en sloeg op hol. Een kwestie van goede redirection regels instellen (in ons geval met behulp van de Yireo extensie Dynamic404).

Hetzelfde probleem kan ontstaat als verwijderde pagina's niet worden doorverwezen naar een andere pagina. Er bestaan namelijk vaak nog verwijzingen naar de verwijderde pagina. De zoekmachinebots kijken volgen alle gevonden verwijzingen (url's). Komen deze op een niet bestaande pagina uit dan zal de zoekmachinebot deze pagina herhaaldelijk proberen te indexeren.

Layered navigation: voor ieder product een pagina, vermenigvuldigd via filters

Layered navigation Magento

Layered navigation

Wat we regelmatig tegenkomen, met name bij Magento, is dat er voor ieder product een aparte URL wordt gegenereerd. Door middel van Layered navigation kan er een filter worden toegepast. Dit werkt als volgt:

Op een kleding site sorteer je eerst ‘overhemden’, hierbij word een overzicht gemaakt van alle overhemden in alle maten en kleuren met een bepaald adres (URL). Met de filter  'blauw' wordt er een nieuw adres (URL) gegenereerd, enz. Voor alle mogelijke filtercombinaties ontstaat er een eigen url die wordt gecrawld door de zoekmachine bots.

Op deze manier is er al gauw sprake van tienduizenden pagina’s  terwijl je voor je gevoel slechts naar één pagina kijkt. En dan heb je niet één zoekmachinebot die die tienduizenden pagina's afstruint, maar al snel meer dan 5! Dit kan je hele server voltrekken...

Wie herkent het en heeft een goede oplossing voor dit probleem?

Lees de reacties onderaan dit artikel. Daar vind je al enkele praktische tips. Ook het artikel Reduce Magento Resources using meta tag robots is een praktische handleiding.

Aanvullende tips en suggesties zijn natuurlijk nog altijd welkom. Laat het ons graag weten via een reactie of support@byte.nl.

  • http://twitter.com/markvds Mark van der Sanden

    We hebben ervaring met een Magento webshop waar bijna 80% van het verkeer werd veroorzaakt door zoekmachine-robots. Er werden zo’n 7.000 pagina’s per dag door Googlebot bezocht op een totaal van 900 (configurable) producten. Absurd veel dus!

    Wat bleek? Googlebot indexeerde de hele dag voornamelijk de layered navigation. We hebben toen verschillende oplossingen bedacht, die we elk uitgeprobeerd hebben en waarvan we de meeste uiteindelijk weer af konden schieten.

    1. URL parameters. Google Webmaster Tools heeft een mooie tool die heet ‘URL parameters’ waar je kunt aangeven wat elke URL parameter (GET-variabele) doet en wat Googlebot ermee moet/mag doen. Dat leek een oplossing, maar Googlebot blijkt deze configuratie compleet te negeren. Als wij instelden dat bijvoorbeeld de parameter ‘color’ slechts het resultaat beperkt en dat we wilden dat Googlebot de pagina’s met deze parameter niet bezocht, bleek Googlebot nogal doof voor deze aanwijzingen en ging gewoon door met 7.000 pagina’s per dag indexeren.

    2. Canonical meta tag
    De canonical meta tag geeft aan wat de ‘basis-url’ van een pagina is. Pagina’s met dezelfde canonical URL worden door Google slechts één keer in de zoekindex opgenomen. Nuttig en voorkomt vervuiling van Googles zoekindex. Maar Googlebot moet de pagina wel eerst bezocht hebben om erachter te komen dat in de zoekindex al een pagina voorkomt met dezelfde canonical URL. Geen oplossing tegen de overvloed aan bezoek van Googlebot, dus.

    3. Noindex meta tag
    Je kunt tegen Google zeggen dat ‘ie een bepaalde pagina niet moet indexeren door een “noindex” meta tag op te nemen in de pagina. Dit werkt, maar net als met de canonical meta tag moet de pagina eerst binnengehaald worden door Googlebot voordat ‘ie erachter kan komen dat de pagina niet binnengehaald had moeten worden.

    4. Robots.txt
    Onze enig overgebleven mogelijkheid was gebruik maken van robots.txt. Een manier waarvan Google zelf ook zegt dat je die beter niet kunt gebruiken voor het beperken van crawlen van een website omdat Google daarmee een hoop context mist in het beoordelen van je overige pagina’s.

    Uiteindelijk zijn we op zoiets uitgekomen, om alle GET veriabelen die gebruikt worden in de layered navigation te verbieden (dit is slechts een deel, maar voldoende om het idee te snappen):
    User-agent: *
    Disallow: /*?p=*
    Disallow: /*&p=*
    Disallow: /*?price=*
    Disallow: /*&price=*
    Disallow: /*?color=*
    Disallow: /*&color=*
    Disallow: /*?limit=*
    Disallow: /*&limit=*
    Disallow: /*?order=*
    Disallow: /*&order=*
    Disallow: /*?dir=*
    Disallow: /*&dir=*

    En die laatste manier, die bleek de enige te zijn die werkt. Op het moment wordt 28% van het verkeer veroorzaakt door robots. Is nog steeds hoog, maar acceptabel. Het BPU-verbruik is met tweederde afgenomen.

    En o ja, als je bovenstaand voorbeeld volgt moet je niet vergeten om Google een sitemap aan te leveren, anders komt ‘ie mogelijk bepaalde producten helemaal niet meer tegen.

  • http://www.byte.nl/cms/ Suzanne

    Ha Mark,

    Bedankt voor je ontzettend snelle en uitgebreide reactie, dit is precies waar we naar op zoek waren!
    We hadden net een beloning uitgeschreven voor een gratis Magento1000 pakket (http://www.byte.nl/cms/nieuws/nieuws/algemeen-nieuws/965-maak-een-instructie-en-krijg-gratis-hosting.html), dus als je weet voor welke shop je het pakket graag wil gebruiken, dan horen we het graag! :)

    Groet, Suzanne

  • http://www.facebook.com/kelvin.kuiper Kelvin Kuiper

    Ga in je template map naar: catalog/layer/filter.phtml. Hier kun je rel=”nofollow” in de a zetten. Hierdoor hoef je bij nieuwe filters niet extra bestanden aan te passen zoals robots.txt

  • VanKaarstotServet

    Hoi Mark, handige info, dank je.
    Je zegt: (dit is slechts een deel, maar voldoende om het idee te snappen):
    Welnu, ik snap het idee, maar zou niet weten hoe ik het verder moet aanvullen, heb je wellicht het hele overzicht?

  • Mark van der Sanden

    Oeps, zie nu pas dat er reacties geplaatst zijn :) Aanvullen doe je door te kijken welke parameters allemaal verantwoordelijk zijn voor je layered navigation. Als je een attribuut ‘lengte’ hebt met de code ‘length’ (zie in je attributenbeheer in Magento), dan zullen er bij jou ook URL’s zijn waar ‘length=xxx’ (waarde xxx een id is die refereert aan een waarde in je backend) in voorkomt. Die sluit je vervolgens uit door twee extra regels toe te voegen met ‘length’ als variabelenaam.

    De codes die Magento zelf gebruikt, los van de attributen die je in de layered navigation gebruikt, zijn:
    - p (voor pagina-aanduiding)
    - limit (voor het aantal producten per pagina)
    - order (waarop moet er gesorteerd worden?)
    - dir (aflopend of oplopend sorteren?)

    Alle andere codes zijn dus voor de attributen in de layered navigation. Nu is het natuurlijk wel zo dat het op zich al heel veel scheelt om bovenstaande 4 parameters uit te sluiten – van iedere attribuutwaarde-combinatie wordt dan nog maar 1 pagina geïndexeerd en bezocht.

  • Mark van der Sanden

    Helemaal waar, maar als Google al heel hard bezig is met het indexeren van de je layered navigation dan heb je hier niet zoveel meer aan; Google weet al van het bestaan van de pagina’s en zal ze dus indexeren.