Bots mit RegEx erkennen

Bots, Spiders und Crawlers erkennen mit RegEx

Es gibt Schätzungen, nach denen bis zu 50% des im Internet verursachten Traffics durch Bots, Spider, Crawler & Co. entstehen. Diese haben dabei die unterschiedlichsten Aufgaben, bei denen i.d.R. Daten gesammelt werden sollen.

Bei manch einem Projekt kann Bot-Traffic aber auch mächtig stören. Oder es soll ggf. anders behandelt werden, als menschliche Nutzer. Das folgende Script zeigt eine Möglichkeit auf, wie Bot-Traffic erkannt werden kann.

Über den Useragent, welcher bei jeder Anfrage an einen Server mitgesendet wird, lassen sich Bots am einfachsten erkennen. Wichtig zu wissen ist hierbei allerdings, dass der Useragent frei verändert werden kann. Ein Bot-Betreiber kann sich daher ohne Probleme mit einem „echten“ Useragent tarnen. Halbwegs seriöse Bots haben aber meist einen eindeutig identifizierbaren Useragent.

Die einfachste und kürzeste RegEx-Regel ist diese:

RegEx: /crawler|bot|spider/i

Damit sollten bereits bis zu 50% der Bots erkannt werden können. Um noch etwas genauer in der Erkennung zu werden, habe ich mir die bekanntesten Useragents von Bots mal genauer angeschaut und eine RegEx geschrieben, die eben auf alle diese passt. Damit sieht das ganze schon so aus:

RegEx: /crawler|bot|spider|larbin|ABACHOBot|80legs|AddSugarSpiderBot|AnyApexBot|Baidu|B-l-i-t-z-B-O-T|BecomeBot|BillyBobBot|Bimbot|Arachmo|Accoona-AI-Agent|searchme\.com|Cerberian Drtrs|DataparkSearch|Covario-IDS|findlinks|holmes|htdig|ia_archiver|ichiro|igdeSpyder|L\.webis|LinkWalker|lwp-trivial|mabontland|Google|Mnogosearch|mogimogi|MVAClient|NetResearchServer|NewsGator|NG-Search|Nymesis|oegp|Pompos|PycURL|Qseero|SBIder|SBIder|ScoutJet|Scrubby|SearchSight|semanticdiscovery|silk|Snappy|Sqworm|StackRambler|Ask Jeeves\/Teoma|truwoGPS|voyager|VYU2|^updated|TinEye|webcollage|Yahoo|yoogliFetchAgent|^Zao/i

Bau man das nun noch in eine PHP-Funktion, sodass diese überall im Quellcode leicht verwendet werden kann, könnte das so aussehen:

function is_bot($useragent){
    $regex = "/crawler|bot|spider/i";
    if(preg_match($regex, $useragent) !== 0)
    {
        return true;
    }
    return false;
}

Wichtig: Die Liste der Bots, die ich verwendet habe, kann sich laufend ändern. Neue Bots werden u.U. nicht erkannt. Auch lassen sich Bots, wie beschrieben, nicht 100pro erkennen. Das hier ist nur eine grobe Möglichkeit.

Wichtig 2: Bots machen nicht immer böse Sachen. Daher sollten Bots niemals pauschal komplett von der Webseite ausgeschlossen werden. Auch der Google-Bot wird von dem obigen RegEx erkannt. Das könnte schnell tödlich für dein SEO sein.

Freelancer. Blogger. Affiliate. Und auf Weltreise.

Kommentar verfassen