
SEO шаблоны
SEO шаблоны генерируют уникальные метаданные для страниц фильтрации.
Назначение
Для каждой комбинации фильтров можно настроить:
- Title страницы
- H1 заголовок
- Meta description
- SEO-текст
- Canonical URL
- Индексация (noindex)
Таблица шаблонов
| Столбец | Описание |
|---|---|
| Название | Идентификатор шаблона |
| Title | Шаблон тега title |
| H1 | Шаблон заголовка |
| Условия | Когда применяется |
| Активен | Включён/выключен |
| Порядок | Приоритет |
Создание шаблона
Основные поля
| Поле | Описание |
|---|---|
| Название | Для идентификации в админке |
| Title | Шаблон тега <title> |
| H1 | Шаблон заголовка <h1> |
| Description | Шаблон мета-описания |
| Текст | SEO-текст для страницы |
| Условия | JSON с правилами применения |
| Активен | Использовать ли шаблон |
| Порядок | Приоритет (меньше = выше) |
Условия применения
Условия определяют, когда шаблон будет использован:
json
{
"filters": {
"vendor": ["apple"],
"color": ["*"]
},
"resources": [5, 10]
}Синтаксис условий
| Условие | Описание |
|---|---|
["value1", "value2"] | Точное совпадение значений |
["*"] | Любое значение фильтра |
[] или отсутствие | Фильтр не выбран |
Пример: только Apple
json
{
"filters": {
"vendor": ["apple"]
}
}Пример: Apple + любой цвет
json
{
"filters": {
"vendor": ["apple"],
"color": ["*"]
}
}Пример: категория + любой фильтр
json
{
"filters": {
"vendor": ["*"]
},
"resources": [5]
}Плейсхолдеры
Фильтры
| Плейсхолдер | Описание |
|---|---|
{$filters.vendor} | Выбранный производитель |
{$filters.color} | Выбранный цвет |
{$filters.price.min} | Минимальная цена |
{$filters.price.max} | Максимальная цена |
Ресурс
| Плейсхолдер | Описание |
|---|---|
{$resource.pagetitle} | Название страницы |
{$resource.longtitle} | Расширенный заголовок |
{$resource.description} | Описание |
{$resource.id} | ID ресурса |
Результаты
| Плейсхолдер | Описание |
|---|---|
{$total} | Количество найденных товаров |
{$page} | Текущая страница |
Словоформы
| Плейсхолдер | Описание |
|---|---|
{$filters.vendor|genitive} | Родительный падеж |
{$filters.vendor|dative} | Дательный падеж |
{$filters.vendor|accusative} | Винительный падеж |
{$filters.vendor|instrumental} | Творительный падеж |
{$filters.vendor|prepositional} | Предложный падеж |
{$filters.vendor|plural} | Множественное число |
Примеры шаблонов
Производитель
Условия:
json
{"filters": {"vendor": ["*"]}}Title:
{$filters.vendor} — купить в Москве | {$resource.pagetitle}H1:
{$filters.vendor}Description:
Купить {$filters.vendor|accusative} в интернет-магазине. {$total} товаров в наличии. Доставка по России.Производитель + цвет
Условия:
json
{"filters": {"vendor": ["*"], "color": ["*"]}}Title:
{$filters.vendor} {$filters.color} — купить | {$resource.pagetitle}H1:
{$filters.vendor} {$filters.color|nominative}Диапазон цен
Условия:
json
{"filters": {"price": ["*"]}}Title:
{$resource.pagetitle} от {$filters.price.min} до {$filters.price.max} руб.Конкретный бренд (Apple)
Условия:
json
{"filters": {"vendor": ["apple"]}}Title:
Техника Apple — купить в МосквеТекст:
<p>В нашем магазине представлен полный ассортимент техники Apple:
iPhone, iPad, MacBook и аксессуары.</p>
<p>Мы являемся официальным реселлером и предоставляем
гарантию производителя на все товары.</p>Приоритет шаблонов
- Шаблоны проверяются в порядке поля Порядок
- Первый подходящий шаблон применяется
- Более специфичные шаблоны должны иметь меньший номер
Рекомендуемый порядок:
- Конкретные комбинации (vendor=apple + color=black) — порядок 1-10
- Конкретный фильтр (vendor=apple) — порядок 11-50
- Любое значение фильтра (vendor=*) — порядок 51-100
- Общий шаблон — порядок 100+
Настройки индексации
Noindex для комбинаций
Добавьте в условия noindex: true:
json
{
"filters": {
"vendor": ["*"],
"color": ["*"],
"size": ["*"]
},
"noindex": true
}Canonical
По умолчанию canonical указывает на страницу без фильтров. Можно переопределить в шаблоне.
Программный доступ
php
$mfilter = $modx->services->get('mfilter');
$seoBuilder = $mfilter->getSeoBuilder();
$seoData = $seoBuilder->build($resourceId, $filters);
// [
// 'title' => 'Apple — купить в Москве',
// 'h1' => 'Apple',
// 'description' => 'Купить Apple в интернет-магазине...',
// 'text' => '<p>SEO текст...</p>',
// 'canonical' => '/catalog/',
// 'noindex' => false
// ]Вывод на фронтенде
html
{if $mfilter.seo.title}
<title>{$mfilter.seo.title}</title>
{/if}
{if $mfilter.seo.h1}
<h1>{$mfilter.seo.h1}</h1>
{/if}
{if $mfilter.seo.description}
<meta name="description" content="{$mfilter.seo.description}">
{/if}
{if $mfilter.seo.noindex}
<meta name="robots" content="noindex, follow">
{/if}
{if $mfilter.seo.text}
<div class="seo-text">{$mfilter.seo.text}</div>
{/if}