Tutorials
Inleiding webcrawlers
Geen PHP tutorial, maar wel een nuttige tutorial denk ik. Leer hoe je (verschillende) zoekmachines delen van je site kan laten indexeren (of juist niet).
Pagina 1
Het bestand robots.txt
Het bestand is een gewoon tekstbestand en plaats je in de root van je host, meestal is dat dezelfde locatie als waar je index.php staat. Wat er in het bestand hoort te staan is vrij simpel; eerst definieer je een zoekmachine en vervolgens definieer je voor die zoekmachine wat hij wel en niet mag indexeren. De meest simpele vorm is de volgende:
User-agent: *
Disallow:
Dit bestand zou alle zoekmachines (en andere spiders die robots.txt gebruiken) toelaten, en is dus in feite hetzelfde als wanneer je het bestand niet zou plaatsen. Merk op dat het gebruik van zogenaamde wildcards (*) is toegestaan in het veld ‘user-agent’; hiermee specificeer je dus in één keer alle robots. In tegenstelling tot wat je zou verwachten, bestaan er geen veld ‘Allow’.
Het gebruik van wildcards in het veld ‘disallow’ is officieel niet toegestaan, alhoewel sommige zoekmachines (waaronder Google) hier wel mee kunnen werken.
Zou je willen dat geen enkele spider die gebruik maakt van robots.txt je site indexeert, dan plaats je een / achter het veld disallow.
Je krijgt dan:
User-agent: *
Disallow: /
Een andere situatie: je site mag wel geïndexeerd worden door alle robots, maar je hebt enkele directories die je liever niet tussen de zoekresultaten wilt terugzien. De reeds genoemde phpMyAdmin is bijvoorbeeld niet slim om te laten indexeren, evenals de directory /cgi-bin en ook /images wil je niet delen.
Je maakt het volgende bestand aan:
User-agent: *
Disallow: /phpMyAdmin/
Disallow: /cgi-bin/
Disallow: /images/
Een kleine kanttekening: zou je de laatse / weghalen, dan worden ook bestanden in de huidige directory geweigerd. Stel dat je naast de directory images ook een bestand hebt, genaamd images.html die in de rootdirectory staat, dan wordt dat bestand eveneens geweigerd. Een beginnende / is verplicht!
Ander voorbeeld: je wilt dat je site alleen beschikbaar is voor de grote zoekmachines Google, MSN Search, Altavista en eventueel andere (Nederlandse) zoekmachines. Dat kan:
User-agent: *
Disallow: /
User-agent: googlebot
Disallow:
User-agent: msnbot
Disallow:
User-agent: scooter
Disallow:
Ook hier kan je meerdere disallows gebruiken. Je hebt bijvoorbeeld directories aangemaakt voor de vorige drie zoekmachines. Ze mogen alleen in hun eigen directory snuffelen.
User-agent: *
Disallow: /
User-agent: googlebot
Disallow: /msn
Disallow: /altavista
User-agent: msnbot
Disallow: /google
Disallow: /altavista
User-agent: scooter
Disallow: /google
Disallow: /msn
Zoals je wellicht wel eens hebt gezien, staan er soms achter een hit in Google de link ‘meerdere resultaten van <domein>’. Als je erop klikt krijg je vele pagina’s, vaak dynamisch gegenereerd (te herkennen aan de ?, bv. http://www.jouwdomein.com/?page=contact). Wil je die dynamisch gegenereerde pagina’s nou uit Google krijgen, dan moet je het volgende toevoegen.
User-agent: googlebot
Disallow: /*?
Hier zie je het gebruik van de wildcard specifiek voor Google in het disallow veld. Eigenlijk mag dit niet, en als je je robots.txt laat valideren, dan zul je een waarschuwing krijgen.
Je kan het ook toepassen op specifieke bestandsextensies. /*.gif$ zal bijvoorbeeld alle plaatjes met de gif-extensie blokkeren. Je moet dan wel het $-teken gebruiken op het einde.
Het gebruik van commentaar is ook toegestaan: alles na een # en op dezelfde regel wordt genegeerd.
#Dit is commentaar
User-agent: googlebot # maar dit ook
Disallow: /*?
User-agent: *
Disallow:
Dit bestand zou alle zoekmachines (en andere spiders die robots.txt gebruiken) toelaten, en is dus in feite hetzelfde als wanneer je het bestand niet zou plaatsen. Merk op dat het gebruik van zogenaamde wildcards (*) is toegestaan in het veld ‘user-agent’; hiermee specificeer je dus in één keer alle robots. In tegenstelling tot wat je zou verwachten, bestaan er geen veld ‘Allow’.
Het gebruik van wildcards in het veld ‘disallow’ is officieel niet toegestaan, alhoewel sommige zoekmachines (waaronder Google) hier wel mee kunnen werken.
Zou je willen dat geen enkele spider die gebruik maakt van robots.txt je site indexeert, dan plaats je een / achter het veld disallow.
Je krijgt dan:
User-agent: *
Disallow: /
Een andere situatie: je site mag wel geïndexeerd worden door alle robots, maar je hebt enkele directories die je liever niet tussen de zoekresultaten wilt terugzien. De reeds genoemde phpMyAdmin is bijvoorbeeld niet slim om te laten indexeren, evenals de directory /cgi-bin en ook /images wil je niet delen.
Je maakt het volgende bestand aan:
User-agent: *
Disallow: /phpMyAdmin/
Disallow: /cgi-bin/
Disallow: /images/
Een kleine kanttekening: zou je de laatse / weghalen, dan worden ook bestanden in de huidige directory geweigerd. Stel dat je naast de directory images ook een bestand hebt, genaamd images.html die in de rootdirectory staat, dan wordt dat bestand eveneens geweigerd. Een beginnende / is verplicht!
Ander voorbeeld: je wilt dat je site alleen beschikbaar is voor de grote zoekmachines Google, MSN Search, Altavista en eventueel andere (Nederlandse) zoekmachines. Dat kan:
User-agent: *
Disallow: /
User-agent: googlebot
Disallow:
User-agent: msnbot
Disallow:
User-agent: scooter
Disallow:
Ook hier kan je meerdere disallows gebruiken. Je hebt bijvoorbeeld directories aangemaakt voor de vorige drie zoekmachines. Ze mogen alleen in hun eigen directory snuffelen.
User-agent: *
Disallow: /
User-agent: googlebot
Disallow: /msn
Disallow: /altavista
User-agent: msnbot
Disallow: /google
Disallow: /altavista
User-agent: scooter
Disallow: /google
Disallow: /msn
Zoals je wellicht wel eens hebt gezien, staan er soms achter een hit in Google de link ‘meerdere resultaten van <domein>’. Als je erop klikt krijg je vele pagina’s, vaak dynamisch gegenereerd (te herkennen aan de ?, bv. http://www.jouwdomein.com/?page=contact). Wil je die dynamisch gegenereerde pagina’s nou uit Google krijgen, dan moet je het volgende toevoegen.
User-agent: googlebot
Disallow: /*?
Hier zie je het gebruik van de wildcard specifiek voor Google in het disallow veld. Eigenlijk mag dit niet, en als je je robots.txt laat valideren, dan zul je een waarschuwing krijgen.
Je kan het ook toepassen op specifieke bestandsextensies. /*.gif$ zal bijvoorbeeld alle plaatjes met de gif-extensie blokkeren. Je moet dan wel het $-teken gebruiken op het einde.
Het gebruik van commentaar is ook toegestaan: alles na een # en op dezelfde regel wordt genegeerd.
#Dit is commentaar
User-agent: googlebot # maar dit ook
Disallow: /*?
Pagina 2
Validatie en user-agents
Zoals ik net zei: je kan je bestandje laten valideren, net zoals dat kan met html en css-bestanden. Dat kan je hier doen.
Hoe weet je welke user-agents je moet hebben voor de verschillende zoekmachines? Dat is vrij lastig, omdat zoekmachines vaak andere namen hebben voor hun spiders. Die van Altavista heet bijvoorbeeld ‘Scooter’, die van HotBot heet ‘Slurp’ (wat ik een vrij toepasselijke naam vind overigens) en die van Infoseek heet ‘Infoseek Sidewinder’.
Je zou kunnen kijken naar de statistieken van je pagina: daar staan over het algemeen ook user-agents tussen die je site hebben bezocht.

Je kan uit deze statistieken zien dat er regelmatig spiders langskomen (vaak te herkennen aan ‘Crawler’ in de naam). Maar je ziet ook direct een probleem: wie vertelt jou namelijk of Microsoft-WebDAV-MiniRedir/5.1.2600 een spinnetje is? Tenzij je kennissen hebt die toevallig bij Microsoft werken gaat niemand jou dat waarschijnlijk vertellen (ter informatie: het is geen spider, maar wordt door Microsoft gebruikt wanneer iemand je site toevoegt aan ‘Mijn netwerklocaties’; vaak FTP-locaties of gedeelde partities).
Ook zijn niet alle user-agents opgenomen in je statistieken, en zijn sommige spiders moeilijk te herkennen (op #3 staat Yahoo Slurp en op #9 nogmaals Google, maar die zijn niet echt makkelijk te herkennen tussen de andere Mozilla’s).
Om alle user-agents te verkrijgen, zou je een PHP-scriptje kunnen schrijven, wat de user-agent in een log-bestand of naar een database wegschrijft en wat gebruik maakt van $_SERVER[‘HTTP_USER_AGENT’].
Uiteraard zijn er ook mensen die lijsten bijhouden van zoekmachines. Op http://www.psychedelix.com/agents/index.shtml vind je bijvoorbeeld een uitgebreide lijst. De officiële lijst bevat meer informatie over de aparte robots, maar de lijst is niet zo uitgebreid.
Een beetje Googlen op ‘list’ en ‘crawler’, ‘spider’, ‘robot’ of ‘user-agent’ doet overigens wonderen.
Mocht je er dan ook niet uitkomen, dan helpt het soms om even een mailtje te besturen naar de desbetreffende zoekmachine. Zo heb ik laatst een e-mail gestuurd naar die van MSN Search, en de volgende dag kreeg ik een erg uitgebreide mail terug. Ik was verbaasd over de uitzonderlijk vriendelijke toon en de hoeveelheid diepgaande informatie over de bot. Hulde dus aan de helpdesk van MSN Search, zo hoort een helpdesk te antwoorden!
Hoe weet je welke user-agents je moet hebben voor de verschillende zoekmachines? Dat is vrij lastig, omdat zoekmachines vaak andere namen hebben voor hun spiders. Die van Altavista heet bijvoorbeeld ‘Scooter’, die van HotBot heet ‘Slurp’ (wat ik een vrij toepasselijke naam vind overigens) en die van Infoseek heet ‘Infoseek Sidewinder’.
Je zou kunnen kijken naar de statistieken van je pagina: daar staan over het algemeen ook user-agents tussen die je site hebben bezocht.

Je kan uit deze statistieken zien dat er regelmatig spiders langskomen (vaak te herkennen aan ‘Crawler’ in de naam). Maar je ziet ook direct een probleem: wie vertelt jou namelijk of Microsoft-WebDAV-MiniRedir/5.1.2600 een spinnetje is? Tenzij je kennissen hebt die toevallig bij Microsoft werken gaat niemand jou dat waarschijnlijk vertellen (ter informatie: het is geen spider, maar wordt door Microsoft gebruikt wanneer iemand je site toevoegt aan ‘Mijn netwerklocaties’; vaak FTP-locaties of gedeelde partities).
Ook zijn niet alle user-agents opgenomen in je statistieken, en zijn sommige spiders moeilijk te herkennen (op #3 staat Yahoo Slurp en op #9 nogmaals Google, maar die zijn niet echt makkelijk te herkennen tussen de andere Mozilla’s).
Om alle user-agents te verkrijgen, zou je een PHP-scriptje kunnen schrijven, wat de user-agent in een log-bestand of naar een database wegschrijft en wat gebruik maakt van $_SERVER[‘HTTP_USER_AGENT’].
Uiteraard zijn er ook mensen die lijsten bijhouden van zoekmachines. Op http://www.psychedelix.com/agents/index.shtml vind je bijvoorbeeld een uitgebreide lijst. De officiële lijst bevat meer informatie over de aparte robots, maar de lijst is niet zo uitgebreid.
Een beetje Googlen op ‘list’ en ‘crawler’, ‘spider’, ‘robot’ of ‘user-agent’ doet overigens wonderen.
Mocht je er dan ook niet uitkomen, dan helpt het soms om even een mailtje te besturen naar de desbetreffende zoekmachine. Zo heb ik laatst een e-mail gestuurd naar die van MSN Search, en de volgende dag kreeg ik een erg uitgebreide mail terug. Ik was verbaasd over de uitzonderlijk vriendelijke toon en de hoeveelheid diepgaande informatie over de bot. Hulde dus aan de helpdesk van MSN Search, zo hoort een helpdesk te antwoorden!
Pagina 3
Zonder robots.txt
Niet iedere crawler neemt het robots.txt bestand in acht. Dergelijke crawlers indexeren je site ook al wil je dat niet. Soms gebruiken deze crawlers metatags die je op je website plaatst (alhoewel nog maar weinig robots alleen die tag gebruiken). Voor de zekerheid zou je deze tag dus nog kunnen toevoegen:
<meta name=”robots” content=”noindex,nofollow”>
Deze tag plaats je tussen de <head> en </head> van de pagina die je niet geïndexeerd wilt hebben. Ook wordt niet verder gezocht naar hyperlinks. Je kan ook de robots specificeren zoals je dat zou doen in robots.txt.
<meta name=”googlebot” content=”index, nofollow”>
Deze metatag staat dus toe dat Google de site indexeert, maar dat deze niet wordt geanalyseerd op hyperlinks.
Robots die zowel robots.txt als metatags negeren, kan je natuurlijk gewoon weigeren. Ikzelf vind het ongenode gasten en ben momenteel bezig met het schrijven van een script wat dergelijke crawlers buiten de deur houdt, terwijl 'gewone' user-agents wel worden toegelaten. Niet helemaal veilig, maar veel meer kan je imho niet doen :)
<meta name=”robots” content=”noindex,nofollow”>
Deze tag plaats je tussen de <head> en </head> van de pagina die je niet geïndexeerd wilt hebben. Ook wordt niet verder gezocht naar hyperlinks. Je kan ook de robots specificeren zoals je dat zou doen in robots.txt.
<meta name=”googlebot” content=”index, nofollow”>
Deze metatag staat dus toe dat Google de site indexeert, maar dat deze niet wordt geanalyseerd op hyperlinks.
Robots die zowel robots.txt als metatags negeren, kan je natuurlijk gewoon weigeren. Ikzelf vind het ongenode gasten en ben momenteel bezig met het schrijven van een script wat dergelijke crawlers buiten de deur houdt, terwijl 'gewone' user-agents wel worden toegelaten. Niet helemaal veilig, maar veel meer kan je imho niet doen :)
Pagina 4
Verdere informatie
Op de pagina’s van zoekmachines kun je vaak informatie vinden over welke spider(s) gebruikt wordt (worden), of die via robots.txt werkt of met metatags en bijvoorbeeld het accepteren van wildcards. Op http://www.google.nl/webmasters/bot.html vind je die informatie voor Google.
Je kunt het bestand robots.txt overigens ook combineren met mod_rewrite, maar de behandeling daarvan valt buiten het bestek van deze tutorial.
Ik geloof dat ik de basis van spiders die jouw website bezoeken wel zo’n beetje behandeld heb. Mocht je nog vragen of reacties hebben naar aanleiding van deze tutorial, dan kan je die natuurlijk stellen in het forum!
Ik heb hier geen bronvermeldingen, omdat de informatie uit deze tutorial een potpourri is van andere handleidingen en tutorials. Wil je verder lezen, dan kan je zoeken op 'robots.txt'.
Je kunt het bestand robots.txt overigens ook combineren met mod_rewrite, maar de behandeling daarvan valt buiten het bestek van deze tutorial.
Ik geloof dat ik de basis van spiders die jouw website bezoeken wel zo’n beetje behandeld heb. Mocht je nog vragen of reacties hebben naar aanleiding van deze tutorial, dan kan je die natuurlijk stellen in het forum!
Ik heb hier geen bronvermeldingen, omdat de informatie uit deze tutorial een potpourri is van andere handleidingen en tutorials. Wil je verder lezen, dan kan je zoeken op 'robots.txt'.
Reacties
0