Не секрет, что Турбо-страницы для вебсайта, которому нужен поисковый трафик и хорошие ПФ на мобильных, становятся обязательным признаком качества, а, возможно, стали еще в 2017-2018 гг.

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

Простейший фид для текстовых страниц создать достаточно легко.

Нужно создать страницу с пустым шаблоном примерно такого содержания:
<?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>Веб-студия - агентство маркетинга - CapWeb</title>
<link>[(site_url)]</link>
<description>Рекламное агентство CapWeb - интернет-маркетинг полного цикла - веб-разработка - веб-дизайн - 8(968)000-10-11</description>
	 <turbo:cms_plugin>C125AEEC6018B4A0EF9BF40E6615DD1791</turbo:cms_plugin>
	 <turbo:analytics id="34865895" type="Yandex"></turbo:analytics>
        <turbo:analytics id="UA-58169051-1" type="Google"></turbo:analytics>
                    <language>ru</language>

</channel>
</rss>


В настройках страницы нужно указать тип содержимого rss+xml.
Настройки страницы RSS
Настройки страницы RSS

Теперь что касается шапки фида.

В строки аналитики нужно вставить идентификаторы Яндекс.Метрики и Google Analytics.

С title, description все понятно — можно взять их с главной страницы вашего сайта или добавить фразу — turbo-страницы.

В тег link можно просто вбить адрес сайта, но этот вариант менее гибкий, хотя при переходе на https или смене доменного имени так или иначе нужно будет править адреса в базе.

Рассмотрим параметры Ditto. start и total определяют начало и конец выборки. Если документов более 500, лучше создать несколько страниц с фидами по 500 в каждом. Это связано с ограничениями Яндекса yandex.ru/dev/turbo/doc/rss/quota-docpage/

В этом примере я выбираю документы из ветки «Услуги», id родителя 3595, помимо документов в ветке есть ссылки, поэтому использую параметр where, задающий тип документа. Как вариант можно задать также номер шаблона, если в фиде нужно выбрать, например, все товары, хотя Яндекс рекомендует для товаров использовать YML-фид вместо RSS. Параметры глубины выборки, отображения отключенных для показа в меню и отключенных для публикации могут задаваться в зависимости от особенностей ваших веток.

[!Ditto? &start=`0` &total=`500` &parents=`3540` &depth=`1` &tpl=`tpl.turbo-m`  &language=`english-UTF8` &display=`all` &total=`all` &showInMenuOnly=`0` &showPublishedOnly=`1` &sortBy=`pubdate` &sortDir=`ASC` &where=`template=8`!]


Обратите внимание на английский язык в языковых настройках сниппета. Это не опечатка, а необходимость для правильности формата даты.

Теперь что касается шаблона элементов RSS-канала tpl.turbo.

