PHP, MySql, уроки PHP, SEO статьи - Arts-UP.ru

Мини профиль

Регистрация | Забыли?

Наша кнопка

Arts-UP.ru - создание и продвижение

Пользователи онлайн

Пользователи: 
- нет
Гости: 

Роботы: 
- нет
Всего: 1

Друзья

Класс для проверки обратной ссылки на PHP

Класс для проверки обратной ссылки на PHP

Как же всё таки проверять ссылки размещённые на сайтах ваших партнёров. Ну не обходить же все сайты, проще это сделать при помощи php класса.

Допустим у нас есть сайт your_site.ru и множество сайтов ваших партнёров с вашей ссылкой.
И для проверки обратной ссылки будем юзать предоставленный класс ниже.

<?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("http://".$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.' не найдена или не доступна.<br />Убедитесь что ссылка не заключена в теги  <noindex></noindex>  rel="nofolow" и другие...';
        }
        else $this->errors = 'Не удаётся открыть страницу '.$this->backlink;

        return false;
    }
}
?>


Вот пример использования:
<?php
$bl = new backlink("your_site.ru");
if ( !$bl->check('http://'.$_SERVER[\'HTTP_HOST']) ){
echo "<center><b>".$bl->errors."</b></center>";
}
?>


Проверка ссылки происходит в несколько этапов.
* Проверка на саму ссылку
* Проверка META данных запрещающие её индексацию
* Проверка robots.txt на то что страница с нашей ссылкой не запрещена к индексации поисковой машиной

Данный класс можно поставить на CRON один раз в сутки, и если ссылка размещена не так как нам надо. ссылка партнёра удаляется с вашего сайта.

Скачать исходники урока backlinks [1.48 Kb]

Данная статья подготовлена для сайта Arts-UP.ru



Теги: return, foreach, индексации, ссылка, запрет, Проверка, ссылки, function, обратная ссылка, backlink, партнёрская ссылка, Проверка ссылки, robots.txt, ссылка партнёра

Раздел: Уроки PHP
Дата: 28-01-2012, 18:53 | Добавил: WorldPad | Читали: 307  |  

Другие новости по теме:

Комментарии:

Оставить комментарий
Имя:*
E-Mail:
Введите код: *

Опрос

Как давно вы программируете на PHP?

только начал
около месяца
больше года
очень давно

 

Поисковая статистика

↓ Апдейты Яndex тИЦ
13.04.2012
16.02.2012
04.02.2012
↓ Апдейты выдачи Яndexa
17.05.2012
15.05.2012
12.05.2012
↓ Апдейты ЯКаталога
18.05.2012
16.05.2012
11.05.2012