Content-Signal: что ИИ вправе делать с вашим контентом

robots.txt отвечает на один вопрос и никогда не отвечал ни на какой другой: можно ли это скачать. Да или нет, по путям, по ботам. У него нет слов для позиции, которой на самом деле придерживается большинство владельцев сайтов: индексируй меня, цитируй меня, присылай мне читателей, но не обучай модель на том, что я пишу.

Поэтому люди дёргают единственный доступный рычаг. Закрывают всё через Disallow и вместе с обучением теряют трафик.

Разрешение скачать — не разрешение использовать

Это два разных вопроса, и только один из них про ваш канал. Краулер, который прочитал страницу с ценами и процитировал её, когда кто-то спросил, что купить, оказывает вам услугу. Те же байты, вылитые в обучающий набор, — совсем другая сделка, и вас в ней нет.

Закрыть всё — значит схлопнуть оба вопроса в одно «нет». Для платного архива это может быть верно. Для бизнеса, который хочет, чтобы его находили и рекомендовали, это неправильное значение по умолчанию: из ответов исчезаете вы, а конкуренты остаются.

Content-Signal — тот слой, который позволяет их разделить.

Три сигнала

Content-Signal: search=yes, ai-input=yes, ai-train=no
  • search — построение поискового индекса и выдача результатов, то есть ссылок и коротких фрагментов. Без сгенерированных ИИ сводок: это уже следующий сигнал.
  • ai-input — передача вашей страницы модели в момент ответа. RAG, граундинг, источники под сгенерированным ответом.
  • ai-train — обучение или дообучение модели на вашем контенте.

Они независимы. Любая комбинация допустима, и несколько из них — продуманные позиции, а не оплошность.

Значения — yes и no. Нет maybe, нет синтаксиса по путям, нет срока действия.

Пропустить сигнал — не то же самое, что написать no. По этой договорённости использование, о котором вы ничего не сказали, не разрешено и не запрещено: вы просто не ответили. Наш генератор всегда пишет все три, и это правильная привычка, потому что молчание — единственный ответ, с которым никто ничего не может сделать.

Куда это ставится

В два места, и оба обходятся дёшево.

В robots.txt, внутрь группы user-agent:

User-agent: *
Allow: /
Content-Signal: search=yes, ai-input=yes, ai-train=no

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

И в заголовок HTTP-ответа:

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

agentready.md отдаёт оба варианта. Именно этот заголовок уходит с каждым ответом: с каждой страницей, с каждой .md-версией, с каждым вызовом API.

Для nginx:

add_header Content-Signal "search=yes, ai-input=yes, ai-train=no" always;

Для Apache:

<IfModule mod_headers.c>
  Header set Content-Signal "search=yes, ai-input=yes, ai-train=no"
</IfModule>

Заголовок отрабатывает своё место. robots.txt запрашивают в корне, время от времени, а агент, который приземлился на глубокий URL, потому что кто-то вставил ссылку, может не прочитать его вообще никогда. Заголовок же едет прикреплённым к тому, что забирают.

Есть и форма мета-тега: <meta name="content-signal" content="search=yes, ai-input=yes, ai-train=no">. Берите её, когда конфигурация сервера вам недоступна. Заголовок лучше, потому что он покрывает и ответы, которые не являются HTML.

Три реальных позиции

Издание, которому нужна атрибуция.

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

Появиться внутри ответа со ссылкой — это распространение, нынешний эквивалент цитирования. Обучение — та часть, за которую никто не платит и которая к тому же никого к вам не возвращает.

SaaS, который хочет, чтобы его рекомендовали.

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

Документация, цены, список изменений. Когда кто-то спрашивает ассистента, чем решить задачу, вы хотите быть ответом, а попадание в обучающие данные — это способ быть названным тогда, когда модель вообще ничего не скачивает. Тут нечего защищать. Этот материал и есть маркетинг.

Платный архив.

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

Вы хотите, чтобы вас находили: результат поиска и есть коммерческое предложение. Чего вы не хотите — чтобы суть статьи бесплатно приезжала внутри чужого ответа. Это как раз тот случай, где сигнал делает работу, недоступную Disallow: закрыв обход, вы унесли бы вместе с ним и своё место в выдаче.

Если отдельный бот заслуживает других условий, ему пишут свою группу:

User-agent: *
Allow: /
Content-Signal: search=yes, ai-input=yes, ai-train=no

User-agent: GPTBot
Allow: /
Content-Signal: search=yes, ai-input=yes, ai-train=yes

Действует обычное правило приоритета robots.txt: бот, нашедший собственное имя, читает эту группу и полностью игнорирует *.

Что это на самом деле

Молодая договорённость. Не RFC, не стандарт W3C и не то, что какой-либо краулер обязан соблюдать. Никто не обещал соблюдение в форме, на которую вы могли бы сослаться. Если вы читаете, что Content-Signal защищает ваш контент, вы читаете рекламу.

Тогда зачем писать эту строку.

Потому что её читает машина и стоит она почти ничего: строка в файле, который вы и так отдаёте, заголовок в блоке конфигурации, который у вас и так есть. Преамбула, идущая вместе с этой договорённостью, подаёт no как прямое сохранение прав по статье 4 директивы ЕС 2019/790, то есть отказ от text and data mining. Работает ли это в вашей юрисдикции — вопрос к юристу. Невысказанное предпочтение не работает нигде.

И потому что она говорит то, для чего у Disallow вовсе нет слов. «Не обучайся на мне» и «уходи» — разные фразы, а до сих пор отправить можно было только вторую.

Проверьте, что ваш доходит

curl -sI https://example.com/ | grep -i content-signal
curl -s https://example.com/robots.txt | grep -i content-signal

Повторите первую команду на странице, которая не является главной. Если заголовок задан внутри блока location, он может покрывать меньшую часть сайта, чем вам кажется.

И ещё одна, если вы за CDN:

curl -sI https://example.com/robots.txt | grep -i "server\|cf-cache-status"

Убедитесь, что возвращается ваш robots.txt. Наш месяцами отдавал 404 с origin, пока Cloudflare отвечал на краю управляемым файлом политики, который мы никогда не писали, и каждая наша проверка получала совершенно правдоподобный 200.

Сгенерировать Content-Signal · Сгенерировать robots.txt