Как мы считаем баллы: 23 проверки и их веса
Оценка по стобалльной шкале — это утверждение, и почти все такие утверждения невозможно опровергнуть: вам выдают число без метода за ним, без версии на нём и без способа потом понять, изменился ваш сайт или инструмент.
Наша оценка — это 23 проверки в пяти взвешенных измерениях, и всё это лежит в одном файле: packages/engine/src/scorer.js. Ниже — что измеряет каждая часть, сколько она стоит и чего она вам не скажет.
Пять измерений
Доступность — 30%, 3 проверки. Может ли машина вообще прочитать страницу. Существует ли содержимое без JavaScript, начинается ли основной текст ближе к началу HTML, достаточно ли страница мала, чтобы забрать её целиком. Самое тяжёлое измерение, потому что всё остальное — украшение, если краулер получает пустую оболочку.
Обнаружимость для ИИ — 25%, 6 проверок. Пускают ли ИИ-клиентов внутрь и находят ли они дорогу: есть ли robots.txt, разрешает ли он поисковых ИИ-ботов, есть ли карта сайта, отвечает ли сайт на Accept: text/markdown, есть ли llms.txt, объявлен ли Content-Signal.
Структурированные данные — 20%, 5 проверок. Schema.org/JSON-LD, Open Graph, meta description, канонический URL и lang у <html>. То, что сообщает машине, чем страница является, а не что она рассказывает.
Семантический HTML — 15%, 5 проверок. Иерархия заголовков, <article> или <main>, доля семантических элементов против div, альтернативные тексты, которые что-то описывают, глубина вложенности div. Именно по этому извлечение решает, какие части страницы и есть страница.
Эффективность содержимого — 10%, 4 проверки. Сокращение токенов при переводе из HTML в Markdown, соотношение содержимого и шума, вес страницы, инлайновые стили. Сколько из того, что вы отдаёте, действительно содержимое.
Почему проверки считаются по-разному
У каждой проверки рядом с весом стоит уровень доказанности, и именно он этот вес задаёт:
- доказано — поставщик модели сам это документирует, либо это показано измерением. 3 из 23.
- правдоподобно — рассуждение здравое и согласуется с тем, как работает извлечение, но ни один поставщик этого не подтверждал. 13 из 23.
- предположительно — соглашение существует, отрасль в него верит, но никто не показал, что хоть какой-то бот его читает. 7 из 23.
Если довести это до итогового числа, примерно 32 балла из 100 приходятся на доказанные проверки, 51 — на правдоподобные и 17 — на предположительные.
Три доказанные проверки: страница отрисовывается без JavaScript, robots.txt разрешает поисковых ИИ-ботов, страница несёт разметку Schema.org. Первая — самый обоснованный сигнал во всей этой области, потому что ни один крупный ИИ-краулер не выполняет JavaScript. Вторая — единственный настоящий шлагбаум на доске: закройте поискового бота, и в этом ассистенте вас просто нет.
На другом конце — llms.txt и Content-Signal. Их отдают очень многие домены, но ни один поставщик не подтвердил, что читает их, а Google заявил, что llms.txt не даёт никакого эффекта. Мы всё равно их оцениваем: отсутствие доказательств не доказывает отсутствие эффекта. Но по 10% их измерения каждому вместо тех 20%, которые когда-то нёс llms.txt. Эффективность содержимого предположительна от начала до конца: конвейеры извлечения прогоняют обработку в духе Readability до того, как модель что-либо увидит, так что лёгкий HTML покупает меньше, чем предполагает отрасль.
Эта перебалансировка и была версией 2 методики. В v1 «отрисовывается без JavaScript» стоила 6% итоговой оценки, а сокращение токенов, которое ни один поставщик ни разу не упоминал, — 10%: самая обоснованная проверка на доске весила меньше догадки.
У методики есть номер версии
Скорер экспортирует RUBRIC_VERSION, сейчас это 2. v1 — исходные веса, февраль 2026 года. v2 — перебалансировка по доказанности, июль 2026 года.
Без этого номера оценка невоспроизводима. Вы запускаете анализ и получаете 90. Через полгода получаете 85. Ваш сайт стал хуже или это мы подвинули ворота? Сертификат, который не называет линейку, которой мерили, — это число, которое никто не может проверить.
Ровно эту ошибку мы и выкатили. Версия существовала в скорере и ездила на объекте результата, но до базы данных она не доходила — и рейтинг выстраивал оценки друг против друга, не зная, одинаково ли они измерены: строки v1 стояли выше строк v2, будто это сравнение что-то значит.
Миграция 007_add_rubric_version_to_analyses.js добавила колонку со значением по умолчанию 1 для всех существующих строк. Это значение не догадка: все строки были старше v2, так что 1 — факт. Она же строит индекс по (rubric_version, score), чтобы рейтинг можно было ограничить одной методикой. Тонким местом был момент: миграция должна была лечь до того, как запишется первый анализ по v2, иначе новые строки молча объявили бы себя v1.
Что мы намеренно не оцениваем
Страницу, а не сайт. Один анализ читает один URL. robots.txt, карта сайта и llms.txt относятся ко всему сайту; всё остальное — к этой странице и только к ней. Хорошо сделанная страница на в целом слабом сайте получит высокую оценку, и это правильно.
Что модель на самом деле с вами сделала. Мы не видим, процитировал ли вас ChatGPT, собрал ли Claude ответ из вашей страницы, упомянули ли вас вообще. Снаружи этого не видит никто. Каждая проверка — свойство того, что вы отдаёте, а не того, что из этого сделали.
Действительно ли краулер попал внутрь. Когда мы стучимся, представляясь ИИ-ботом, и что-то на границе разворачивает нас, хотя robots.txt говорит, что мы желанные гости, мы честно не знаем, с чем из двух столкнётся проверенный краулер. Для этой проверки стоит потолок в 60 баллов — это зачёт с оговоркой, а не провал, — а строка подробностей объясняет, что произошло. Число — плохой способ сказать «неизвестно».
Ничто здесь не проверяет, чего стоит написанное вами. Высокая оценка — хорошее исходное предположение: машина может прочитать страницу и понимает, что это такое. Обещанием цитирования она не является.
Мы применяем это к себе
agentready.md набирает 94/100. Это число читается из базы данных — наш последний анализ нашего собственного домена, со ссылкой на его сертификат, — а не вписано руками в шаблон. Когда оно движется, движется и страница. Когда анализа нет, страница показывает пустоту, а не устаревшее число.
Оно уже падало. Месяцами наш origin отдавал 404 на /robots.txt, пока управляемая Content Signals Policy от Cloudflare отвечала на границе кодом 200 и файлом, которого мы никогда не писали. Наш собственный скорер читал этот 200 и ставил нам зачёт. Когда мы починили origin и выключили управляемый файл, мы упали с 93 до 90. Честным было меньшее число: те три балла измеряли файл Cloudflare, а не наш.