pdoSitemap

07 февраля 2016, 14:58

Быстрый сниппет генерации карты сайта для поисковых систем (sitemap.xml). Понимает параметры сниппета GoogleSitemap (конвертирует в собственные) и легко его заменяет.

Главная особенность - очень высокая скорость, по сравнению с аналогом. На сайте bezumkin.ru при 1700 страниц скорость генерации возросла в 12 раз, с 8.4 сек. до 0.7.

По умолчанию отключена проверка прав на доступ к документам. Это легко исправить включением параметра &checkPermissions (Внимание: замедляет работу!):

[[!pdoSitemap?
    &checkPermissions=`list`
]]

По возможности ресурсы лучше исключать из карты параметрами сниппета.

Параметры

pdoSitemap принимает все параметры pdoTools и некоторые свои:

Параметр По умолчанию Описание
&sitemapSchema http://www.sitemaps.org/schemas/sitemap/0.9 Схема карты сайта.
&forceXML 1 Принудительно выводить страницу как XML.
&priorityTV Дополнительное поле, в котором указывается приоритет документа. Нужно добавить его в параметр &includeTVs

Шаблоны

&tpl

@INLINE <url>\n\t
<loc>[[+url]]</loc>\n\t
<lastmod>[[+date]]</lastmod>\n\t
<changefreq>[[+update]]</changefreq>\n\t
<priority>[[+priority]]</priority>\n
</url>

&tplWrapper

@INLINE <?xml version=\"1.0\" encoding=\"[[++modx_charset]]\"?>\n<urlset xmlns=\"[[+schema]]\">\n[[+output]]\n</urlset>

Приоритет и частота обновления для поисковиков устанавливаются в зависимости от последней даты изменения документа:

Времени с последнего обновления документа Приоритет Частота обновления
Менее суток назад 1.0 daily
Более суток и менее недели назад 0.75 weekly
Более недели и менее месяца назад 0.5 weekly
Более месяца назад 0.25 monthly

Инструкция по созданию файла sitemap.xml

  1. Создайте новый документ в корне сайта. На вкладке Документ выберите пустой шаблон, укажите Заголовок документа (не важно какой), и псевдоним sitemap. Проверьте, чтобы стояли галочки «Опубликован» и «Не показывать в меню».
  2. Перейдите на вкладку Настройки и укажите «Тип содержимого» - «XML».
  3. Уберите галочку с «Использовать HTML-редактор» и сохраните документ.
  4. В содержимом ресурса вызовите только сниппет pdoSitemap (см. Примеры ниже).

Примеры

Обычный вывод карты сайта для текущего контекста. В большинстве случаев этого может быть достаточно:

[[pdoSitemap]]

Генерируем карту сайта только из определённый контейнеров:

[[pdoSitemap?
    &parents=`10`
]]

Исключаем ресурсы с id = 15 и 25, вместе с их потомками:

[[pdoSitemap?
    &parents=`10, -15,-25`
]]

А теперь исключаем id = 15 с потомками, а 25 - без:

[[pdoSitemap?
    &resources=`-25`
    &parents=`-15,10`
]]

Добавляем еще один контекст:

[[pdoSitemap?
    &resources=`-25`
    &parents=`-15,10`
    &context=`web,catalog`
]]

А вот так можно посмотреть лог выборки карты:

[[pdoSitemap?
    &resources=`-25`
    &parents=`-15,10`
    &context=`web,catalog`
    &showLog=`1`
    &forceXML=`0`
]]