Skip to content
mFilter
mFilter
Фасетная фильтрация для MODX 3 с поддержкой SEO URL
  1. Компоненты
  2. mFilter
  3. Интерфейс админки
  4. SEO шаблоны

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>

Приоритет шаблонов

  1. Шаблоны проверяются в порядке поля Порядок
  2. Первый подходящий шаблон применяется
  3. Более специфичные шаблоны должны иметь меньший номер

Рекомендуемый порядок:

  1. Конкретные комбинации (vendor=apple + color=black) — порядок 1-10
  2. Конкретный фильтр (vendor=apple) — порядок 11-50
  3. Любое значение фильтра (vendor=*) — порядок 51-100
  4. Общий шаблон — порядок 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}