Частина посилань на цій сторінці партнерські: якщо ви зареєструєтесь через них, сайт отримає комісію, для вас ціна не змінюється. На ціни й рекомендації це не впливає.

Це питання поставили під нашою статтею про аналітику, і поставили в правильному порядку: robots.txt, Cloudflare, Anubis. Їх обговорюють як альтернативи. Вони не альтернативи. Один публікує побажання, другий виконує рішення на межі, третій змушує клієнта заплатити за сторінку. Вибір між ними - це рішення, яка з цих трьох речей вам насправді потрібна.

У нас є пʼятнадцять днів access-логу сайту, який піднявся у жовтні, 9 996 рядків, і одноразовий стек Anubis на ноутбуці. Усе, що нижче з цифрою, походить з одного з двох джерел. Де своїх цифр немає - так і написано.

Спершу: хто взагалі питає

Перед вибором інструмента варто подивитися, чого вартий ввічливий протокол на вашому власному логу. З 9 996 запитів 334 були по robots.txt. Ось хто їх надсилав - проти того, скільки кожен забрав:

КраулерЗапитівЗапитів robots.txtУнікальних URL
ClaudeBot48478330
Googlebot54117333
GoogleOther5200327
GPTBot3910387
meta-externalagent3220315
AhrefsBot20221129
bingbot1641867
OAI-SearchBot1083561
Amazonbot96394
PerplexityBot63921
YandexBot49338
Applebot30522

Два нулі в середині таблиці - найцікавіше, і вони означають не те, що здається на перший погляд.

GPTBot не запитав наш robots.txt ані разу на 391 запит. OAI-SearchBot запитав 35 разів - і вони живуть на спільних діапазонах IP. Те саме в Meta: meta-externalagent, краулер навчальних даних, не питав файл ніколи, а facebookexternalhit, який тягне прев’ю посилань, питав вісім разів. Google робить так само: Googlebot - 17 разів, GoogleOther - жодного, і обидва на одній інфраструктурі.

Тож чесне прочитання - не «навчальні краулери ігнорують robots.txt». А те, що запит файлу відбувається десь інде у фліті вендора, і краулер, який ви бачите в логу, стоїть за кешем, якого вам не видно. З цього є практичний наслідок: ваш лог не може сказати, чи правило з robots.txt узагалі хтось побачив, не кажучи про виконання. Єдина перевірка працездатності правила - чи перестали запитувати заборонені шляхи.

Anthropic тут виняток у протилежний бік. 78 запитів на 484 - це одна перевірка robots.txt на кожні шість запитів контенту, а перші два запити ClaudeBot до нас були /robots.txt, а потім /, з інтервалом в одну секунду.

robots.txt: прохання з тонким шаром права позаду

Коштує нічого. Робить, механічно, нічого: заборонений шлях усе одно віддається кожному, хто попросить.

Що змінилося останнім часом - папери позаду. Стаття 53(1)(c) AI Act вимагає від постачальників моделей загального призначення мати політику виявлення і поваги до застережень прав за статтею 4(3) директиви про копірайт, «у тому числі за допомогою передових технологій». Супровідний Code of Practice одну з цих технологій називає прямо: підписанти беруть на себе виконання robots.txt відповідно до RFC 9309.

Перед тим як на це покладатися, прочитайте межі. Обовʼязок падає на постачальників моделей загального призначення, а Code є добровільним і підписним. Скрапер, який сам не є постачальником моделі, поза ним, а що вважати валідним застереженням прав - досі питання до судів. FAQ Комісії перелічує й інші машиночитні механізми поряд з robots.txt.

Практична вартість реальна, але вузька: robots.txt з явними AI-директивами нічого не коштує, і це той артефакт, на який ви вкажете, якщо колись доведеться показати, що застереження було висловлене. Це доказ, не стіна.

Cloudflare: примус, якщо ваш DNS уже там

Це розділ, де своїх цифр у нас немає, і ми радше це скажемо, ніж будемо вдавати, що документація - це замір. Наш блог не стоїть за Cloudflare, тому нічого нижче ми не міряли самі.

