Bots ignorieren

Hallo zusammen,

da mein WebShop über Ajax läuft tracke ich die komplette Seite über die PHP-API. Dadurch werden aber auch alle Bots mitgezählt (ausser Google und MSN/Bing).

Ich habe mir daraufhin mal die “seltsamen” Besucher genauer angesehen.
Über die Seiten
http://www.user-agents.org
und
http://www.botsvsbrowsers.com

Habe ich daraufhin noch ein paar Suchmaschienen-Bots gefunden und aus der Statistik herausgefiltert.

Der entsprechende Abschnitt in der core/tracker/visit.php sieht jetzt so aus:

protected function isExcluded()
{
	$excluded = false;
	
	$ip = $this->getVisitorIp();
	$ua = $this->getUserAgent();

	/*
	 * Live/Bing/MSN bot and Googlebot are evolving to detect cloaked websites.
	 * As a result, these sophisticated bots exhibit characteristics of
	 * browsers (cookies enabled, executing JavaScript, etc).
	 */
	$dotIp = Piwik_Common::long2ip($ip);
	
	if (strpos($dotIp, '65.55') === 0				// Live/Bing
	 || strpos($dotIp, '207.46') === 0				// MSN
	 || strpos($ua, 'MSNBOT') !== false   			// MSN Search
	 || strpos($ua, 'bingbot') !== false			// Bingbot
	 || strpos($ua, 'Googlebot') !== false			// Googlebot
	 || strpos($ua, 'GoogleBot') !== false   		// GoogleBot
	 || strpos($ua, 'Google Web Preview') !== false 	// Google Instant
	 || strpos($ua, 'Mediapartners-Google') !== false	// Media Partrners GoogleBot
	 || strpos($dotIp, '4.79.204.36') === 0			// Geo-Trinity.com
	 || strpos($ua, 'Baiduspider') !== false   		// Baiduspider
	 || strpos($ua, 'BaiDuSpider') !== false   		// Baiduspider
	 || strpos($ua, 'Ezooms') !== false  			// Ezooms
	 || strpos($ua, 'YahooSeeker') !== false   		// YahooSeeker
	 || strpos($ua, 'Yahoo! Slurp') !== false   		// Yahoo! Slurp
	 || strpos($ua, 'AltaVista') !== false   		// Altavista
	 || strpos($ua, 'AVSearch') !== false  			// Altavista
	 || strpos($ua, 'Mercator') !== false  			// Altavista
	 || strpos($ua, 'Scooter') !== false   			// Altavista
	 || strpos($ua, 'InfoSeek') !== false  			// Infoseek
	 || strpos($ua, 'Ultraseek') !== false   		// Infoseek
	 || strpos($ua, 'Lycos') !== false  			// Lycos
		)
	{
		printDebug('Search bot detected, visit excluded');
		$excluded = true;
	}

Dabei ist mir die Idee gekommen, dass man sowas auch als Plugin realisieren könnte:
Eine Liste mit Suchbegriffen bzw. IP-Adressen, die man in dem Plugin einstellen kann, zusammen mit einem “Bot-Namen”.
Wird dann einer der Begriffe gefunden wird der Besuch nicht im Besucher-Log eingetragen, aber ein Zähler für diesen “Bot-Namen” hochgesetzt. Evtl. noch das Datum des letzten Bot-Besuchs speichern und fertig.

Was haltet Ihr von der Idee?
Soll ich evtl. weitere Bot-Filter hier im Forum veröffentlichen oder besteht kein Interesse?

Gruß,
Darkwing

Ich habe in den letzten 2 Tagen mein erstes Plugin geschrieben:BotTracker

Die Bedienung ist zwar noch sehr rudimentär (Konfiguration ist derzeit nur über direktes editieren einer MySQL-Tabelle möglich), aber meine bisherigen Tests ware sehr vielversprechend.

Arbeitsweise:
In einer neuen Tabelle werden Schlüsselwörter abgelegt, über die ein Bot eindeutig via UserAgent erkannt werden kann.
Bei jedem Track wird jetzt geprüft, ob eines der Schlüsselwörter im UserAgent des Besuchers gefunden wird.
In diesem Fall wird der Zeitstempel geloggt und der Zähler dieses Bots hochgesetzt.
Der Zugriff wird dann nicht im original-Besucher-Log von Piwik gezählt.

Bei der Installation wird die neue Tabelle angelegt und gleich mit paar bekannteren Bots bestückt.

Zum Plugin gehört auch ein (noch sehr einfaches) Widget, das die Daten der Tabelle anzeigt.
Unterstützte Sprachen sind bisher Deutsch und Englisch.

Soweit, sogut. Was mir also noch fehlt ist ein Widget für die Configuration (neue Bots hinzufügen, Bots (de)aktivieren, Schlüsselwörter ändern, u.s.w.) sowie freiwillige Beta-Tester.

Was ist als nächstes zu tun? Ein Piwik-Ticket öffnen?

Hallo Darkwing,

gute Idee, so ein Bot-Plugin war schon mal angedacht. Wurde allerings nicht weiter verfolgt, da das ja mit dem normalen JS-Tracking nicht läuft.

Am Besten, du öffnest ein neues Ticket zu deinem Plugin und stellst mal ein Beispiel ein.

Grüße
Peter

Schon passiert:
http://dev.piwik.org/trac/ticket/2391

hello all my friends could you plz accept me,(:P) B)-

Hallo Darkwing,

ich habe mir heute dein Plugin heruntergeladen (Version 0.22), Nachdem Upload auf den Server und der Aktivierung des Plugins bekam ich folgende Fehlermeldung:

SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name ‘idsite’

Da half mir nur noch das Plugin wieder zu löschen und es manuell aus der config.ini.php auszutragen. Also nochmal alles von vorn. Nur diesmal habe ich die beiden Upadate-Dateien weggelassen. Nun funktionierte die Installation ohne Fehlermeldung.

Das nur mal als Hinweis.

Gruß

Ulf

Hallo Ulf,

den Fehler haben mir schon andere berichtet, ich konnte ihn aber bisher nicht nachstellen.
Bei einer neuen Installation werden bei mir die Update-Scripte nicht ausgeführt.

Da aber der Anteil an Usern mit einer Version < 0.18 verschwindend gering ist habe ich das Update-Script 0.18.php jetzt aus dem aktuellen Release entfernt. Damit tritt der Fehler nicht mehr auf.

Gruß,
Thomas