c't-Tipp der Woche: Crawler identifizieren, die robots.txt ignorieren

Mit einem kleinen PHP-Skript können Sie verfolgen, welche Crawler die Anweisungen auf Ihrer Webseite befolgen und welche nicht.

In Pocket speichern vorlesen Druckansicht 79 Kommentare lesen
c't-Tipp der Woche: Outlook startet nach Windows-Update nicht mehr
Lesezeit: 2 Min.
Von
  • Herbert Braun

Nicht alle Suchmaschinen-Crawler und ähnliche Web-Bots halten sich an die Steuerdatei robots.txt, mit der Website-Betreiber vorgeben, welche Bereiche sie besuchen dürfen und welche nicht.

Mit einer kleinen Falle kann man das nachvollziehen: Legen Sie auf Ihrer Homepage zwei neue Seiten an, zum Beispiel nice.php und evil.php; deren Inhalt ist egal. Um die Ergebnisse nicht mühsam aus dem Access-Log herausklauben zu müssen, bauen Sie ein kleines PHP-Skript ein, das Informationen über den Zugriff in eine Logdatei schreibt:

$props = array (
'REMOTE_ADDR' ,
'REMOTE_HOST' ,
'HTTP_USER_AGENT' ,
'SERVER_PORT' ,
'QUERY_STRING' ,
'HTTP_REFERER'
);
$log = array ( 'evil' , date ( DATE_ATOM ));
foreach ( $props as $prop ){
$entry = array_key_exists ( $prop , $_SERVER )? $_SERVER [ $prop ]: '' ;
array_push ( $log , $entry );
}
file_put_contents ( 'bot.log' , join ( " \t " , $log ). " \n " , FILE_APPEND );

Nun verweisen Sie von der Startseite auf diese beiden Seiten und lassen die Links per CSS verschwinden, etwa mit transparenter Schrift in winziger Größe (der Google-Bot erkennt angeblich 'display: none' ). Zuletzt ergänzen Sie robots.txt:

User-agent: * 
Disallow: /evil.php
Allow: /nice.php

Nun können Sie in bot.log studieren, welche Bots bei Ihnen vorbeikommen und ob sie sich an die Spielregeln halten. Bei einem Test auf einer privaten Website kamen innerhalb von vier Tagen gut ein Dutzend verschiedene Bots vorbei – bekannte, obskure und dubiose mit offensichtlich gefälschter User-Agent-Kennung, die auch die robots.txt ignorierten.

Diesen und über 8000 weitere c't-Tipps finden Sie unter ct.de/hotline

(Herbert Braun) / (acb)