**TL;DR.** SEO для страниц категорий имеет три правила. (1) Установите каноническую ссылку на базовую категорию и разрешите конкретные комбинации фильтров, которые соответствуют реальным поисковым запросам. (2) Установите noindex для произвольных комбинаций фасетов и результатов поиска, чтобы контролировать бюджет обхода. (3) Рендерите на стороне сервера и используйте схему CollectionPage. Шаблон "благословленного фасета" является стратегическим рычагом для захвата длиннохвостых запросов.

## Почему SEO для категорий важно

Страницы категорий захватывают наиболее целевые коммерческие запросы:

- "кожаные сумки" (1.2M ежемесячных поисков в Google по всему миру)
- "коричневая кожаная сумка через плечо" (40k ежемесячных)
- "веганская кожаная сумка для ноутбука для женщин" (8k ежемесячных)

Каждый из этих запросов имеет форму категории. Правильный URL для каждого из них — это разница между трафиком средней и верхней воронки.

## Иерархия URL

Рекомендуемая структура:

```
/categories/leather-bags                       (родитель)
/categories/leather-bags/messenger             (дочерний)
/categories/leather-bags/messenger/work        (внук — только если необходимо)
```

Или с префиксом локали:

```
/en/categories/leather-bags
/de/categorien/leder-taschen
```

Ограничьте глубину до 3 уровней. За пределами этого навигация становится хрупкой, а ценность ссылок размывается.

## Проблема фасетной навигации

Типичная страница PLP имеет:

- 5 фильтров по цвету
- 4 фильтра по размеру
- 8 фильтров по ценовому диапазону
- 3 порядка сортировки
- N страниц пагинации

Комбинации: 5 × 4 × 8 × 3 × N = 480N URL на категорию. С 50 категориями у вас будет 24,000N URL только от комбинаций фасетов. Бюджет обхода разрушен.

Решение:

| Шаблон URL                                         | Решение по индексации     |
| --------------------------------------------------- | ------------------------- |
| `/categories/leather-bags`                            | Индексировать             |
| `/categories/leather-bags?page=2`                     | Индексировать, самоканонический |
| `/categories/leather-bags?sort=price-asc`              | **Канонический к базовому** + noindex |
| `/categories/leather-bags?color=brown`                 | Зависит — см. "благословленные фасеты" |
| `/categories/leather-bags?color=brown&size=m`           | Канонический к базовому + noindex |
| `/search?q=leather+bag`                                | **Noindex** всегда        |

## Благословленные фасеты

Некоторые комбинации фильтров соответствуют реальным поисковым запросам, которые вводят пользователи. Они заслуживают собственного индексируемого URL.

Как решить, что благословить:

1. **Данные о запросах от пользователей**: Google Search Console → Отчет о запросах. Фильтруйте по странице категории. Ищите запросы, которые подразумевают конкретный фасет ("коричневая кожаная сумка", "маленькая кожаная сумка").
2. **Данные о объеме поиска**: Инструменты для ключевых слов подтверждают, что "коричневая кожаная сумка" ищется. "Винтажная выцветшая кожаная сумка размером средний за $80-$120" — нет.
3. **Данные о конверсии**: какие комбинации фильтров приводят к покупкам? Высококонверсионные комбинации с объемом поиска являются благословленными кандидатами.

Реализация благословленного фасета:

```ts
// Псевдокод
interface BlessedFacet {
  facet: { name: string; value: string }; // например, { name: "color", value: "brown" }
  category: string; // например, "leather-bags"
  seoTitleTemplate: string; // например, "Коричневые кожаные сумки — Коллекция {brand}"
  seoDescription: string;
  ogImageUrl?: string;
  noIndex?: boolean; // переопределение
}
```

Для благословленного фасета рендерьте по чистому URL с оптимизированными метаданными:

```
URL:     /categories/leather-bags/color-brown
Title:   Коричневые кожаные сумки | Acme Leather Goods
Meta:    Откройте для себя нашу коллекцию коричневых кожаных сумок — ручная работа из кожи высшего качества. Бесплатная доставка при заказах свыше $50.
Canonical: self
Index: yes
```

Неблагословленные комбинации (например, color=brown + size=medium + sort=price-asc):

```
URL:     /categories/leather-bags?color=brown&size=medium&sort=price-asc
Title:   Кожаные сумки | Acme Leather Goods  (возврат к базовому)
Canonical: /categories/leather-bags
Index: no
```

## URL для поисковых запросов

Результаты поиска почти всегда:

- Соответствуют многим похожим URL.
- Имеют низкое качество внутреннего контента (просто список продуктов).
- Высоко переменчивы (каждая опечатка создает новый URL).

Установите noindex для них:

```html
<meta name="robots" content="noindex, follow" />
```

`follow`, потому что внутренние ссылки с поисковых страниц все еще передают ценность.

## Пагинация

Лучшие практики 2026 года:

- Каждая страница (страница 2, 3, ...) самоканоническая.
- `rel="next"` и `rel="prev"` устарели, но все еще интерпретируются как подсказки — используйте их, если это просто.
- Полное содержание каждой страницы должно рендериться на сервере.
- Общее количество результатов и текущая страница должны быть видны в H1 или выше на странице для ясности пользователю.