≺item turbo="true"≻
    ≺title≻[+pagetitle+]≺/title≻
	≺link≻https://capweb.ru[!urlturbo? &id=`[+id+]`!]≺/link≻
    ≺turbo:topic≻[+pagetitle+]≺/turbo:topic≻
    ≺turbo:source≻https://capweb.ru[!urlturbo? &id=`[+id+]`!]≺/turbo:source≻
    ≺pubDate≻[+editedon:date=`%a, %d %b %Y %H:%M:%S`+] +3000≺/pubDate≻
    ≺turbo:content≻
    ≺![CDATA[
≺header≻
≺h1≻[+pagetitle+]≺/h1≻
≺/header≻
[+content+]
{{turbo-add}}
≻≺/turbo:content≻
≺/item≻


Чанк turbo-add содержит все, что рекомендует Яндекс: кнопку звонка, кнопки соцсетей, форму обратной связи и т. д. Примеры есть в справке Яндекса.

≺button formaction="tel:+7(123)456-78-90"
              data-background-color="#5B97B0"
              data-color="white"
              data-primary="true"≻Заказать столик≺/button≻
      ≺div data-block="widget-feedback" data-stick="false"≻
        ≺div data-block="chat" data-type="whatsapp" data-url="https://whatsapp.com"≻≺/div≻
        ≺div data-block="chat" data-type="telegram" data-url="http://telegram.com/"≻≺/div≻
        ≺div data-block="chat" data-type="vkontakte" data-url="https://vk.com/"≻≺/div≻
        ≺div data-block="chat" data-type="facebook" data-url="https://facebook.com"≻≺/div≻
        ≺div data-block="chat" data-type="viber" data-url="https://viber.com"≻≺/div≻
      ≺/div≻
      ≺p≻Наш адрес: ≺a href="#"≻Nullam dolor massa, porta a nulla in, ultricies vehicula arcu.≺/a≻≺/p≻
      ≺p≻Фотографии — https://capweb.ru/lookbook.html≺/p≻


Вот как это упрощенно сделано у меня:

≺button formaction="tel:+8(968)000-10-11"
              data-background-color="#5B97B0"
              data-color="white"
              data-primary="true"≻Позвонить≺/button≻
      ≺div data-block="widget-feedback" data-stick="false"≻
        ≺div data-block="chat" data-type="whatsapp" data-url="https://api.whatsapp.com/send?phone=79101405090"≻≺/div≻
        ≺div data-block="chat" data-type="viber" data-url="https://viber://chat?number=79101405090"≻≺/div≻
        ≺div data-block="chat" data-type="vkontakte" data-url="https://vk.com/capweb"≻≺/div≻
        ≺div data-block="chat" data-type="facebook" data-url="https://www.facebook.com/capweb"≻≺/div≻
 ≺/div≻


Если в число перебираемых Ditto документов входит главная страница, пригодится мой сниппет для избавления от /index.html. Возможно, у вас эта задачка решена лучше, но я применил такой костыль.

Код сниппета urlturbo:

≺?php
//$s = (!empty($_GET['id']) && is_numeric($_GET['id'])) ? (int) $_GET['id'] : $s;	
$s = (isset($id)) ? $id : $modx-≻documentIdentifier;
$s = (int)$s;
$do=$modx-≻getDocument($s);

if(($s==1)|($s==3070)) echo ''; else //echo '/'.$modx-≻getDocument($s)["alias"].'.html';

echo "/".$do["alias"].".html";
?≻


Если таких сложностей в вашем случае нет, адрес в ссылке задается стандартно: capweb.ru/[~[+id+]~]

Когда нужно исключить отображение определенных страниц в фиде, просто переберите их в отдельном Ditto и используйте аналогичный чанк tpl.turbo с шаблоном, где прописано turbo=«false» вместо turbo=«true». Лишние элементы, конечно, из этого шаблона можно удалить.

Теперь адрес созданной xml-страница можно подгружать в качестве источника в Вебмастер, а также ввести необходимые настройки: загрузить логотип, заполнить название, описание, идентификаторы счетчиков. Обратите внимание на настройки ленты. Они применяются ко всему фиду, поэтому если у вас интернет-магазин и вы хотите, например, включить ленту для информационных страниц и отключить для товарных, нужно использовать RSS-фид для одного типа страниц и YML — для другого.

Цитата из переписки с Яндексом:

2) Турбо-версии информационных страниц сайта следует формировать с помощью RSS-канала (https://yandex.ru/dev/turbo/doc/quick-start/articles-docpage/ ), а карточки товаров — с помощью YML (https://yandex.ru/dev/turbo/doc/quick-start/markets-docpage/ ). Вы можете сформировать Турбо-версию лишь для отдельных страниц сайта, а для остальных страниц оставить обычную версию.

3) Увы, но изменить надпись на данной кнопке не получится. Возможно, такая функция появится в будущем.

Настройки турбо-страниц

Настройки турбо-страниц

При загрузке фида возможны три варианта: «Без ошибок», «Ошибка обновления», «Предупреждение обновления».

Для отладки есть кнопки «Подробнее» (показывает номера строк фида с ошибками, позволяет открыть страницу в режиме отладки), «Перепроверить источник».