infoNauta

Função PHP para identificação de acessos por Crawlers e Bots

Publicado em: 11/7/2017
Atualizado em em: 08/09/2017

Por: Sergio Mari Jr.

Categoria: Diário de Bordo
Comentários: 0

Uma das demandas que mais cedo ou mais tarde aparece para quem desenvolve soluções para Interligência de Marketing Digital é a identificação de acessos feitos não por humanos, mas por bots, crawlers, indexadores e coisas do tipo.

Google Bot

A função abaixo foi criada a partir da controibuição de macherif e atualizada pela Cedilha Comunicação Digital. A lista de crawlers foi atualizada pela última vez em 08/09/2017 e precisa ser atualizada constantemente.

A função

function crawler_detect($USER_AGENT) {

	if (!$USER_AGENT) {
		return false;
	} else {

		//Array com os crawlers conhecidos
		$crawlers = array(
			'Abacho' => 'AbachoBOT',
			'accoona' => 'Accoona',
			'AcoiRobot' => 'AcoiRobot',
			'AhrefsBot' => 'AhrefsBot',
			'Altavista' => 'Scooter',
			'AltaVista2' => 'Altavista',
			'Apache' => 'Apache',
			'Arachnys/Nutch' => 'arachnys',
			'ASPSeek' => 'ASPSeek',
			'Baidu' => 'Baiduspider',
			'BDCbot' => 'BDCbot',
			'Bing' => 'bingbot',
			'Bing2' => 'BingPreview',
			'CCBot' => 'CCBot',
			'Clickagy' => 'Clickagy',
			'Cliqzbot' => 'Cliqzbot',
			'CrocCrawler' => 'CrocCrawler',
			'datagnion' => 'datagnionbot',
			'Dataprovider' => 'Dataprovider',
			'BDCbot' => 'BDCbot',
			'DigExt' => 'DigExt',
			'DigExt2' => 'DTS Agent',
			'DotBot' => 'DotBot',
			'DuckDuck' => 'DuckDuckBot',
			'Dumbot' => 'Dumbot',
			'eStyle' => 'eStyle',
			'Exabot' => 'Exabot',
			'ExtLinksBot' => 'ExtLinksBot',
			'Facebook' => 'facebook',
			'FAST-WebCrawler' => 'FAST-WebCrawler',
			'Findxbot' => 'Findxbot',
			'Flamingo' => 'Flamingo_SearchEngine',
			'GeonaBot' => 'GeonaBot',
			'GetIntent' => 'GetIntent',
			'Gigabot' => 'Gigabot',
			'Go-http-client' => 'Go-http-client',
			'Google' => 'Google',
			'GrapeshotCrawler' => 'GrapeshotCrawler',
			'GuzzleHttp' => 'GuzzleHttp',
			'ia_archiver' => 'ia_archiver',
			'ID-Search' => 'IDBot',
			'ips' => 'ips-agent',
			'Java' => 'Java/',
			'LinkAnalyser' => 'LinkAnalyser',
			'linkdex' => 'linkdexbot',
			'LinkedIn' => 'LinkedInBot',
			'linkfluence' => 'linkfluence',
			'Livelap' => 'LivelapBot',
			'ltx71' => 'ltx71',
			'Lycos' => 'Lycos',
			'Mechanize' => 'Mechanize',
			'Mediatoolkitbot' => 'Mediatoolkitbot',
			'MegaIndex.ru' => 'MegaIndex',
			'MetaURI' => 'MetaURI',
			'Microsoft' => 'Microsoft URL Control',
			'Microsoft Office' => 'Microsoft Office',
			'Mixrank' => 'MixrankBot',
			'MJ12bot' => 'MJ12bot',
			'MSN' => 'msnbot',
			'MSRBOT' => 'MSRBOT',
			'Netcraft' => 'NetcraftSurveyAgent',
			'Nuzzel' => 'Nuzzel',
			'omgili' => 'omgili',
			'OpenLinkProfiler' => 'OpenLinkProfiler',
			'OpenLinkProfiler2' => 'spbot',
			'PaperLi' => 'PaperLiBot',
			'Pinterest' => 'Pinterestbot',
			'python-requests' => 'python-requests',
			'proximic' => 'proximic',
			'radian6' => 'radian6',
			'Rambler' => 'Rambler',
			'rogerbot' => 'rogerbot',
			'RukiCrawler' => 'RukiCrawler',
			'scalaj' => 'scalaj',
			'Scrubby' => 'Scrubby',
			'SafeDNS' => 'SafeDNSBot',
			'Semrush' => 'SemrushBot',
			'SiteExplorer' => 'SiteExplorer',
			'SMTBot' => 'similartech',
			'SocialRank' => 'SocialRankIOBot',
			'Skype' => 'SkypeUriPreview',
			'Sogou' => 'sogou',
			'The Lemur' => 'crawler_12',
			'ToutiaoSpider' => 'ToutiaoSpider',
			'trendiction' => 'trendiction',
			'tweetedtimes.com' => 'tweetedtimes',
			'Twitter' => 'Twitterbot',
			'ubermetrics' => 'ubermetrics',
			'WhatsApp' => 'WhatsApp',
			'WhatsApp2' => 'WhatsApp/',
			'WordPress' => 'WordPress',
			'wotbox' => 'wotbox',
			'Yahoo' => 'Yahoo',
			'YandexBot' => 'YandexBot',
			'YisouSpider' => 'YisouSpider',
		);

		//Percorre array procurando correspondência
		$correspondencia = 0;
		foreach($crawlers as $crawler => $bot) {
			if (stripos($USER_AGENT, $bot) !== false) {
				$correspondencia++;
			}
		}

		if ($correspondencia > 0) {
			return true;
		} else {
			return false;
		}//correspondencia

	}//useragent

}//crawler_detect