```html
<head>
  <link rel="canonical" href="https://example.com/categories/leather-bags?page=2" />
  <link rel="prev" href="https://example.com/categories/leather-bags" />
  <link rel="next" href="https://example.com/categories/leather-bags?page=3" />
</head>
```

## Рендеринг на сервере

Страницы категорий должны рендерить свое содержание на стороне сервера. Клиентские рендеренные PLP на React, где вы получаете продукты в `useEffect`, получают почти пустой HTML-ответ от краулера Google.

Используйте компоненты сервера Next.js (или эквивалентный SSR/SSG фреймворк) для сетки продуктов. Пагинация, сортировка и фильтры могут быть границами Suspense, которые потоково загружаются после статической оболочки.

## Схема CollectionPage

Оборачивайте PLP в `CollectionPage` с встроенным `ItemList`:

```json
{
  "@context": "https://schema.org",
  "@type": "CollectionPage",
  "name": "Кожаные сумки",
  "description": "Просмотрите нашу коллекцию кожаных сумок ручной работы.",
  "url": "https://example.com/categories/leather-bags",
  "mainEntity": {
    "@type": "ItemList",
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "url": "https://example.com/products/brown-messenger-bag"
      },
      {
        "@type": "ListItem",
        "position": 2,
        "url": "https://example.com/products/black-leather-tote"
      }
    ]
  },
  "breadcrumb": {
    "@type": "BreadcrumbList",
    "itemListElement": [
      { "@type": "ListItem", "position": 1, "name": "Главная", "item": "https://example.com" },
      { "@type": "ListItem", "position": 2, "name": "Категории", "item": "https://example.com/categories" },
      { "@type": "ListItem", "position": 3, "name": "Кожаные сумки", "item": "https://example.com/categories/leather-bags" }
    ]
  }
}
```

Для благословленных URL фасетов также создавайте `CollectionPage` с заголовком/описанием, специфичным для фасета, и `ItemList` отфильтрованных продуктов.

## Заголовок и описание для каждого благословленного фасета

Заголовки и описания — это то, как благословленные фасеты выигрывают свои запросы.

Базовая категория:

```
<title>Кожаные сумки | Acme — Кожаные изделия ручной работы из Италии</title>
<meta name="description" content="Просмотрите нашу коллекцию кожаных сумок ручной работы из Италии. Материалы из кожи высшего качества, прочная латунная фурнитура, бесплатная доставка при заказах свыше $50.">
```

Благословленный фасет (color=brown):

```
<title>Коричневые кожаные сумки | Acme — Кожаные изделия ручной работы из Италии</title>
<meta name="description" content="Откройте для себя коричневые кожаные сумки ручной работы из Италии. Материалы из кожи высшего качества, прочная латунная фурнитура, бесплатная доставка при заказах свыше $50.">
```

Благословленный фасет (color=brown + style=messenger):

```
<title>Коричневые кожаные сумки через плечо | Acme</title>
<meta name="description" content="Просмотрите нашу коллекцию коричневых кожаных сумок через плечо. Ручная работа в Италии из кожи высшего качества и прочной латунной фурнитуры. Бесплатная доставка при заказах свыше $50.">
```

## Как Ordiko обрабатывает SEO для категорий

- Шаблон URL `/categories/{slug}` с поддержкой иерархии.
- Таблица `BlessedFacet` для каждого магазина: фасет, категория, переопределения SEO-шаблонов.
- Благословленные фасеты рендерятся по чистым URL (`/categories/leather-bags/color-brown`); неблагословленные канонические к базовому с noindex.
- Страницы поисковых запросов автоматически получают noindex.
- Пагинация самоканоническая.
- Схема CollectionPage + ItemList + Breadcrumb на каждой PLP.
- Рендеринг на сервере с использованием компонентов сервера React.

## FAQ

**Должен ли я полностью установить noindex для фасетных URL?**
Установите noindex для неблагословленных комбинаций (произвольные фильтры + сортировка). Разрешите индексацию базовой категории и белого списка 'благословленных' фасетов, которые соответствуют реальным поисковым запросам. Белый список — это стратегический рычаг — именно так 'кожаные сумки', 'коричневые кожаные сумки', 'коричневые кожаные сумки через плечо' получают каждую свою возможность для ранжирования.

**Как мне решить, какие фасеты благословить?**
Перекрестно проверьте ваши значения фильтров с данными о поисковых запросах (Google Search Console + ваш собственный журнал поиска + инструменты для ключевых слов). Значения фильтров, которые соответствуют реальным поискам, становятся благословленными. Произвольные комбинации значений остаются noindex.

**Что насчет комбинаций цвет + размер + цена?**
Эти комбинации сложные. 'коричневая кожаная сумка' можно искать; 'коричневая кожаная сумка размером средний за менее чем $200' — нет. Благословите комбинации с одним атрибутом и максимум с двумя атрибутами; установите noindex для комбинаций с 3 и более атрибутами.

**Как Ordiko обрабатывает фасеты?**
Настройки SEO Ordiko открывают массив blessedFacets для каждого магазина. Каждая запись указывает фасет (например, color=brown), его SEO-шаблон (заголовок, описание, переопределение OG-изображения) и создает чистый URL, такой как /categories/leather-bags/color-brown, который индексируется. Другие комбинации автоматически получают noindex.