SeoLik

15 августа 2018, 17:34
4246

Как вы знаете для известных CMS есть плагины, с помощью которых можно генерировать  турбо страницы. В данной же статье мы расскажем вам, как сделать генератор турбо страниц если у вас самописный сайт.

Ограничения RSS-канала для турбо страниц

Количество символов в элементах title, h1, author 240
Общее количество картинок в RSS-канале 5000
Количество картинок в одном элементе item, включая картинки, указанные в элементе yandex:related 50
Количество ссылок на другие ресурсы в элементе yandex:related 30
Количество элементов item 1000
Размер RSS-канала 15 МБ

 

Создание генератора турбо страниц

1. Создавать турбо страницы мы будем на примире таблицы в БД "Блог". Для начала нам нужно соединиться с БД и прочитать нужные данные из таблица блога.

// тут соединение с вашей бд, где расположена нужная таблица, в нашем примере это таблица news
$connect_db = mysqli_connect( 
'localhost',  /* Хост, к которому мы подключаемся */ 
'user_name',       /* Имя пользователя */ 
'passwords',   /* Используемый пароль */ 
'bd_name');     /* База данных для запросов по умолчанию */ 

$query = "SELECT * FROM blog ORDER BY data_dob DESC";  // выборка всех записей из таблицы
$rs_result = mysqli_query($connect_db, $query);
$all_url=null;
mysqli_close($connect_db);

 

2. Теперь нам нужно перебрать все записи в нашем блоге и сформирвать из них специально размеченную RSS ленту для сервиса турбо страниц Яндекс

while ($row = mysqli_fetch_assoc($rs_result)) { 
$data_dob = date(DATE_RFC822, strtotime($row['data_dob']));
$title =  $row['title'];
$image =  $row['image'];
$text =  $row['text'];
$url =  $row['url'];

// изменяем пути к картинка на полные, при необходимости
$text = str_ireplace("/img_publ/", "https://seolik.ru/img_publ/", $text);
$text = str_ireplace("/img_p/", "https://seolik.ru/img_p/", $text);
$text = str_ireplace("/img_news/", "https://seolik.ru/img_news/", $text);

// все рисунки помещаем в тег <figure>
$text = preg_replace('/(<img.+?>)/iu','<figure>$1</figure>', $text);

// удаляем все атрибуты style
$text = preg_replace('/(<[^>]+) style=".*?"/iu', '$1', $text);

// Удаляем все html теги кроме нужных нам в разметке
$text =  strip_tags($text, '<h1><p><img><br><hr><ul><ol><li><b><strong><i><em><sup><sub><ins><del><small><big><pre><abbr><u><a>');

$text = html_entity_encode($text);

$all_url .= '
<item turbo="true">
<link>https://seolik.ru/blog/'.$url.'</link>
<turbo:content>
<![CDATA[
<header>
<figure>
<img src="https://seolik.ru'.$image.'" />
</figure>
<h1>'.$title.'</h1>
</header>
'.$text.'
]]>
</turbo:content>
<pubDate>'.$data_dob.'</pubDate>
</item>';

} // перебираем все записи

 

3. Последний шаг, сохранение результатов в файл

// https://yandex.ru/support/webmaster/turbo/feed.html#first-step 
$channel = '<rss
    xmlns:yandex="http://news.yandex.ru"
    xmlns:media="http://search.yahoo.com/mrss/"
    xmlns:turbo="http://turbo.yandex.ru"
    version="2.0"
>
<channel>';

// окончание описания источника
$channel_end = '</channel></rss>';

// записываем готовый rss в файл
$gotovo = $channel.$all_url.$channel_end;
$file = $_SERVER['DOCUMENT_ROOT'].'/turbo/blog.xml';
file_put_contents($file, $gotovo);

 

Вот практически и все, можете посмотреть полный код примера генератора турбо страниц

// тут соединение с вашей бд, где расположена нужная таблица, в нашем примере это таблица news
$connect_db = mysqli_connect( 
'localhost',  /* Хост, к которому мы подключаемся */ 
'user_name',       /* Имя пользователя */ 
'passwords',   /* Используемый пароль */ 
'bd_name');     /* База данных для запросов по умолчанию */ 

$query = "SELECT * FROM blog ORDER BY data_dob DESC";  // выборка всех записей из таблицы
$rs_result = mysqli_query($connect_db, $query);
$all_url=null;
mysqli_close($connect_db);

while ($row = mysqli_fetch_assoc($rs_result)) { 
$data_dob = date(DATE_RFC822, strtotime($row['data_dob']));
$title =  $row['title'];
$image =  $row['image'];
$text =  $row['text'];
$url =  $row['url'];

// изменяем пути к картинка на полные, при необходимости
$text = str_ireplace("/img_publ/", "https://seolik.ru/img_publ/", $text);
$text = str_ireplace("/img_p/", "https://seolik.ru/img_p/", $text);
$text = str_ireplace("/img_news/", "https://seolik.ru/img_news/", $text);

// все рисунки помещаем в тег <figure>
$text = preg_replace('/(<img.+?>)/iu','<figure>$1</figure>', $text);

// удаляем все атрибуты style
$text = preg_replace('/(<[^>]+) style=".*?"/iu', '$1', $text);

// Удаляем все html теги кроме нужных нам в разметке
$text =  strip_tags($text, '<h1><p><img><br><hr><ul><ol><li><b><strong><i><em><sup><sub><ins><del><small><big><pre><abbr><u><a>');

$text = html_entity_encode($text);

$all_url .= '
<item turbo="true">
<link>https://seolik.ru/blog/'.$url.'</link>
<turbo:content>
<![CDATA[
<header>
<figure>
<img src="https://seolik.ru'.$image.'" />
</figure>
<h1>'.$title.'</h1>
</header>
'.$text.'
]]>
</turbo:content>
<pubDate>'.$data_dob.'</pubDate>
</item>';

} // перебираем все записи

// https://yandex.ru/support/webmaster/turbo/feed.html#first-step 
$channel = '<rss
    xmlns:yandex="http://news.yandex.ru"
    xmlns:media="http://search.yahoo.com/mrss/"
    xmlns:turbo="http://turbo.yandex.ru"
    version="2.0"
>
<channel>';

// окончание описания источника
$channel_end = '</channel></rss>';

// записываем готовый rss в файл
$gotovo = $channel.$all_url.$channel_end;
$file = $_SERVER['DOCUMENT_ROOT'].'/turbo/blog.xml';
file_put_contents($file, $gotovo);

Осталось лишь сообщить Яндексу о ваших турбо страницах. Это можно сделать через Вебмастер Яндекса. Так же можете ознакомиться с доркументацией Яндекса по турбо страницам