144 votes

Comment détecter les bots des moteurs de recherche avec php?

Comment peut-on détecter les bots des moteurs de recherche en utilisant php?

266voto

minnur Points 504

J'utilise le code suivant qui semble fonctionner correctement :

function _bot_detected() {

  return (
    isset($_SERVER['HTTP_USER_AGENT'])
    && preg_match('/bot|crawl|slurp|spider|mediapartners/i', $_SERVER['HTTP_USER_AGENT'])
  );
}

mise à jour 16-06-2017 https://support.google.com/webmasters/answer/1061943?hl=fr

ajouté mediapartners

3 votes

Est-ce que cela suppose que les bots se révèlent comme tels?

3 votes

Voter contre, l'agent utilisateur peut être modifié dans les paramètres de Chrome, Firefox.

33 votes

Oui, le useragent peut être modifié, mais si quelqu'un le modifie pour y inclure "bot", "crawl", "slurp" ou "spider", il sait ce qui l'attend. Cela dépend également de l'utilité. Je n'utiliserais pas cela pour supprimer tout le CSS, mais je l'utiliserais pour ne pas stocker de cookies, ignorer l'enregistrement de la localisation ou passer une page d'atterrissage.

88voto

Ólafur Waage Points 40104

Voici un répertoire des noms d'araignées de moteurs de recherche

Ensuite, vous utilisez $_SERVER['HTTP_USER_AGENT']; pour vérifier si l'agent est ledit spider.

if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot"))
{
    // que faire
}

0 votes

Si ((eregi("yahoo",$this->USER_AGENT)) && (eregi("slurp",$this->USER_AGENT))) { $this->Navigateur = "Yahoo! Slurp"; $this->Type = "robot"; } est-ce que cela fonctionnera correctement??

0 votes

Pourquoi strstr et pas strpos?

3 votes

Parce que strpos peut retourner 0 (la position), strstr retourne FALSE en cas d'échec, vous pouvez utiliser strpos si vous ajoutez une vérification !== false à la fin.

21voto

Jukka Dahlbom Points 1219

Vérifiez le $_SERVER['HTTP_USER_AGENT'] pour certaines des chaînes énumérées ici :

http://www.useragentstring.com/pages/useragentstring.php

Ou plus spécifiquement pour les robots d'indexation :

http://www.useragentstring.com/pages/useragentstring.php?typ=Crawler

Si vous voulez -dire- enregistrer le nombre de visites des robots d'indexation des moteurs de recherche les plus courants, vous pourriez utiliser

$interestingCrawlers = array( 'google', 'yahoo' );
$pattern = '/(' . implode('|', $interestingCrawlers) .')/';
$matches = array();
$numMatches = preg_match($pattern, strtolower($_SERVER['HTTP_USER_AGENT']), $matches, 'i');
if($numMatches > 0) // Found a match
{
  // $matches[1] contains an array of all text matches to either 'google' or 'yahoo'
}

17voto

macherif Points 49

Vous pouvez vérifier s'il s'agit d'un moteur de recherche avec cette fonction :

 'Google',
'MSN' => 'msnbot',
      'Rambler' => 'Rambler',
      'Yahoo' => 'Yahoo',
      'AbachoBOT' => 'AbachoBOT',
      'accoona' => 'Accoona',
      'AcoiRobot' => 'AcoiRobot',
      'ASPSeek' => 'ASPSeek',
      'CrocCrawler' => 'CrocCrawler',
      'Dumbot' => 'Dumbot',
      'FAST-WebCrawler' => 'FAST-WebCrawler',
      'GeonaBot' => 'GeonaBot',
      'Gigabot' => 'Gigabot',
      'Lycos spider' => 'Lycos',
      'MSRBOT' => 'MSRBOT',
      'Altavista robot' => 'Scooter',
      'AltaVista robot' => 'Altavista',
      'ID-Search Bot' => 'IDBot',
      'eStyle Bot' => 'eStyle',
      'Scrubby robot' => 'Scrubby',
      'Facebook' => 'facebookexternalhit',
  );
  // pour obtenir la chaîne de robots utilisée dans la fonction, décommentez-la
  // il est préférable de la sauvegarder dans une chaîne que d'utiliser implode à chaque fois
  // global $crawlers
   $crawlers_agents = implode('|',$crawlers);
  if (strpos($crawlers_agents, $USER_AGENT) === false)
      return false;
    else {
    return TRUE;
    }
}
?>

Ensuite, vous pouvez l'utiliser comme suit :

2 votes

Je pense que cette liste est obsolète, je ne vois pas "slurp" par exemple qui est l'araignée de Yahoo help.yahoo.com/kb/SLN22600.html

7voto

Gumbo Points 279147

Vous pourriez analyser l'agent utilisateur ($_SERVER['HTTP_USER_AGENT']) ou comparer l'adresse IP du client ($_SERVER['REMOTE_ADDR']) avec une liste d'adresses IP des bots de moteurs de recherche.

2 votes

La liste des adresses IP est plus sécurisée si vous voulez vous assurer que le nom de l'agent utilisateur est vraiment un robot de moteur de recherche, car il est possible de créer de faux agents utilisateurs par nom.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X