Шрифт, который травит ИИ-парсеров, разлетелся по всему интернету. Открыл его документацию: поисковики съедят подмену, незрячие не прочитают ничего, словарь вскрывается на 100%

Сегодня ленту разносит новость: дизайнеры выложили открытый шрифт, который подсовывает ботам-парсерам бессмыслицу вместо вашего текста. Человек читает нормально, робот забирает мусор. Звучит как наконец-то победа. Я много лет по другую сторону этой баррикады — пишу парсеры и обхожу защиты, — поэтому пошёл читать не пересказы, а документацию проекта. Там прямым текстом написаны три вещи, которых нет ни в одной новости. Ниже они и мой разбор, что это меняет.

Сразу важное: авторы не жулики. Наоборот, их описание — образец честности, я такого в опенсорсе давно не видел. Все неприятные факты они выложили сами. Просто до читателя эти факты не доехали: по дороге через новости, репосты и телеграм-каналы осталось «шрифт защищает ваш контент от ИИ», а вся цена вопроса отвалилась.

Как это устроено

Механика красивая. В шрифтах есть таблица GSUB — она отвечает за подстановку глифов, обычно для лигатур и вариантов начертания. Проект использует её не по назначению: подменяет целые слова.

В HTML-коде страницы лежит один текст, а шрифт отрисовывает другой. Краулер, который просто скачивает исходник страницы, забирает то, что в коде, — подставные слова. Человек видит отрисованное — настоящие.

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

По их собственным замерам, после обработки лишь примерно один фрагмент из десяти сохранял исходное утверждение, а 55,8% защищённых фрагментов переставали нести первоначальный факт. Свою задачу вещь выполняет. Вопрос в цене.

Первое: поисковики индексируют подмену

Цитата из документации проекта: search engines index the decoy words. И рекомендация следом: не заворачивайте то, что должно ранжироваться.

Переведу на практику. Гугл и Яндекс — точно такие же краулеры, читающие исходный код. Они не рендерят шрифт ради вас. Значит, в индекс поедет подставной текст. Ваша страница про кровельные работы будет проиндексирована как страница про что-то другое, грамматически безупречное и бессмысленное.

Авторы это понимают и дают второй компонент — обёртку для незащищённого текста, чтобы заголовки, подписи и навигация оставались настоящими и индексируемыми. То есть предлагается вручную делить страницу: вот это боты пусть читают, а вот это травим.

Я месяц просидел в отчётах поисковой консоли по своему проекту и скажу, чем это оборачивается на практике. Когда содержимое страницы расходится с тем, что видит пользователь, вы теряете не только позиции по конкретным словам. Вы теряете саму связь страницы с запросом: поисковик просто перестаёт понимать, о чём она. Отыгрывать это назад потом долго — переиндексация занимает недели, а доверие к странице восстанавливается ещё дольше.

Отдельно замечу вилку, из которой нет выхода. Отдавать поисковику настоящий текст, а всем остальным подставной — это клоакинг, за него прилетает вручную и надолго. А отличить краулер ИИ-компании от краулера поисковика надёжно нельзя: и те и другие представляются кем хотят.

Второе: словарь вскрывается целиком, и это померили сами авторы

Вот цифра, ради которой стоило открыть документацию: we recovered 11 962 of 11 962 pairs from our own shipped font. Одиннадцать тысяч девятьсот шестьдесят две пары подстановки из одиннадцати тысяч девятисот шестидесяти двух. Сто процентов. Вскрыли не исследователи, не злоумышленники — сами авторы, на своём же поставляемом шрифте.

Иначе и быть не может, и вот почему это принципиально. Чтобы браузер отрисовал текст, он обязан скачать файл шрифта. Файл шрифта содержит таблицу подстановок. Значит, у любого, кто открыл вашу страницу, на руках оказывается полный словарь — и прямой, и обратный. Замок приезжает к взломщику вместе с ключом, иначе замок не работает.

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

Если я парсю конкретный сайт — а именно так и парсят, под задачу, — мне нужно один раз скачать его шрифт, распарсить GSUB и построить обратную таблицу. Это несколько десятков строк на любом языке, где есть библиотека для работы со шрифтами. Дальше защита снята навсегда, потому что словарь статичен: он лежит в файле и меняется только тогда, когда владелец сайта пересоберёт шрифт и перевыложит его.

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

Третье: доступность ломается намеренно

Это часть, от которой мне стало не по себе.

Защищённый блок помечается атрибутом aria-hidden="true". Настоящие слова лежат на странице в зашифрованном виде, и чтобы до них добраться, нужно решить намеренно тяжёлую вычислительную задачу — несколько секунд работы.

В документации написано прямо: защищённый блок не проходит WCAG 2.2 SC 1.3.1 при всех включённых средствах доступности. Это сделано намеренно.

Расшифрую. Незрячий человек с экранным диктором на вашем защищённом тексте получает либо ничего, либо многосекундную паузу на каждом блоке. Не по недосмотру — по замыслу, потому что программа чтения с экрана и парсер для машины неотличимы.

Там же лежит и самый неприятный сценарий. Если браузер по любой причине подставит свой шрифт вместо вашего — а это делают расширения, режимы чтения, настройки для дислексии, корпоративные политики, — читатель получит, цитирую, «беглый, грамматически правильный, неверный текст без всякого сигнала». Не поломанную страницу, на которой видно, что что-то не так. Гладкий связный текст с другим смыслом, и человек не узнает.

Добавьте к этому, что копирование текста не работает, поиск по странице не работает, а экспорт в PDF и DOCX уносит с собой закодированный исходник.

Кому это всё-таки годится

Не хочу, чтобы получилось «выбросьте и забудьте». Инструмент нишевой, но ниша есть.

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

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

Что реально работает

Раз уж разбираем, скажу честно, как обстоят дела с защитой от сбора данных.

Файл robots.txt с запретом для краулеров ИИ-компаний работает ровно настолько, насколько компания решила его соблюдать. У себя я закрыл двух самых известных сборщиков и считаю это правильной гигиеной, но иллюзий не строю: это табличка «не входить», а не забор.

Ограничение по серверу — частота, лимиты, требование авторизации на объёмное чтение — работает лучше, потому что бьёт по экономике сбора. Плата за краулинг, которую сейчас обкатывают крупные CDN, выглядит самым осмысленным направлением: она переводит разговор из «как спрятать» в «как продать».

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

11