Проверьте, что сайт на самом деле отдаёт, прежде чем называть его пустым
Главная страница говорит, что сайт сам о себе рассказывает, а не что он отдаёт. Прежде чем писать, что на сайте нет данных, обойдите его sitemap и robots.txt скриптом и читайте числа из сохранённого результата. Одного неверного вердикта достаточно, чтобы это автоматизировать.
🎯 Для Любой, кто проверяет, сравнивает или пишет о сайте — вручную или с агентом
- Почему первый экран — не доказательство
- Как работает детерминированная проверка поверхности и что она записывает
- Как не допустить обратной ошибки — верить странице только потому, что она ответила HTTP 200
👀 Ошибка
9 сентября 2026 мы сделали вывод, что на одном сайте с данными о компаниях «полезных данных нет». Вывод сделан по одной странице — главной. Тот же сайт отдавал рейтинг тысячи лучших с источниками и каталог из 56 138 профилей. Главная страница ни о том, ни о другом не говорила так, чтобы это заметил быстрый взгляд. Вердикт оказался неверным, а прозвучал уверенно.
Ошибка общая. Главная страница — это рассказ сайта о себе. Отдаёт ли он то, что заявляет, выясняется на страницах за ней.
🔬 Что делает проверка поверхности
Мы заменили привычку командой. Для домена она читает sitemap и robots, обходит перечисленные там адреса и записывает для каждой страницы статус и значения, заданные контрактом. Контракт перечисляет именованные величины и выражение, которое читает их из видимого текста страницы с вырезанными скриптами и разметкой. Величиной может быть напечатанное число или число совпадений, например сколько на странице ссылок определённого вида.
Результат пишется в файл этого домена, а команда завершается с кодом ошибки, если какое-то значение нарушает своё правило. У серьёзности три уровня: info попадает в отчёт, warn и error роняют запуск.
Сегодня в репозитории контракты для 7 поверхностей, а тестов проверяющего — 21.
⚖️ Второе правило: 200 — это не данные
Страница со статусом 200 может быть пустой. Мы видели, как все разделы панели отвечали 200 с нулями, потому что снимок под ними был пуст. Приёмка идёт по содержимому, например «число больше нуля», а не по коду статуса. Одна и та же величина на двух страницах имеет одно определение. Если две страницы показывают разные подписи для одной и той же величины без перехода между ними, это дефект, о котором надо сообщить.
🛠️ Практика: напишите первый контракт
- Выберите один сайт и перечислите пять фактов, которые он заявляет: число товаров, число рейтингов, дата последнего обновления.
- Для каждого найдите страницу, где факт должен быть, и напишите регулярное выражение, читающее число из видимого текста.
- Добавьте правило: значение должно существовать и быть выше выбранного порога.
- Напишите небольшой скрипт: получает sitemap и robots, обходит каждую страницу по разу с вежливой паузой и применяет контракт.
- Сохраняйте результат со временем запуска. Не перезаписывайте молча. Храните предыдущий запуск для сравнения.
- Решите, какие сбои предупреждения, а какие ошибки, и пусть скрипт возвращает верный код.
✅ Проверьте себя
- Намеренно нарушьте правило, например указав несуществующую страницу. Скрипт завершается с ошибкой, а в сохранённом файле видно, какое значение не прошло.
- В файле результата перечислены все посещённые адреса и статус каждого.
- Две страницы с одной и той же величиной дают одно число.
- Коллега может воспроизвести ваш вердикт запуском команды, а не доверием к вашему описанию.
🚧 Когда это не работает
- Страницы, которые строит скрипт в браузере. Если числа появляются только после выполнения JavaScript, обычный запрос их не увидит. Нужен шаг рендеринга или конечная точка с данными.
- Закрытые за входом разделы. Проверка не может судить о том, до чего не достаёт. Скажите это в отчёте.
- Меняющиеся макеты. Регулярное выражение ломается при смене формулировки. Пересматривайте контракты при изменении страниц.
- Тяжёлые сайты. Обход десятков тысяч страниц требует бюджета и паузы. Берите выборку и говорите, что это выборка.
- Смысл. Проверка доказывает, что значение есть. Верность она не доказывает. За истиной идите к источнику.
📊 Доказательства
| Что измерено | Число поверхностей с контрактом и тестов проверяющего в нашем репозитории; исходная ошибка вердикта от 9 сентября 2026 |
| Когда | Репозиторий прочитан 3 ноября 2026, 22:06 UTC |
| Артефакт | Файл контрактов поверхностей (7 поверхностей) и файл тестов проверяющего (21 тестов) в нашем закрытом репозитории; запись об инциденте в заголовке файла контрактов |
| Ограничение | Числа о проверенном сайте взяты из нашей записи об инциденте. Для этой страницы мы сайт заново не обходили |
➡️ Дальше
Как мы помечаем источники и даты, читайте в Источниках, датах и значении слова «проверено», а как держать утверждения привязанными к доказательствам — в AI judging.
Источники
- Источники, даты и что значит «проверено»: как мы помечаем доказательства.
- AI judging: почему «он говорит, что готово» — не приёмка: приёмка по проверкам.
- Почему ИИ-агенты выдумывают и как проверить ответ: проверка ответов.
- Связи, обратные ссылки и граф знаний: как страницы связаны.
🔗 Связи статьи
Открыть полный граф знаний ↗Связи опубликованных статей. Выберите узел, чтобы открыть статью у заголовка.
Связи статей · клавиатура / текст
Та же тема
- Векторная база — это карта, а не источник: чему нас научил поиск
- Когда неизвестно, сколько стоил вызов модели: заморозка, затем сверка
- Как разбить большую задачу для дешёвой модели: урок 24 000 байт
- Навыки, MCP-инструменты и правила: три способа дать агенту возможности
- Восемь ошибок наших агентов в shell и git и правило на каждую
- Несколько агентов, один репозиторий: правила владения из реальных инцидентов
Следующие шаги
Связанные материалы
Векторная база — это карта, а не источник: чему нас научил поиск
Векторная база находит фрагменты, близкие по смыслу к вашему вопросу. Она не знает, какие из них верны или актуальны. Считайте каждое попадание указателем: откройте названный файл, сверьте хэш, а числа берите из артефакта, а не из найденного абзаца.
ИИ-агенты и MCP простыми словамиКогда неизвестно, сколько стоил вызов модели: заморозка, затем сверка
Иногда вызов модели обрывается по таймауту, и вы не знаете, списал ли провайдер деньги. Никогда не записывайте это как ноль. Пометьте как неопределённое, остановите новые платные вызовы и пусть названный человек сверит это с выпиской провайдера. Отказы до генерации — исключение.
ИИ-агенты и MCP простыми словамиКак разбить большую задачу для дешёвой модели: урок 24 000 байт
Дешёвая модель хорошо справляется с одной небольшой чёткой задачей и плохо — с большой кучей. Мы ограничиваем задачу 24 000 байт и отклоняем большие до вызова любой модели. Режьте по единицам — один файл или одна страна на задачу — и проверяйте размер до запуска.
ИИ-агенты и MCP простыми словамиНавыки, MCP-инструменты и правила: три способа дать агенту возможности
Агенты получают способности по-разному. Правило ограничивает, что они делают, навык говорит, как делать работу, а MCP-инструмент позволяет вызывать функцию. У каждого свой риск, поэтому объявляйте все три в реестре и проверяйте тестом, что ничего не существует вне списка.
💬 Комментарии