PHP

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

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

Полное руководство на https://yandex.ru

1

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

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

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

<?php
// Локаль.
setlocale(LC_ALL, 'ru_RU');
date_default_timezone_set('Europe/Moscow');

$url = 'http://site.com';

$out = '<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:yandex="http://news.yandex.ru" 
     xmlns:media="http://search.yahoo.com/mrss/" 
     xmlns:turbo="http://turbo.yandex.ru" 
     version="2.0">
    <channel>
        <title>НАЗВАНИЕ_САЙТА</title>
        <link>' . $url . '</link>
        <description>ОПИСАНИЕ_САЙТА</description>
        <language>ru</language>
        <turbo:analytics id="КОД_ЯНДЕКС_МЕТРИКИ" type="Yandex" params=""></turbo:analytics>';

        $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, '<p><img><iframe><br><ul><ol><li><b><strong><i><em><sup><sub><ins><del><small><big><pre></pre><abbr><u><a>'); 

            // Замена относительных ссылок.
            $text = str_replace('src="/', 'src="' . $url . '/', $text); 
            $text = str_replace('href="/', 'href="' . $url . '/', $text); 

            $out .= '
            <item turbo="true">        
                <link>' . $url . '/URL_СТРАНИЦЫ</link>
                <turbo:content>
                    <![CDATA[
                        <header>
                            <h1>' . $row['name'] . '</h1>
                            <menu>
                                <a href="' . $url . '/">О сайте</a>
                                <a href="' . $url . '/articles">Статьи</a>
                                <a href="' . $url . '/news">Новости</a>
                            </menu>
                        </header>
                        ' . $text . '
                    ]]>
                </turbo:content>            
            </item>';    
        }
    
        $out .= '
    </channel>
</rss>';

header('Content-Type: text/xml; charset=utf-8');
echo $out;
3

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

<rss xmlns:yandex="http://news.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/" 
xmlns:turbo="http://turbo.yandex.ru" version="2.0">
    <channel>
        <title>Snipp.ru</title>
        <link>http://snipp.ru</link>
        <description/>
        <language>ru</language>
        <item turbo="true">
            <link>http://snipp.ru/view/113</link>
            <turbo:content>
                <![CDATA[
                    <header>
                        <h1>Релевантный поиск c помощью LIKE</h1>
                        <menu>
                            <a href="http://snipp.ru/">О сайте</a>
                            <a href="http://snipp.ru/articles">Статьи</a>
                            <a href="http://snipp.ru/news">Новости</a>
                        </menu>
                    </header>
                    <p>Например, на сайте статей есть поиск, он ищет ключевое слово по полям: 
                    название статьи, title и основной текст. SQL запрос получается следующим:</p>
                ]]>
            </turbo:content>
        </item>
    </channel>
</rss>

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

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

20 апреля 2018