З документації Cloudflare: AI Crawl Control показує, які AI-сервіси вас обходять, дає правила дозволу чи блокування по кожному краулеру, відслідковує відповідність robots.txt і має опцію pay per crawl у приватній беті. Функція managed robots.txt генерує директиви з обраних політик і додає їх перед тим, що вже віддає ваш origin. І те, і те в документації позначене як доступне на всіх тарифах.

Архітектурно важливе: це єдиний з трьох варіантів, який зупиняє запит до того, як він дійде до вашого сервера, і єдиний, де список «хто є хто» веде хтось інший. У цьому вся угода. Ви отримуєте примус, не запускаючи нічого, а в обмін рішення про те, що вважати AI-краулером, ухвалює третя сторона, перед вашим сайтом, для кожного відвідувача.

Anubis: нехай клієнт платить

Anubis - це reverse proxy, який ставить перед origin proof-of-work задачу. Жодних заяв про ідентичність: клієнт, який не виконає JavaScript задачі, сторінки не отримає, що б не було в його user-agent.

Ми підняли v1.28.2 перед nginx-origin на ноутбуці й поштурхали його. З дефолтною політикою:

КлієнтВідповідь
curl/8.18.0200, прямо до origin, 53 байти
user-agent GPTBotсторінка відмови, 2 270 байтів, віддана з HTTP 200
user-agent ClaudeBotсторінка відмови, віддана з HTTP 200
user-agent Googlebotсторінка задачі, ~7,1 КБ
user-agent десктопного Chromeсторінка задачі, ~7,1 КБ

Три речі з цієї таблиці варто знати до розгортання.

Сторінка відмови повертається з HTTP 200, не 403. Якщо ви стежите за сайтом по статус-кодах, повністю заблокований краулер виглядає як здоровий.

Звичайний, відкритий небраузерний клієнт проходить без перешкод. Це свідомо - так продовжують працювати curl, читалки фідів і власний моніторинг - але це також означає, що Anubis не є стіною проти скрапінгу взагалі. Усе, що не вдає з себе браузер, за дефолтом пропускається.

А рядок з Googlebot - артефакт лабораторії, і про нього варто сказати: Anubis перевіряє пошуковики зворотним DNS, а для запиту з 127.0.0.1 це неможливо. На реальному розгортанні там був би прохід, не задача. Ми показуємо цей рядок саме тому, що він виглядає як знахідка, а знахідкою не є.

Скільки задача коштує людині

Це та цифра, що вирішує, чи можна ставити Anubis на сайт з живими відвідувачами. Ми проходили задачу headless Chromium і міряли час від навігації до рендеру сторінки origin:

СкладністьМедіанаПрогонів
2 (дефолт)0.08 с5
40.27 с5
650-75 с2 з 3

На дефолті бар’єр невидимий. Два кроки вгору - і це хвилина крутилки, бо кожен рівень множить роботу на шістнадцять. Третій прогін на складності 6 узагалі не вклався в наш таймаут 90 с - і це чесний вигляд хвоста: на такому налаштуванні витрати не просто великі, вони достатньо неоднорідні, щоб частина відвідувачів просто пішла. Якщо покрутити цей регулятор, бо дефолт «здається низьким», ви цього не відчуєте: ваш власний браузер тримає cookie проходження тиждень. Платить кожен, хто прийшов уперше.

Дві пастки розгортання, кожна з яких забрала більше часу, ніж самі заміри.

Змінна середовища DIFFICULTY на задачу не впливає. У v1.28.2 стартовий лог її повідомляє, віддана задача її ігнорує, а значення береться з файлу політики. Ми це зловили лише прочитавши складність із вбудованого JSON самої сторінки задачі.

Без USE_REMOTE_ADDRESS=true кожен запит повертав HTTP 500 з [misconfiguration] X-Real-IP header is not set у лозі. Anubis вважає, що хтось перед ним ставить цей заголовок. Якщо не ставить ніхто, він закривається на всьому трафіку, не лише на ботах.

Чи взагалі можна зрозуміти, хто є хто

Усі три підходи зводяться до ідентифікації, тож ми перевірили, наскільки вона зараз працює. Кожен запит краулера з нашого логу - проти власного опублікованого списку вендора або зворотного DNS:

