проверить ссылку на nofollow

Статус
В этой теме нельзя размещать новые ответы.

lena berkova

Местный житель
Регистрация
14 Янв 2009
Сообщения
437
Реакции
21
нужно на странице найти заданную ссылку и проверить есть ли у ссылки атрибут nofollow-как сделать проверку?
 
нужно на странице найти заданную ссылку и проверить есть ли у ссылки атрибут nofollow-как сделать проверку?
выдираешь все нужные ссылки и уже в них последовательно ищещь nofollow примерно так
PHP:
preg_match('/nofollow/',$links,$nofollow);
 
page promoter bar
Выделяет закрытые ссылки другим цветом, очень удобно
 
PHP:
<?
class backlink
{
	var $errors = '';
	var $backlink = '';
	var $backlink_parse = array();
	var $backlink_path = '';
	var $backlink_path_ar = array();

	function backlink($backlink)
	{
		$this->backlink				= $backlink;
		$this->backlink_parse	= parse_url($backlink);

		$this->backlink_path	= $this->backlink_parse['path'];
		if ( substr($this->backlink_path,0,1)=='/' )	$this->backlink_path = substr($this->backlink_path,1);
		if ( substr($this->backlink_path,-1)=='/' )		$this->backlink_path = substr($this->backlink_path,0,strlen($this->backlink_path)-1);

		$backlink_path_ar			= split("[/]",$this->backlink_path);
		if ( count($backlink_path_ar)>0 )
		{
			foreach ( $backlink_path_ar as $k=>$v )
			{
				$v = trim($v);
				if ( empty($v) ) unset($backlink_path_ar[$k]);
			}
		}
		if ( count($backlink_path_ar)>0 ) $this->backlink_path_ar = $backlink_path_ar;
	}

	function subpath_check($rule)
	{
		if ( count($this->backlink_path_ar)>0 )
		{
			$path = '';
			foreach ( $this->backlink_path_ar as $k=>$v )
			{
				$path.= empty($path) ? $v : "\/".$v;
				if ( preg_match('/Disallow:\s*[\/]?'.$path.'[\/\*]?\s*$/i',$rule) ) return true;
			}
		}
		return false;
	}

	function check($url)
	{
		$parse_url			= parse_url($url);

		/* robotos.txt */

		$robots_url			= 'http://'.$this->backlink_parse['host'].'/robots.txt';
		$robots_data_ar	= @file($robots_url);

		if ( $robots_data_ar!==false )
		{
			if ( count($robots_data_ar)>0 )
			{
				foreach ( $robots_data_ar as $k=>$v )
				{
					$v = trim($v);
					if ( !empty($v) )
					{
						if ( preg_match('/Disallow:\s*\/\s*$/i',$v) ) // запрет индексации всего
						{
							$this->errors = 'В '.$robots_url.' есть правило запрещающее индексировать.';
							return false;
						}
						if (
							preg_match('/Disallow:\s*[\/]?'.str_replace("/","\/",$this->backlink_path).'[\/\$]\s*$/i',$v) || // запрет индексации страницы
							$this->subpath_check($v) // запрет индексации пути к странице
						) {
							$this->errors = 'В '.$robots_url.' есть правило запрещающее индексировать страницу '.$this->backlink;
							return false;
						}
					}
				}
			}
		}

		/* META */

		$meta = @get_meta_tags($this->backlink);
		if (
			eregi('noindex',$meta['robots']) ||
			eregi('nofollow',$meta['robots'])
		) {
			$this->errors = 'На странице '.$this->backlink.' есть META данные запрещающие её индексацию.';
			return false;
		}

		/* Link */

		$data = '';
		$fp = @fopen($this->backlink,"r");
		if ( $fp )
		{
			while (!feof($fp)) $data.= fgets ($fp,4096);
			fclose ($fp);

			$pattern = array (
				"'<script[^>]*?>.*?</script>'si", // Вырезается javascript
				"'<noscript[^>]*?>.*?</noscript>'si", // noscript
				"'<noindex[^>]*?>.*?</noindex>'si", // noindex
				"'<a[^>]*?rel=[\"\']nofollow[\"\'].*?>'si", //nofollow
				"'<\!--.*?-->'si", // remarka
			);
			$replace = array(" "," "," "," "," ");
			$data = preg_replace($pattern, $replace, $data);

			if ( preg_match_all('/<a.*?href=["\']http:\/\/(.*?)["\']/i', $data, $m) ) {
				if ( count($m[1])>0 )
				{
					foreach ( $m[1] as $k=>$v ) if ( eregi($parse_url['host'],$v) ) return true;
				}
			}

			$this->errors = 'На странице '.$this->backlink.' ссылка '.$url.' не найдена или не доступна к индексации.';
		}
		else $this->errors = 'Не удаётся открыть страницу '.$this->backlink;

		return false;
	}
}
/*
include 'backlink.php';
$bl = new backlink('Где ищем');
if ( !$bl->check('Что ищем') ) echo $bl->errors;
else echo 'OK!';
*/
?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху