Как вы знаете для известных CMS есть плагины, с помощью которых можно генерировать турбо страницы. В данной же статье мы расскажем вам, как сделать генератор турбо страниц если у вас самописный сайт.
Количество символов в элементах 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);
Осталось лишь сообщить Яндексу о ваших турбо страницах. Это можно сделать через Вебмастер Яндекса. Так же можете ознакомиться с доркументацией Яндекса по турбо страницам