Comment peut-on détecter les bots des moteurs de recherche en utilisant php?
Est-ce que cela suppose que les bots se révèlent comme tels?
Comment peut-on détecter les bots des moteurs de recherche en utilisant php?
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
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.
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
}
Si ((eregi("yahoo",$this->USER_AGENT)) && (eregi("slurp",$this->USER_AGENT))) { $this->Navigateur = "Yahoo! Slurp"; $this->Type = "robot"; } est-ce que cela fonctionnera correctement??
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.
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'
}
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 :
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
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.
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.