Хотите спросить об оптимизации Вашего сайта? Пишите, ответим, подскажем.
+7(910)140-50-90 (Кэп)

Турбо-страницы для MODx Evolution, MODx Revolution

Не секрет, что Турбо-страницы для вебсайта, которому нужен поисковый трафик и хорошие ПФ на мобильных, становятся обязательным признаком качества, а, возможно, стали еще в 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>https://capweb.ru/</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>



[[Ditto? &start=`0` &total=`500` &parents=`3595` &filter=`id,3669,2` &tpl=`tpl.turbo`  &language=`english-UTF8` &display=`all` &total=`all` &depth=`2` &showInMenuOnly=`0` &showPublishedOnly=`1` &sortBy=`pubdate` &sortDir=`ASC` &where=`type IN ('document')`]]

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

Страница RSS-фида

Настройки страницы RSS-фида

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

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

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

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

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

[[Ditto? &start=`0` &total=`500` &parents=`3595` &filter=`id,3669,2` &tpl=`tpl.turbo`  &language=`english-UTF8` &display=`all` &total=`all` &depth=`2` &showInMenuOnly=`0` &showPublishedOnly=`1` &sortBy=`pubdate` &sortDir=`ASC` &where=`type IN ('document')`]]

В этом примере я выбираю документы из ветки "Услуги", 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);
//var_dump($do["type"]);

//echo $do["alias"];

//echo $modx->documentIdentifier;
//echo "Now viewing :".$modx->documentIdentifier;
if(($s==1)|($s==3070)) echo ''; else //echo '/'.$modx->getDocument($s)["alias"].'.html';
//echo $modx->getDocument($s)["alias"];
echo "/".$do["alias"].".html";
?>

Если таких сложностей в вашем случае нет, адрес в ссылке задается стандартно: https://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) Увы, но изменить надпись на данной кнопке не получится. Возможно, такая функция появится в будущем.

Отладка RSS-фида

Отладка страниц RSS-фида

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

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

Если ошибки возникают из-за того, что дата все же выводится на русском, поможет простой лайфхак.

Сниппет data-en:

<?php
setlocale(LC_ALL, 'en_US.UTF-8');
if ( $val == '' ) $val=time();
if ($format == '' ) $format = "%a, %d %b %Y %H:%M:%S";
return strftime($format, $val);
?>

Вызов в чанке tpl-turbo:

<pubDate?>[[data-en? &val=`[+editedon+]`]] +3000</pubDate?>

RSS для MODx Revolution: все то же самое

Код документа:

<?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>3D-печать в Нижнем Новгороде</title>
<link>[[++site_url]]</link>
<description>Услуги 3D-печати в Нижнем Новгороде - 8(969)601-61-11</description>
	 <turbo:cms_plugin>C125AEEC6018B4A0EF9BF40E6615DD1791</turbo:cms_plugin>
	 <turbo:analytics id="34865895" type="Yandex"></turbo:analytics>
        <turbo:analytics id="UA-109522369-1" type="Google"></turbo:analytics>
                    <language>ru</language>
    [[!getResources?
      &tpl=`turbo`
      &parents=`1,121`
      &depth=`2`
      &limit=`40`
      &includeContent=`1`
      &includeTVs=`1`
      &showHidden=`0`
      &hideContainers=`0`
    ]]
</channel>
</rss>

Код чанка turbo:

<item turbo="true">
    <title>[[+pagetitle]]</title>
	<link>https://3d-52.ru/[[~[[+id]]]]</link>
    <turbo:topic>[[+pagetitle]]</turbo:topic>
    <turbo:source>https://3d-52.ru/[[~[[+id]]]]</turbo:source>
    <pubDate>[[+createdon:strtotime:date=`%a, %d %b %Y %H:%M:%S`]] +3000</pubDate>
    <turbo:content>
    <![CDATA[
<header>
<h1>[[+pagetitle]]</h1>
</header>
[[+content]]

<button formaction="tel:+7(969)601-61-11"
              data-background-color="#5B97B0"
              data-color="white"
              data-primary="true">Позвонить</button>

]]></turbo:content>
</item>

Подводные камни

Не видел ни одного мануала по getResources pdoResources, где бы толково объяснялось, как фильтровать документы, в каком случае родительская папка включается в выборку, в каком нет. Всё приходится тестировать и отлаживать для конкретной версии движка, и каждый раз встречаются сюрпризы. Например, может отказаться отображаться дата.

Для версии движка MODX Revolution 2.7.1-pl (advanced) мне пришлось использовать такое решение.

<pubDate>[[data-en? &val=`[[+editedon:is=``:then=`[[+editedon]]`:else=`[[+createdon]]`]]`]] +3000</pubDate>

По каким-то причинам для прохождения валидации дата в данном случае выводится на английском, дополнительно идет страховка от пустого поля editedon.

Подробнее про сложности с выводом дат — тут.

Код сниппета data-en:

<?php
setlocale(LC_ALL, 'en_US.UTF-8');
if ( $val == '' ) $val=time();
if ($format == '' ) $format = "%a, %d %b %Y %H:%M:%S";
return strftime($format, $val);

Возвращаясь к вопросу фильтрации документов, вот полезный материал про использование where: https://www.riwkus.pro/notes/web/back-end/modx/where-examples-of-the-condition-records-to-fetch/.

На том же движке MODX Revolution 2.7.1-pl (advanced) у меня установлены pdoTools, и используется pdoResources getResources.

Для вывода документов тут используется неочевидная логика: документы не выводятся только указанием resources, нужно обязательно указываьт родителя, затем следующей строкой можно вычеркнуть какие-либо документы:

[[pdoResources?
	&tpl=`turbo-d`
	&parents=`27`
	&resources=`-28,-30`
	&depth=`2`
	&limit=`540`
      &showHidden=`0`
      &includeContent=`1`
      &includeTVs=`1`
      &showHidden=`0`
      &hideContainers=`0`
      &where=`class_key NOT IN ('modWebLink')`
]]

Также можно использовать удаление документов через where: &where=`id NOT IN (77,115)`.

В примере выше я использую where для отсеивания ссылок.

Сюрпризом была также необходимость явно указывать лимит, без этого параметра система очень ленится выводить все документы.

Напоследок ещё один момент: если, например, нужно исключить из режима турбо главную страницу, не нужно ждать чуда от Яндекса, необходимо указать для вывода шаблон с item turbo="false", включив вызов соответствующего чанка в код страницы фида, назвав этот чанк, например, turbo-no-m-main, и максимально его упростив и сократив.

Спасибо тебе, единственный в мире читатель моей заметки, долиставший до этой строки!

Следующая статья: Тренды логотипов 2021 https://capweb.ru/trendy-logotipov-2021.html

Предыдущая статья: Влияние https на ранжирование в поисковых системах https://capweb.ru/vliyanie-https-na-ranzhirovanie-v-poiskovyih-sistemah.html

Позиции сайта Автогарант-НН на апрель 2014 г.
Позиции сайта veragold.ru на декабрь 2014 г.
reative
nalytics
romotion

Оставьте Вашу контактную информацию, и мы свяжемся с Вами!

Получайте горячие новости интернет-маркетинга и вечную скидку 5%!