КраулерЗапитівПідтвердженоПроти чого
ClaudeBot484484 / 484claude.com/crawling/bots.json
GPTBot391391 / 391openai.com/gptbot.json
OAI-SearchBot108108 / 108openai.com/searchbot.json
PerplexityBot6363 / 63perplexity.ai/perplexitybot.json
ChatGPT-User3937 / 39openai.com/chatgpt-user.json
Googlebot541541 / 541зворотний DNS
GoogleOther520520 / 520зворотний DNS
bingbot164164 / 164зворотний DNS
Amazonbot9696 / 96зворотний DNS
YandexBot4949 / 49зворотний DNS
Applebot3030 / 30зворотний DNS
meta-externalagent322322 / 322анонсовані префікси AS32934

Краще, ніж за фольклором. Великі AI-краулери тепер публікують списки IP, які можна забрати й перевірити, і наші зійшлися до запиту.

Два винятки. ChatGPT-User надіслав два запити з адрес поза опублікованим списком - це єдиний у таблиці агент, якого запускає людина, і там розбіжність найменш тривожна. А в meta-externalagent немає ні зворотного DNS, ні опублікованого списку краулерів, який ми змогли б знайти, тож єдина доступна перевірка - чи належить адреса анонсованим мережевим префіксам Meta. Це значно слабше твердження: воно каже, що пакет прийшов з мережі тієї компанії, а не що краулер той, за кого себе видає.

Темп, коли ідентичності немає

Для всього, що не підтверджується і не ідентифікується, поведінка все одно видає. Інтервал між послідовними запитами того самого краулера за пʼятнадцять днів:

КраулерМедіана інтервалуЧастка інтервалів до 1 с
GPTBot1 с92,1%
meta-externalagent1 с88,2%
YandexBot1 с75,0%
ClaudeBot1 с52,0%
AhrefsBot29 с31,8%
Googlebot158 с8,0%
GoogleOther137 с0,8%

Розподіл чистий, і йдеться не про ввічливість. Google забрав більше сторінок за всіх (541 і 520 URL) і зробив це з медіаною понад дві хвилини, бо темп обходу - задача, яку він вирішував десятиліттями. Навчальні краулери забрали сайт одним проходом, настільки швидко, наскільки він віддавав.

Практичне застосування: на тихому сайті гістограма інтервалів між запитами відділяє обхід від аудиторії, не читаючи жодного user-agent. Пік, зібраний в одному підсекундному кошику, - це машина. Люди теж дають щільні серії (відновлення вкладок, prefetch), але не тримають їх 390 запитів підряд.

Що ж обрати

Якщо потрібноІнструментЦіна
Висловити позицію і мати артефактrobots.txt з явними AI-директивамиНічого
Зупинити запити до того, як їх побачить сервер, нічого не запускаючиCloudflare AI Crawl ControlВаш DNS іде через них, і їхній список визначає, хто бот
Зробити контент недоступним для всього, що не виконує браузерний кодAnubis перед originБар’єр, через який проходить і кожна нова людина
Знати, що насправді відбуваєтьсяВласний access-лог, розібранийОдин вечір, одноразово

Вони складаються, і це і є здорова конфігурація: robots.txt каже, чого ви хочете, один з двох інших примушує ту частину, яку вам справді не все одно примусити, а лог показує, чи це взагалі подіяло.

Що стоїть на цьому сайті: robots.txt, і більше нічого. Ми публікуємо статті, щоб їх читали, в тому числі те, що їх потім перекаже. Стек з Anubis ми підняли саме для того, щоб мати цифру по альтернативі, і цифра каже, що інструмент нормальний, а небезпека - в регуляторі складності.

Чого ці заміри сказати не можуть

Один сайт, одна ніша, вікно на пʼятнадцять днів, 9 996 запитів. Сайт з реальним комерційним контентом притягує інший клас скраперів - тих, що не називаються і не з’являються ні в одній з цих таблиць, - і проти цієї публіки всі цифри вище не мають значення.

Заміри Anubis зроблені на ноутбуці проти localhost: без сітьової затримки, один клієнт і процесор, швидший за медіанний телефон. Ставтеся до кривої складності як до форми витрат, не до їх абсолютного значення.

І дірка, яку логами не закрити взагалі: запитати robots.txt не означає виконати його, а не запитати не означає проігнорувати. Усе в першій таблиці - замір запитів, не замір згоди.