Como usar

O argumento $USER_AGENT deve ser preenchido com a variável superglobal do PHP $_SERVER['HTTP_USER_AGENT']:

$agente = $_SERVER['HTTP_USER_AGENT'];
$bot = crawler_detect($agente); 

Caso a variável $bot receba o valor true significa que o acesso está sendo feito por um dos bots conhecidos pela lista da função. Caso receba o valor false significa que o acesso está sendo feito por um humano ou por algum bot desconhecido.

Utilidades

Há vários usos possíveis para essa solução. Destaco dois deles:

1) Evitar que o acesso de bots gerem estatísticas falsas, inflando, por exemplo, o número de views de um determinado conteúdo de modo a gerar dados distorcidos e decisões equivocadas.

2) Oferecer aos bots informações complementares sobre o conteúdo para melhorar ou facilitar a indexação. Se for esse o caso, cuidado para não cair em práticas de Black Seo.


Comentários

Seja o primeiro a comentar!

Faça seu comentário

Repita os caracteres no campo abaixo:




adobe agência de propaganda ambiente de marketing ambiente externo ambiente interno balanced scorecard bitmap branding bsc cibercultura ciência competitividade comportamento do consumidor composto de marketing comunicação concorrência custo demanda desejo diferenciação email marketing endomarketing erp estratégia facebook forças competitivas gestão do conhecimento gestão estratégica google html illustrator imagens digitais indesign inovação instagram inteligência coletiva inteligência de marketing internet jornalismo linkedin lucro macroambiente marca mark-up marketing marketing de conteúdo marketing digital metodologia michael porter microambiente motivação necessidade objetivos pesquisa pesquisa qualitativa pesquisa quantitativa photoshop php pierre levy planejamento planejamento estratégico posicionamento preço produto programação promoção propaganda propagação viral publicidade redes sociais relações públicas relevância reputação sem seo sistemas de informação sites de busca twitter valor virtual youtube