PHP: Googlebot erkennen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | /** * recognises seo relevant google-bots: * - web, image, mobile, news, video * not: * - adsense, adwords, appengine, feedfetchter, gsa, translate, webpreview, ... * but also some of them may popup under 'other' / true * * @since 2011-01-06 06:15h (GMT +0100) * @version 2011-01-06 06:15h (GMT +0100) * @author d.abromeit, http://lucido-media.de/ * * @param string $ip -ip as in $_SERVER['REMOTE_ADDR'] * @param string $header -useragent as in $_SERVER['HTTP_USER_AGENT'] * * @return bool|string -may return string if $header is set. */ function bot_is_google($ip, $header='') { $host_arpa = join('.',array_reverse(explode('.',$ip))).'.in-addr.arpa'; $host_google = 'crawl-'.str_replace('.','-',$ip).'.googlebot.com'; $ip_google = gethostbyname($host_google); $dns = @dns_get_record($host_arpa,DNS_ALL); if( $ip_google === $ip && //recommended by google webmaster central count($dns) === 1 && $dns[0]['host'] === $host_arpa && $dns[0]['type'] === 'PTR' && $dns[0]['target'] === $host_google ) { if( $header!=='' ) { if( strpos($header,'Googlebot/')!==false ) return 'web'; elseif( strpos($header,'Googlebot-Image/')!==false ) return 'image'; elseif( strpos($header,'Googlebot-Mobile/')!==false ) return 'mobile'; elseif( strpos($header,'Googlebot-News/')!==false ) //not in my logs! return 'news'; elseif( strpos($header,'Googlebot-Video/')!==false ) //not in my logs! return 'video'; return 'other'; } return true; } return false; } |
Achtung, bei der Interpretation der Rückgabewerte gilt es ab sofort das neue Verhalten des Googlebots für Smartphones zu beachten. Er taucht jetzt als normaler “Googlebot” auf. (Was aber durch eine kurze Anpassung des Codes problemlos behoben werden kann, falls man mag.) Der alte “Googlebot-Mobile” ist jetzt nur noch für die sogenannten Featurephones zuständig, welche per Definition keinen vollwertigen Browser anbieten.
Alle Details zum Update finden sich unter http://googlewebmastercentral-de.blogspot.de/2014/01/neuer-googlebot-user-agent-fuer-crawling-smartphone-content.html
6 kreative Kommentare
Aufgrund interner Umstrukturierungsmaßnahmen ist es uns z.Zt. leider nicht
möglich auf neue Kommentare zu reagieren. Wir bitten dies zu entschuldigen.
Bei dringenden Rückfragen suchen Sie bitten den direkten Kontakt zu uns.
Sollte man aber möglichst nicht für Cloaking verwenden, sowas würde dann böse enden
Super Artikel und Code-Snippet! Vielen Dank für die kostenfreie Bereitstellung, ich war gerade auf der Suche nach so etwas und bin über Google bei euch gelandet
Gruß,
Torben
2 Fragen:
1. Wenn ich für einen A/B Test Google den B Test vorenthalten möchte, ist es dann schon cloaking?
2. Wie starte ich die Funktion? Also ich mein woher bekomme ich die IP und den Header?
Frage 2 kann weg
Ei – Sorry für meine Latenz. Falls ich wieder mal einen Kommentar verpenne darf man mich übrigens auch gerne per Twitter oder Mail kontaktieren
Du hast das Problem für dich sicher schon gelöst, und ich bin mangels Erfahrung auf dem Gebiet sicherlich auch nicht der beste Ansprechpartner dafür, aber trotzdem mal meine Meinung:
A/B Testing vs. Cloaking
Wenn du Google eine Seitenvariante vorenthalten willst, die User nun mal ausgeliefert bekommen, dann sprechen wir hier per Definition von Cloaking – jep. Auch wenn keine niedere Intention dahinter steckt.
Sofern Google die abweichende Version zu gesicht bekommt, die Unterschiede aber nicht signifikant sind, wird sich das sicher nicht im Ranking bemerkbar machen. Deckungsgleiche Inhalte sind aber immer förderlich wenn der Bot nochmal kommt.
Ich empfehle also auf eine Standardlösung zurück zu greifen, etwa http://visualwebsiteoptimizer.com/ oder direkt den WebsiteOptimizer von Google ( http://www.google.de/intl/de/websiteoptimizer/beginnersguide/ ), der in den kommenden Wochen übrigens voll in Analytics integriert wird.
Anwendung des Scrips: PHP-Code
Da ich zu meiner Wonne bereits in 1,2 Foren trugschlüsse zur obigen Funktion lesen durfte, noch eine kurze Notiz zur Anwendung: Nein, man muss den Browser-Header des Bots nicht unbedingt als parameter übergeben. Ob es sich um einen Googlebot handelt wird anhand der IP-Adresse festgestellt. Der Browserheader bietet nur die angenehme Möglichkeit auch zwischen den verschiedenen Googlebots zu unterscheiden.
Hi, Klasse Script! Konnte ich gerade gut gebrauchen, vielen Dank!