НАЗВАНИЕ_САЙТА

RSS-файл для Яндекс Турбо-страниц

Турбо-страницы позволяют пользователям посмотреть «легкую» версию сайта, которая загружается быстрее в десятки раз, а ведь это увеличивает вероятность, что посетитель останется на странице и найдет нужную информацию. Также на такие страницы можно добавить рекламные блоки и веб-аналитику.

Некоторые ограничения

Количество символов в элементах , 240
Общее количество картинок в RSS-канале 5000
Количество картинок в одном элементе 30
Количество элементов 500
Размер RSS-канала 15 МБ
Максимальное количество ссылок в элементе 10

Генерация xml файла

' . $url . 'ОПИСАНИЕ_САЙТАru '; $dbh = new PDO('mysql:dbname=DB_NAME;host=localhost', 'ЛОГИН', 'ПАРОЛЬ'); $sth = $dbh->prepare("SELECT `name`, `text` FROM `articles`"); $sth->execute(); $articles = $sth->fetchAll(PDO::FETCH_ASSOC); foreach ($articles as $row) < $text = $row['text']; // Удаление лишних тегов. $text = strip_tags($text, '


    '); // Замена относительных ссылок. $text = str_replace('src="https://snipp.ru/',%20'src="https://snipp.ru/php/'%20.%20$url%20.%20'/',%20$text);%20$text%20=%20str_replace('href="/', 'href="' . $url . '/', $text); $out .= ' ' . $url . '/URL_СТРАНИЦЫ

    ' . $row['name'] . '

    О сайтеСтатьиНовости ' . $text . ' ]]>
    '; > $out .= ''; header('Content-Type: text/xml; charset=utf-8'); echo $out;

Пример сгенерированного файла

   http://snipp.ru ru http://snipp.ru/view/113  

Релевантный поиск c помощью LIKE

О сайте Статьи Новости

Например, на сайте статей есть поиск, он ищет ключевое слово по полям: название статьи, title и основной текст. SQL запрос получается следующим:

]]>

Далее URL фида нужно добавить в источники Турбо-страниц в Яндекс вебмастере, и после проверки в поисковой выдаче появится у иконка:

Турбо-страница в выдаче Яндекса

А сам сайт и меню будет следующего вида:

Вид сайта в турбо-страницах Вид сайта в турбо-страницах, меню

Удаление турбо-страниц из выдачи

Если отключить и удалить в вебмастере источник (ссылку на RSS канал), то в выдаче Яндекса турбо-страницы все равно останутся. Для полного удаления нужно вернуть источник и выставить false для всех статей.

Источник

Парсим выдачу Яндекса

Я начал заниматься SEO недавно, и сразу же столкнулся с задачей определения позиций продвигаемых сайтов по ключевым словам в поисковиках. Задача тривиальная и решается на ура различным ПО, которое у всех SEO-специалистов на устах: Semonitor, AllSubmitter, etc. Помимо проприетарности, которой попахивает от всех подобного рода программ, в них есть, как это не парадоксально, ряд технических моментов, из-за которых хочется выбросить компьютер в окно.
Я бы не прочь купить Semonitor, но попользовав демо-версию, решил от этой идеи отказаться — на оф.сайте программы доступная для скачивания версия у меня глючила, требовала обновить себя, а после выпрошенного у меня обновления и вовсе отказывалась заниматься анализом позиций. Самому настроить, как Вы понимаете, нельзя.
AllSubmitter в этом плане получше, позволяет даже кастомизировать регулярные выражения для поисковиков, что вроде как делает этот софт устойчивым к смене формата выдачи, однако и с ним не все слава богу — когда 18.08.2008г. Яндекс вдруг изменил формат выдачи результатов поиска, вместе с тем поменяв и URL ссылок (возможно, эксперименты с вводом учета переходов, подробнее об этом писалось здесь), то и AllSub оказался бессилен. Правда, на следующий день Яндекс снова вернулся к старому формату выдачи, но прецедент, тем не менее, произошел.

Я тогда ради интереса изобретал велосипед: решил написать анализатор позиций, причем на PHP. У меня не было цели дойти до production’а, просто хотелось прочувствовать, как работают всякие там Semonitor’ы и Allsubmitter’ы. А потому, написав классы для парсинга Яши, Гугла и Рамблера, потестив и убедившись, что все пашет, удовлетворенно забыл, поскольку был AllSubmitter, и огород городить было незачем, было предостаточно и других задач.

Постановка задачи

Когда на Хабре написали про PHP-класс для работы с Яндекс.XML и я обильно прокомментировался по этому поводу, то по наличию плюсов в карму понял, что тема неплоха для оформления в статью, тем более что возможность появилась — я вылез из минусов. И хотя речь там шла немного о другом — об организации поиска по сайту, используя Yandex.XML, задача анализа позиций сайта по ключевым словам и фразам пересекается с первой. Итак, моя задача:
создать анализатор позиций сайтов в выдаче поисковых систем (пока Яндекса)

