Перевірте, що сайт насправді віддає, перш ніж назвати його порожнім
Головна сторінка показує, що сайт говорить про себе, а не що він віддає. Перш ніж писати, що на сайті немає даних, пройдіть його 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.
Джерела
- Джерела, дати й що означає «перевірено»: як ми позначаємо докази.
- Оцінювання AI: чому «воно каже, що готово» не є прийманням: приймання за перевірками.
- Чому AI-агенти вигадують, і як перевірити відповідь: перевірка відповідей.
- Зв'язки, зворотні посилання й граф знань: як сторінки посилаються одна на одну.
🔗 Зв'язки статті
Відкрити повний граф знань ↗Зв’язки опублікованих статей. Виберіть вузол, щоб відкрити статтю біля заголовка.
Зв’язки статей · клавіатура / текст
Та сама тема
- Векторна база — це мапа, а не джерело: що ми з'ясували про пошук
- Коли невідомо, скільки коштував виклик моделі: заморожування, потім звіряння
- Розбиття великого завдання для дешевої моделі: урок про 24 000 байтів
- Навички, інструменти MCP і правила: три способи дати агенту можливості
- Вісім помилок з shell і git, яких припускалися наші агенти, і правило для кожної
- Кілька агентів, один репозиторій: правила володіння з реальних інцидентів
Наступні кроки
Пов'язані матеріали
Векторна база — це мапа, а не джерело: що ми з'ясували про пошук
Векторна база знаходить уривки, близькі за змістом до вашого запиту. Вона не знає, які з них правдиві чи актуальні. Сприймайте кожен результат як вказівник: відкрийте названий файл, перевірте хеш і беріть числа з артефакту, а не зі знайденого абзацу.
AI agents and MCP explainedКоли невідомо, скільки коштував виклик моделі: заморожування, потім звіряння
Іноді виклик моделі перевищує час очікування, і ви не знаєте, чи провайдер списав кошти. Ніколи не записуйте це як нуль. Позначте витрату як непевну, зупиніть нові платні виклики й доручте названій людині звірити її з випискою провайдера. Виняток — відмови, що сталися до генерації.
AI agents and MCP explainedРозбиття великого завдання для дешевої моделі: урок про 24 000 байтів
Дешева модель добре дає раду з однією невеликою чітко окресленою роботою, але погано з великим нагромадженням. Ми обмежуємо завдання 24 000 байтами і відмовляємо більшим ще до виклику моделі. Діліть на одиниці — один файл або одна країна на завдання — і перевіряйте розмір до початку.
AI agents and MCP explainedНавички, інструменти MCP і правила: три способи дати агенту можливості
Агенти отримують можливості по-різному. Правило обмежує те, що вони роблять, навичка підказує, як виконати роботу, а інструмент MCP дозволяє викликати функцію. Кожен із трьох має власний ризик, тож фіксуйте всі три в реєстрі й перевіряйте тестом, що нічого не існує поза ним.
💬 Коментарі