# content-signals

## Что такое Content Signals?

**Content Signals** — расширение стандарта [robots.txt](/glossary/robots-txt), позволяющее владельцу сайта явно декларировать политику использования контента AI-системами. Стандарт разработан contentsignals.org.

Директива добавляется в файл `robots.txt` в виде:

```
Content-Signal: ai-train=yes, search=yes, ai-input=yes
```

Три ключа:
- **`ai-train`** — разрешаете ли использовать ваш контент для обучения AI-моделей (`yes` / `no`)
- **`search`** — разрешаете ли AI-поисковикам индексировать и цитировать ваш контент (`yes` / `no`)
- **`ai-input`** — разрешаете ли подавать ваш контент как input в AI-агенты при выполнении задач (`yes` / `no`)

Отсутствие `Content-Signal` означает неопределённость — каждый AI-провайдер трактует её по-своему.

## Зачем сайту Content Signals?

До Content Signals владельцы сайтов имели только один инструмент контроля над AI-ботами — блокировка через `User-agent: GPTBot / Disallow: /`. Это бинарно: разрешить всё или заблокировать всё.

Content Signals добавляет **гранулярность**:

- Вы можете разрешить `search=yes` (цитирование в AI-поиске) но запретить `ai-train=no` (не использовать для обучения моделей)
- Медиа-компании, которые продают лицензии на обучение, ставят `ai-train=no` как явную декларацию своей позиции
- Open-source и образовательный контент часто ставят `ai-train=yes, search=yes, ai-input=yes` как поддержку AI-экосистемы

**Для GEO:** `search=yes` сигнализирует AI-поисковикам (Perplexity, ChatGPT Search, Google AI Overview), что ваш контент можно цитировать. Без этого сигнала AI-системы действуют осторожнее.

**Юридический аспект:** явная декларация `ai-train=no` в robots.txt становится одним из элементов защиты авторских прав в контексте AI-обучения. Ряд юрисдикций рассматривает такую декларацию как юридически значимое заявление о несогласии.

## Как добавить Content Signals?

Добавьте директиву в конец вашего `robots.txt`:

```
User-agent: *
Allow: /

Sitemap: https://example.com/sitemap.xml

Content-Signal: ai-train=yes, search=yes, ai-input=yes
```

**Рекомендации по выбору значений:**

| Тип сайта | Рекомендация |
|---|---|
| Открытый контент, документация, образование | `ai-train=yes, search=yes, ai-input=yes` |
| Коммерческий контент, новости, медиа | `ai-train=no, search=yes, ai-input=yes` |
| Закрытый контент, premium | `ai-train=no, search=no, ai-input=no` |
| SaaS, продукт без editorial контента | `ai-train=yes, search=yes, ai-input=yes` |

**Важно:** директива `Content-Signal` расположена на уровне всего файла, не внутри блока `User-agent`. Это глобальная декларация политики сайта.

**Пример с разными политиками для разных секций:**

Спецификация Content Signals также поддерживает per-path директивы в расширенном синтаксисе, но для большинства случаев достаточно одной глобальной декларации.

## Как мы проверяем Content Signals?

Наш сканер зависит от проверки `robots_txt` — сначала получаем файл robots.txt, затем парсим его на наличие директивы `Content-Signal`.

Алгоритм:

1. **Получить robots.txt** (результат кешируется из проверки `robots_txt`)
2. **Найти директиву** `Content-Signal:` (регистронезависимый поиск)
3. **Парсинг значений** — разбиваем по запятой, извлекаем ключи `ai-train`, `search`, `ai-input`

Статус **pass** — директива найдена с минимум одним ключом. Статус **fail** — директива отсутствует в robots.txt.

Мы намеренно не штрафуем за `ai-train=no` или другие конкретные значения — это политика сайта, не ошибка. Сканер только фиксирует наличие явной декларации, не её содержание.

[← Все термины глоссария](/glossary)