Решение

Во-первых,

  • text — текст поискового запроса. URL-кодированный.
  • p — номер страницы выдачи (p=0, 1, 2. ). Without comments
  • numdoc — число выдаваемых результатов на страницу(numdoc=10, 20, 30, 50; допустимы только эти значения и никакие более). Для анализа позиций сайта по ключевым словам лучше всего юзать наибольшее значение, т.к. явное уменьшение нагрузки на сервер и, как следствие — меньше подозрений, что «Я, робот»

Во-вторых,

Выдача Яндекса подвергается разбору на нужные нам составляющие, путем прогона через регулярное выражение вида:

В результате чего получается массив (в нем numdoc элементов) массивов (3 элемента в подмассиве: html с одним результатом выдачи, url найденной страницы выдачи, ее заголовок).

В итоге,

  1. получаю первую страницу с выдачей
  2. если это не «страница недоверия» Яндекса с капчей — прогоняю через регвыр, перебираю результаты в поиске нужного.
  3. если нахожу, возвращаю результат — номер позиции страницы в выдаче, не нахожу — получаю следующую страницу и возвращаюсь к п.2, подождав секунды 3-5
  • resultsLimit — ограничение по глубине поиска, по умолчанию
    люблю ставить 200
  • url — имя хоста, который ищем в выдаче. Учитывается любая страница с этого хоста
  • keyword — запрос к поисковику.

Реализовано

это посредством иерархии классов (чтобы при надобности легко расширять функциональность анализатора на другие поисковики).

Абстрактный класс — SomeAnalyzer:
  1. abstract class SomeAnalyzer
  2. //// ИНТЕРФЕЙС
  3. // функция анализа
  4. public abstract function analyzeThis($url);
  5. // получение имени хоста из url (parse_url с дополнительным функционалом, поскольку убедился что просто parse_url не всегда почему-то работает, когда url слишком неудобочитаемый)
  6. public function getHost($url)
  7. $url=@parse_url($url);
  8. if ($url[ ‘path’ ] && !$url[ ‘host’ ])
  9. $url[ ‘host’ ]=$url[ ‘path’ ];
  10. $url[ ‘host’ ]=ereg_replace( «/.*$» , «» , $url[ ‘host’ ]);
  11. $url[ ‘host’ ]=ereg_replace( «^www\.» , «» , $url[ ‘host’ ]);
  12. return $url[ ‘host’ ];
  13. >
  14. //// РЕАЛИЗАЦИЯ
  15. // функция сравнения 2-х url на предмет принадлежности к одному хосту
  16. protected function compareURL($url1, $url2)
  17. $url1=$ this ->getHost($url1);
  18. $url2=$ this ->getHost($url2);
  19. return (strtoupper($url1[ ‘host’ ])==strtoupper($url2[ ‘host’ ])? true : false );
  20. >
  21. >
Класс анализатора выдачи Яндекса:
  1. class YandexAnalyzer extends SomeAnalyzer
  2. //// ИНТЕРФЕЙС
  3. // настройки
  4. public $resultsLimit=200; // лимит результатов выдачи
  5. public $url;
  6. public $keyword;
  7. public $resultsOnPage=50; // можно только 10, 20, 30, 50
  8. // функция анализа
  9. public function analyzeThis($url, $keyword= » )
  10. $ this ->url=$url;
  11. $ this ->keyword=$keyword;
  12. $x=0;
  13. while ($x*$ this ->resultsOnPageresultsLimit-1)
  14. if ($results=$ this ->analyzePage(str_replace(array( «\r» , «\n» , «\t» ), » , $ this ->downloadPage($x))))
  15. $results[0]=$x*$ this ->resultsOnPage+$results[0];
  16. return $results;
  17. >
  18. $x++;
  19. sleep(rand(3, 5));
  20. >
  21. return false ;
  22. >
  23. //// РЕАЛИЗАЦИЯ
  24. protected $regexpParseResults= ‘#
  25. .*]*tabindex[^>]*onclick[^>]*=[^>]*»[^>]*»[^>]*href ]+)»[^>]*>(.+).*#Ui’ ;
  26. protected $urlMask= ‘http://yandex.ru/yandsearch?text=[KEYWORD]&p=[PAGE_NUMBER]&numdoc=[RESULTS_ON_PAGE]’ ;
  27. protected function downloadPage($pageNumber)
  28. $mask=str_replace( ‘[KEYWORD]’ , urlencode($ this ->keyword), $ this ->urlMask);
  29. $mask=str_replace( ‘[PAGE_NUMBER]’ , $pageNumber, $mask);
  30. $mask=str_replace( ‘[RESULTS_ON_PAGE]’ , $ this ->resultsOnPage, $mask);
  31. return file_get_contents($mask);
  32. >
  33. protected function analyzePage($content)
  34. if (preg_match_all($ this ->regexpParseResults, $content, $matches, PREG_SET_ORDER)!== false )
  35. if (count($matches) <=0)
  36. deb( ‘
    Не найдено вхождений или ошибка парсера: возможно гугл подозревает, что Вы робот!‘ );
  37. else
  38. foreach ($matches as $num=>$match)
  39. if ($ this ->compareURL($match[1], $ this ->url))
  40. return array($num+1, $match[1], $match[2]);
  41. >
  42. >
  43. else deb( ‘Не найдено вхождений или ошибка парсера: возможно йандекс подозревает, что Вы робот!‘ );
  44. return false ;
  45. >
  46. >

