Сниппет pdoTitle предназначен для автоматической генерации тега <title> страницы с учетом иерархии ресурсов, пагинации и GET-параметров. Он формирует SEO-дружественные заголовки, включая хлебные крошки родительских разделов, номера страниц при пагинации и поисковые запросы. Основное преимущество — избавление от дублирующихся title на страницах с пагинацией и автоматическое добавление структурированной информации о положении страницы в иерархии сайта.
Сниппет работает в связке с pdoPage и pdoCrumbs, автоматически подхватывая номера страниц и формируя цепочку родительских разделов. PdoTitle также может использоваться для генерации мета-описаний (description), что делает его универсальным инструментом для SEO оптимизации заголовков.
- Базовый синтаксис использования
- Параметры
- Параметры pdoCrumbs
- Структура генерируемого заголовка
- Параметр &titleField
- Управление иерархией родителей
- Настройка разделителя
- Работа с пагинацией
- Поисковые запросы в заголовке
- Title и Description для пагинации
- Вариант через pdoTitle
- Вариант через GET-параметр
- Оптимизация производительности
- Практические примеры для разных типов страниц
- Главная страница
- Каталог с пагинацией
- Блог с категориями
- Страница поиска
- Мультиязычные сайты
- Канонические ссылки и pdoTitle
- SEO рекомендации для title
- Отладка работы pdoTitle
- Альтернативные решения
Базовый синтаксис использования
Простейший вызов в теге title:
<title>[[!pdoTitle]]</title>
Вызов с названием сайта:
<title>[[!pdoTitle]] / [[++site_name]]</title>
Использование для meta description:
<meta name="description" content="[[!pdoTitle? &titleField=`description` ]]">
Вызов с отключением лишних функций:
<title>[[!pdoTitle? &limit=`0` &cache=`1` ®isterJs=`0` ]]</title>
Обратите внимание что сниппет должен вызываться некешируемым через восклицательный знак для корректной работы с пагинацией.
Параметры
PdoTitle имеет набор параметров для управления выводом заголовка.
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
&id |
0 |
ID ресурса для генерации заголовка |
&limit |
3 |
Максимальное количество родителей в заголовке |
&titleField |
longtitle |
Поле ресурса для использования в title |
&separator |
/ |
Разделитель между элементами заголовка |
&pageVarKey |
page |
Имя GET-параметра для номера страницы |
&queryVarKey |
query |
Имя GET-параметра для поискового запроса |
&minQuery |
3 |
Минимальная длина поискового запроса для вывода |
&tplPages |
— | Чанк для оформления пагинации в title |
&tplQuery |
— | Чанк для оформления поискового запроса |
&outputSeparator |
/ |
Разделитель элементов |
&cache |
0 |
Кешировать внутренний вызов pdoCrumbs |
&cacheTime |
0 |
Время жизни кеша в секундах |
®isterJs |
1 |
Подключать JavaScript для поддержки Ajax |
&showLog |
0 |
Вывести отладочную информацию |
Параметры pdoCrumbs
PdoTitle внутри себя вызывает pdoCrumbs для формирования цепочки родителей. Можно передавать любые параметры pdoCrumbs:
&showHome— показывать главную страницу&showCurrent— показывать текущую страницу&exclude— исключить определенные ресурсы
Структура генерируемого заголовка
PdoTitle формирует заголовок в следующем порядке:
[Цепочка родителей] / [Заголовок страницы] / [Пагинация] / [Поисковый запрос]
Пример для страницы каталога:
Главная / Каталог / Электроника / Смартфоны — страница 2 из 5
Пример для страницы поиска:
Главная / Каталог / Поиск: чехол для iPhone 15
Параметр &titleField
Параметр &titleField определяет какое поле ресурса использовать для заголовка.
Использование longtitle по умолчанию:
<title>[[!pdoTitle]]</title>
Использование pagetitle вместо longtitle:
<title>[[!pdoTitle? &titleField=`pagetitle`]]</title>
Использование TV-параметра для заголовка:
<title>[[!pdoTitle? &titleField=`seo_title`]]</title>
Использование description для мета-тега:
<meta name="description" content="[[!pdoTitle? &titleField=`description` &limit=`0` ®isterJs=`0`]]">
Управление иерархией родителей
Параметр &limit контролирует количество родительских разделов в заголовке.
Отключить вывод родителей:
<title>[[!pdoTitle? &limit=`0` ]] — [[++site_name]]</title>
Вывод только одного родителя:
<title>[[!pdoTitle? &limit=`1` ]]</title>
Вывод до трех родителей (по умолчанию):
<title>[[!pdoTitle? &limit=`3` ]]</title>
Неограниченное количество родителей:
<title>[[!pdoTitle? &limit=`99` ]]</title>
Настройка разделителя
Параметр &separator определяет символ между элементами заголовка.
Использование тире:
<title>[[!pdoTitle? &separator=` — `]]</title>
Использование вертикальной черты:
<title>[[!pdoTitle? &separator=` | `]]</title>
Использование стрелки:
<title>[[!pdoTitle? &separator=` → `]]</title>
Использование двоеточия:
<title>[[!pdoTitle? &separator=`: `]]</title>
Работа с пагинацией
PdoTitle автоматически определяет наличие GET-параметра пагинации и добавляет информацию о текущей странице.
Базовая настройка для страниц с pdoPage:
<title>[[!pdoTitle? &cache=`1` ®isterJs=`0` ]] — [[++site_name]]</title>
Результат для второй страницы:
Название раздела — страница 2 из 5 — Название сайта
Кастомный шаблон для пагинации:
<title>[[!pdoTitle? &tplPages=`@INLINE стр. [[+page]] / [[+pageCount]]`]]</title>
Если используется нестандартный параметр для пагинации:
<title>[[!pdoTitle? &pageVarKey=`news` ]]</title>
Поисковые запросы в заголовке
PdoTitle может подхватывать поисковый запрос из GET-параметров и добавлять его в title.
Базовая настройка для страниц поиска:
<title>[[!pdoTitle? &queryVarKey=`query`]]</title>
Результат для поиска по запросу «чехол iPhone»:
Каталог / Поиск: чехол iPhone — Название сайта
Кастомный шаблон для поискового запроса:
<title>[[!pdoTitle? &tplQuery=`@INLINE Поиск по запросу «[[+query]]»`]]</title>
Использование другого GET-параметра:
<title>[[!pdoTitle? &queryVarKey=`s`]]</title>
Title и Description для пагинации
Полная настройка мета-тегов для страниц с постраничной навигацией.
Вариант через pdoTitle
<title>[[!pdoTitle? &limit=`0` &cache=`1` ®isterJs=`0` ]]</title> <meta name="description" content="[[!pdoTitle? &limit=`0` &cache=`1` &titleField=`description` ®isterJs=`0` ]]">
На Fenom:
<title>{'!pdoTitle' | snippet : [ 'limit' => '0', 'cache' => '1', 'registerJs' => '0' ]}</title> <meta name="description" content="{'!pdoTitle' | snippet : [ 'limit' => '0', 'cache' => '1', 'titleField' => 'description', 'registerJs' => '0' ]}">
Вариант через GET-параметр
Создайте сниппет get_post:
Использование в head:
<title>[[*longtitle]][[!get_post]]</title> <meta name="description" content="[[*description]][[!get_post]]">
Расширенный вариант с передачей текста:
Вызов:
<title>[[!get_post? &text=`[[*longtitle]]`]]</title> <meta name="description" content="[[!get_post? &text=`[[*description]]`]]">
Оптимизация производительности
Параметр &cache включает кеширование результатов:
<title>[[!pdoTitle? &cache=`1`]]</title>
Параметр ®isterJs отключает регистрацию JavaScript если не нужен:
<title>[[!pdoTitle? ®isterJs=`0`]]</title>
Полная оптимизация для продакшена:
<title>[[!pdoTitle? &limit=`0` &cache=`1` ®isterJs=`0` &separator=` — `]] — [[++site_name]]</title>
Практические примеры для разных типов страниц
Главная страница
Вывод только названия сайта для главной:
[[*id:is=`[[++site_start]]`:then=`
<title>[[++site_name]] — [[*description:limit=`100`]]</title>
`:else=`
<title>[[!pdoTitle?
&limit=`2`
&cache=`1`
®isterJs=`0`
]] — [[++site_name]]</title>
`]]
Каталог с пагинацией
Настройка title для каталога товаров:
<title>[[!pdoTitle?
&limit=`1`
&cache=`1`
®isterJs=`0`
&separator=` — `
]] | [[++site_name]]</title>
<meta name="description" content="[[!pdoTitle?
&limit=`0`
&titleField=`description`
&cache=`1`
®isterJs=`0`
]]">
Блог с категориями
Заголовки для статей блога:
<title>[[!pdoTitle? &limit=`2` &titleField=`longtitle` &cache=`1` ®isterJs=`0` ]] / [[++site_name]]</title>
Страница поиска
Title для результатов поиска:
<title>[[!pdoTitle? &limit=`1` &queryVarKey=`query` &tplQuery=`@INLINE Поиск: [[+query]]`]]</title>
Мультиязычные сайты
Использование названия сайта из контекста:
<title>[[!pdoTitle? &limit=`0` ]] — [[++translate_site_name]]</title>
Или с условием по контексту:
<title>[[!pdoTitle? &limit=`2` ]] — [[++[[!modx.context:is=`en`:then=`site_name_en`:else=`site_name`]]]]</title>
Канонические ссылки и pdoTitle
PdoTitle работает совместно с параметром &setMeta из pdoPage для управления мета-тегами.
Если на странице несколько pdoPage, для остальных отключите метатеги:
[[!pdoPage? &parents=`10` &setMeta=`0` ]]
Отключить canonical если не нужен:
[[!pdoPage? &parents=`5` &setMetaCanonical=`0` ]]
SEO рекомендации для title
Оптимальная длина title — от 30 до 100 символов (около 60-70).
Структура эффективного title:
- Прямое вхождение основного запроса
- Дополнительные ключевые слова
- Название бренда/сайта (необязательно)
Плохой пример:
<title>[[++site_name]] — [[*pagetitle]]</title>
Проблема: название сайта впереди снижает релевантность.
Хороший пример:
<title>[[!pdoTitle? &limit=`0` &titleField=`longtitle` ]] — [[++site_name]]</title>
Title должен описывать конкретную страницу, а не сайт в целом.
Отладка работы pdoTitle
Проверка генерируемого заголовка:
<title>[[!pdoTitle? &showLog=`1` ]]</title>
Вывод в консоли браузера покажет какие элементы были включены в заголовок и почему.
Проверка наличия GET-параметра page:
[[!+page:notempty=`Страница [[!+page]]`]]
Альтернативные решения
Если pdoTitle не подходит, можно использовать условную логику на Fenom:
<title>{$_modx->resource.longtitle} {if $_GET.page} — страница {$_GET.page} {/if} — {$_modx->config.site_name}</title>
Или через ручной сниппет для полного контроля над логикой.






