Abro, Januar 2011

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;
}
Update 2014-01-30:

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

  1. Timo, 07.05.2011 02:54h

    Sollte man aber möglichst nicht für Cloaking verwenden, sowas würde dann böse enden :)

  2. Torben Leuschner, 16.07.2011 19:08h

    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

  3. Viktor, 29.06.2012 15:15h

    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?

  4. Viktor, 29.06.2012 15:22h

    Frage 2 kann weg ;)

  5. Abro, 09.07.2012 22:11h

    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.

    1
    2
    3
    4
    
    if( bot_is_google($_SERVER['REMOTE_ADDR']) ) 
    {
    // aktion bei googlebot besuch
    }
  6. Marco, 30.08.2013 11:29h

    Hi, Klasse Script! Konnte ich gerade gut gebrauchen, vielen Dank!

Kommentare sind geschlossen.
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.
Das Unternehmen Lucido Media GbR wurde am 31.12.2013 stillgelegt. Diese Website existiert weiterhin zu Archivzwecken. Der Gesellschafter Daniel Abromeit führt seine Arbeit ab sofort unter dem Dach der Agentur Koch Essen fort. Für entsprechende Anfragen wenden Sie sich daher bitte an http://koch-essen.de/kontakt/