Результат

Вот небольшой код для тестирования:

  1. $url= «vinzavod.ru» ;
  2. $keywords=array(
  3. ‘винзавод’ ,
  4. ‘алкоголь производство’ ,
  5. ‘производство алкоголя’ ,
  6. ‘продажа алкоголя’ ,
  7. ‘производители алкоголя’ ,
  8. ‘вино’ ,
  9. ‘вина’ ,
  10. ‘производство вина’ ,
  11. ‘продажа вина’ ,
  12. ‘коньяк’ ,
  13. ‘коньяки’ ,
  14. ‘производство коньяка’ ,
  15. ‘продажа коньяков’ ,
  16. ‘продажа коньяка’ ,
  17. ‘продажа коньяк’ ,
  18. ‘настойка’ ,
  19. ‘настойки’ ,
  20. ‘производство настоек’ ,
  21. ‘продажа настоек’ ,
  22. ‘вермут’ ,
  23. ‘вермуты’ ,
  24. ‘производство вермута’ ,
  25. ‘портвейн’ ,
  26. ‘портвейны’ ,
  27. ‘портвейн 777’ ,
  28. ‘продажа портвейнов’ ,
  29. ‘алкоголь’ ,
  30. ‘алкогольная продукция’ ,
  31. ‘фирменный алкоголь’ ,
  32. ‘алкогольные напитки’ ,
  33. ‘классические алкогольные напитки’
  34. );
  35. $g= new YandexAnalyzer();
  36. foreach ($keywords as $keyword)
  37. if ($res=$g->analyzeThis($url, $keyword))
  38. deb( ‘‘ .$res[0]. ‘-я позиция сайта ‘ .$url. ‘ по фразе ‘»‘ .$keyword. ‘»‘ );
  39. >
  40. else
  41. deb($url. ‘ не найден в первых ‘ .$g->resultsLimit. ‘ результатах по фразе «‘ .$keyword. ‘»‘ );
  42. sleep(rand(3, 5));
  43. >

и результат тестирования:
4-я позиция сайта vinzavod.ru по фразе «винзавод»
13-я позиция сайта vinzavod.ru по фразе «алкоголь производство»
158-я позиция сайта vinzavod.ru по фразе «производство алкоголя»
45-я позиция сайта vinzavod.ru по фразе «продажа алкоголя»
vinzavod.ru не найден в первых 300 результатах по фразе «производители алкоголя»
181-я позиция сайта vinzavod.ru по фразе «вино»
255-я позиция сайта vinzavod.ru по фразе «вина»
4-я позиция сайта vinzavod.ru по фразе «производство вина»
56-я позиция сайта vinzavod.ru по фразе «продажа вина»
94-я позиция сайта vinzavod.ru по фразе «коньяк»
56-я позиция сайта vinzavod.ru по фразе «коньяки»
7-я позиция сайта vinzavod.ru по фразе «производство коньяка»
5-я позиция сайта vinzavod.ru по фразе «продажа коньяков»
7-я позиция сайта vinzavod.ru по фразе «продажа коньяка»
5-я позиция сайта vinzavod.ru по фразе «продажа коньяк»
11-я позиция сайта vinzavod.ru по фразе «настойка»
17-я позиция сайта vinzavod.ru по фразе «настойки»
3-я позиция сайта vinzavod.ru по фразе «производство настоек»
1-я позиция сайта vinzavod.ru по фразе «продажа настоек»
30-я позиция сайта vinzavod.ru по фразе «вермут»
25-я позиция сайта vinzavod.ru по фразе «вермуты»
32-я позиция сайта vinzavod.ru по фразе «производство вермута»
32-я позиция сайта vinzavod.ru по фразе «портвейн»
15-я позиция сайта vinzavod.ru по фразе «портвейны»
93-я позиция сайта vinzavod.ru по фразе «портвейн 777»
4-я позиция сайта vinzavod.ru по фразе «продажа портвейнов»

Перспективы и планы на будущее

  • обуздать как минимум тройку Яндекс, Гугл, Рабмлер.
  • сделать человеческую оболочку для пользования, лучший вариант — ajax-приложение, с поддержкой проектов и сохранением на сервере результатов анализов

Источник

Читайте также:  Find php database password
Оцените статью