Як перевірити відвідування сайту AI-ботами через серверні логи

Як перевірити відвідування сайту AI-ботами за логами сервера: знайти GPTBot і ClaudeBot, порахувати запити, перевірити IP і зрозуміти, що це означає.

Практика та методологіяКозак переглядає серверний лог і позначає рядки з AI-ботами
Зміст статті 0%
Як перевірити відвідування сайту AI-ботами: порядок дій Де знайти логи сервера сайту Як читати рядок логу Які AI-боти з’являються в логах і що вони роблять Як знайти AI-ботів у логах сервера Як перевірити IP-адресу GPTBot та інших AI-ботів Що означають запити ChatGPT-User у логах Як часто AI-боти відвідують сайт Що логи показують, а чого ні Як відстежувати AI-ботів на сайті регулярно Типові помилки Часті запитання Як ми робимо це у VYDAI
Зміст статті

Щоб перевірити відвідування сайту AI-ботами, завантажте access log за потрібний період, відфільтруйте запити за User-Agent (рядком, яким бот себе називає), а тоді згрупуйте їх за ботом, URL, кодом відповіді й датою. IP-адреси звірте з офіційними списками компаній або перевірте через DNS, якщо це вимагає документація. Так ви побачите, хто звертався до сервера і які сторінки просив. Лог підтверджує лише запит до конкретного рівня інфраструктури. Він не показує, чи процитував AI сторінку у відповіді.

Як перевірити відвідування сайту AI-ботами: порядок дій

  1. Виберіть період, наприклад останні 7 або 30 днів, і збережіть копію access log.
  2. Знайдіть рядки з User-Agent відомих AI-ботів та окремо порахуйте кожну назву.
  3. Згрупуйте рядки за URL, статусом і днем, щоб побачити сторінки та зміни у часі.
  4. Звірте IP-адреси з опублікованими діапазонами; для Google й Apple виконайте описану ними DNS-перевірку.
  5. Визначте роль кожного агента: пошук, тренувальний збір чи отримання сторінки на дію користувача.
  6. Зіставте лог із журналом CDN, якщо запити проходять через кеш або проксі.
  7. Перевірте висновки на рівні відповідей окремо, якщо потрібно знати, чи згадує AI бренд або цитує сторінку.

Де знайти логи сервера сайту

Як перевірити логи AI-ботів, залежить від того, де їх записує ваш хостинг. Знайдіть access log і з'ясуйте його формат, часовий пояс та строк зберігання. Якщо доступу до файла немає, попросіть адміністратора експортувати сирі рядки журналу.

Тип хостингуДе шукатиНа що зважити
VPS з ApacheКаталог журналів вебсервера, типовий шлях задає конфігурація віртуального хостаФактичний шлях і формат можуть відрізнятися від стандартного
VPS з NginxФайл, заданий директивами access_log у конфігурації сервераАдміністратор міг налаштувати власні поля
cPanelРозділ Raw Access або завантаження журналів доменуПеревірте, чи включені архіви попередніх періодів
PleskЖурнали домену в панелі або файли в каталозі підпискиНазви пунктів залежать від версії та прав користувача
Керований або shared hostingЗапит до підтримки хостингу на експорт сирих access logsУточніть період, часовий пояс, ротацію і поля
Cloudflare чи інший CDNЖурнал на edge-рівні; у Cloudflare також є AI Crawl Control і LogpushДоступні поля та спосіб експорту залежать від конфігурації й тарифу
Vercel або NetlifyЖурнали запитів у панелі проєкту або доступний експорт платформиПеревірте строк зберігання та охоплення edge-запитів у вашому плані
WordPress-плагінЗвіт плагіна, якщо він записує звернення на рівні застосункуПлагін може не бачити відповіді з кешу чи CDN, які оминули PHP

Кешований запит іноді завершується на CDN, не доходячи до origin-сервера. Так само заблокований запит може бути видимий на edge, але відсутній у журналі origin. Тому порівнюйте обидва рівні. У Cloudflare AI Crawl Control показує активність AI-краулерів; для сирих полів запитів є Logpush і Logpull. Доступ до цих журналів і доступні поля залежать від плану Cloudflare.

Як читати рядок логу

У combined format Apache та Nginx адреса клієнта, час, HTTP-запит, статус, обсяг відповіді, referrer і User-Agent стоять у передбачуваних місцях. Наприклад, такий рядок є синтетичним і використовує зарезервовану для документації IP-адресу:

192.0.2.10 - - [03/Oct/2026:10:15:00 +0000] "GET /pricing HTTP/1.1" 200 1200 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot"

У цьому рядку 192.0.2.10 позначає адресу клієнта, квадратні дужки містять час, GET /pricing показує метод і шлях, 200 показує код відповіді, а останній фрагмент містить User-Agent. Combined format Apache описує документація mod_log_config; у Nginx поля задаються конфігурацією і можуть відрізнятися. JSON-журнал, проксі або власна схема також змінюють їхній порядок.

Рядок логу сервера: IP, час, URL, статус і User-Agent AI-бота
Рядок логу сервера: IP, час, URL, статус і User-Agent AI-бота

Які AI-боти з’являються в логах і що вони роблять

Назва в User-Agent допомагає класифікувати запит, але спочатку є лише заявою клієнта. Призначення звіряйте з довідкою власника агента. Найзручніше читати логи AI-краулерів за роллю, а політику обходу налаштовувати окремо за правилами robots.txt для AI-ботів.

Агент у User-AgentКомпанія і рольЩо важливо для читання логу
GPTBotOpenAI, збір вебсторінок, які можуть використовуватися для навчання моделейНе є агентом пошуку ChatGPT; OpenAI публікує окремий список IP
OAI-SearchBotOpenAI, пошукові можливості ChatGPTВідокремлюйте від GPTBot і від отримання сторінки на дію користувача
ChatGPT-UserOpenAI, запит сторінки за дією користувачаЦе не автоматичний обхід; правила robots.txt можуть не застосовуватись
OAI-AdsBotOpenAI, перевірка цільових сторінок оголошеньНе зараховуйте ці звернення до пошукового обходу
ClaudeBotAnthropic, збір контенту для моделейAnthropic вказує, що дотримується robots.txt
Claude-SearchBotAnthropic, пошукові можливості ClaudeОкрема роль від навчального збору
Claude-UserAnthropic, запит сторінки за зверненням користувачаРозглядайте як fetch, а не як загальний обхід
PerplexityBotPerplexity, індексування для пошукуКомпанія відрізняє його від навчального збору моделей
Perplexity-UserPerplexity, сторінка за дією користувачаУ документації сказано, що він зазвичай ігнорує robots.txt
GooglebotGoogle Search, зокрема AI Overviews та AI ModeОкремого User-Agent для цих AI-функцій немає; працює звичайна пошукова інфраструктура
Google-CloudVertexBot, GoogleOtherGoogle, інші задокументовані агенти для хмарних продуктів або дослідженьПеревіряйте конкретне призначення в актуальному довіднику Google
Google-ExtendedТокен керування у robots.txtЦе не User-Agent запиту, тому шукати його в логах марно
ApplebotApple, індексування для пошукових функцій AppleПеревіряйте IP через опублікований список або DNS-метод Apple
Applebot-ExtendedТокен керування використанням контентуНе є окремим User-Agent і не з’явиться як агент у рядку запиту
Amazonbot, Amzn-SearchBot, Amzn-UserAmazon, збір, пошукова індексація та отримання сторінки на запит користувачаУ компанії окремі описи та діапазони для різних ролей
Meta-ExternalAgent, Meta-WebIndexer, Meta-ExternalFetcherMeta, збір, індексування та отримання сторінки за дією користувачаДовідка Meta описує агентів, але не публікує IP-список
MistralAI-Index, MistralAI-Training, MistralAI-UserMistral, пошуковий індекс, тренувальний збір і користувацьке отриманняРоль залежить від назви; доступність IP-списку також різниться
DuckAssistBotDuckDuckGo, актуальне сканування для AI-підтриманих відповідейКомпанія публікує окремий список адрес
CCBotCommon Crawl, збір відкритого вебархіву, який можуть використовувати дослідники й розробники AI (FAQ Common Crawl)Запит не вказує, яка саме модель або відповідь використає архів
bingbotMicrosoft Bing, пошуковий індекс, що може живити відповіді CopilotЗіставляйте з опублікованим списком Bing, а не лише з назвою агента

Довідка OpenAI про ботів, Anthropic про вебкраулерів та документація Perplexity описують різні типи запитів та їхню поведінку щодо правил обходу. Серед основних ролей є пошукова індексація, збір для можливого навчання та отримання URL через дію людини. Якщо змішати їх в одну цифру «AI-боти», графік не скаже, що саме змінилося.

Google-Extended і Applebot-Extended є токенами для правил, а не агентами, що надсилають HTTP-запит. AI Overviews і AI Mode використовують звичайну пошукову систему та Googlebot, як пояснено в описі AI-функцій Google Search.

Як знайти AI-ботів у логах сервера

Нижче наведені команди для стандартного combined access log у поточному каталозі. Вони підраховують назви з User-Agent, тобто твердження клієнтів, а не підтверджені компанії. Після фільтрації переходьте до перевірки IP.

ПитанняКоманда для combined log
Знайти рядки GPTBot у логуgrep -i 'GPTBot' access.log
Порахувати рядки GPTBotgrep -ic 'GPTBot' access.log
Згрупувати URL GPTBotawk -F'"' '$6 ~ /GPTBot/ { split($2, req, " "); count[req[2]]++ } END { for (url in count) print count[url], url }' access.log
Порахувати статуси GPTBotawk '$9 ~ /^[0-9][0-9][0-9]$/ && /GPTBot/ { count[$9]++ } END { for (status in count) print status, count[status] }' access.log
Знайти robots.txt і llms.txtgrep -F '/robots.txt' access.log; grep -F '/llms.txt' access.log
Порахувати GPTBot за днямиawk -F'[][]' '/GPTBot/ { day=substr($2,1,11); count[day]++ } END { for (day in count) print day, count[day] }' access.log
Переглянути gzip-ротаціїzgrep -Ei 'GPTBot' access.log*.gz

Команди в таблиці дають компактний зріз за GPTBot. Нижче є варіанти з кількома назвами агентів для повнішого відбору.

Як знайти GPTBot у логах сервера

У combined форматі User-Agent стоїть після попередніх полів і зазвичай є останньою quoted-частиною рядка. Простий фільтр знаходить рядки, у яких зустрічається назва. Пошук допомагає знайти згадки, але не підтверджує джерело: будь-який клієнт може самостійно надіслати цей текст.

grep -i 'GPTBot' access.log

Щоб зберегти звернення відомих агентів для подальшого аналізу, відфільтруйте їх за User-Agent. У виразі враховані окремі ролі OpenAI, Anthropic і Perplexity, а також інші назви з таблиці ботів. Команда шукає заявлені назви, не підтверджені IP. Токени Google-Extended та Applebot-Extended не додавайте: це не назви HTTP-клієнтів у User-Agent.

grep -Ei 'GPTBot|OAI-SearchBot|ChatGPT-User|OAI-AdsBot|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User|Googlebot|Google-CloudVertexBot|GoogleOther|Applebot|Amazonbot|Amzn-SearchBot|Amzn-User|Meta-ExternalAgent|Meta-WebIndexer|Meta-ExternalFetcher|MistralAI-[[:alnum:]-]*|DuckAssistBot|CCBot|bingbot' access.log > ai-bots.log

Як порахувати запити GPTBot по днях

Дата у прикладі нижче береться з формату [dd/Mon/yyyy:hh:mm:ss]. Часовий пояс залишається в самому timestamp, але групування відкидає годину. За потреби переведіть час у часовий пояс сайту до порівняння з релізами чи змінами конфігурації.

grep -i 'GPTBot' access.log | awk -F'[][]' '{print substr($2,1,11)}' | sort | uniq -c

Лічильник рахує рядки з назвами, а не унікальні IP чи успішно віддані сторінки. Якщо в одному User-Agent зазначено два імені ботів, команда зарахує цей рядок двічі.

grep -Eio 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User|Googlebot|Applebot|Amazonbot|Meta-ExternalAgent|CCBot|bingbot' access.log | sort | uniq -c | sort -nr

Які сторінки відвідують AI-боти

У combined форматі HTTP-запит знаходиться між лапками. Наступна команда дістає друге поле з цієї частини, тобто шлях після методу. Вона показує кількість рядків для GPTBot по URL; query string, якщо він є, залишиться частиною адреси.

grep -i 'GPTBot' access.log | awk -F'"' '{print $2}' | awk '{print $2}' | sort | uniq -c | sort -nr | head -20

Відсортуйте повний звіт також за датою, якщо треба розібрати конкретний сплеск. Для багатьох форматів логу зручніше імпортувати файл у парсер, який розуміє схему полів, а не будувати новий набір awk для кожного варіанта.

Статуси відповідей для AI-ботів

У стандартному whitespace-представленні combined рядка код відповіді є дев'ятим полем. Ця позиція підходить лише для такого формату і цієї конфігурації.

grep -i 'GPTBot' access.log | awk '{print $9}' | sort | uniq -c | sort -nr

Статус допомагає знайти групу для перевірки: 200 означає успішну HTTP-відповідь, але не підтверджує корисний вміст; 301 або 302 означає перенаправлення; 304 означає, що клієнт може використати кешовану копію; 403 і 429 показують відмову чи обмеження; серія 5xx вказує на серверні помилки. Перевірте, куди веде перенаправлення і яке тіло повернулося, перш ніж робити висновок про доступність.

Запити до robots.txt і llms.txt

Службові файли зручно виділити окремо. Фільтр враховує GET і HEAD та можливі query-параметри. Наявність рядка показує звернення до URL, але сама собою не підтверджує, як клієнт обробив файл.

grep -Ei '"(GET|HEAD) /(robots\.txt|llms\.txt)([? ]|$)' access.log | awk -F'"' '{print $1 " " $2 " " $3}'

Перевірка в цій секції відповідає на питання «що є у файлі журналу». Якщо треба з'ясувати, чи дозволено конкретній адресі сканувати певну сторінку, це інша перевірка. Про призначення llms.txt і правила обходу читайте окремо.

Для ротацій, стиснених gzip, команда zgrep шукає в архівах за тією ж логікою:

zgrep -Ei 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User' access.log*.gz

Спершу перевірте маску назв файлів у вашому хостингу. Архіви часто охоплюють попередні дні, тож аналіз лише поточного access.log може обрізати період і спотворити тренд.

Як перевірити IP-адресу GPTBot та інших AI-ботів

Не покладайтеся на User-Agent як на підтвердження особи: його легко скопіювати. Витягніть унікальні адреси для кожного агента, порівняйте їх із поточним списком компанії, а результат позначте як «підтверджено», «не підтверджено» або «список не публікується». Непідтверджена адреса сама по собі ще не доводить зловмисну активність.

КомпаніяДе перевірити IPЩо робити з результатом
OpenAIhttps://openai.com/gptbot.json; https://openai.com/searchbot.json; https://openai.com/chatgpt-user.json; https://openai.com/adsbot.jsonКожен файл містить creationTime та prefixes з ipv4Prefix і, якщо є, ipv6Prefix
Anthropichttps://claude.com/crawling/bots.jsonJSON має creationTime і масив prefixes з ipv4Prefix
Perplexityhttps://www.perplexity.com/perplexitybot.json; https://www.perplexity.com/perplexity-user.jsonJSON має creationTime і масив prefixes з ipv4Prefix
Google, автоматичні краулериhttps://developers.google.com/static/crawling/ipranges/common-crawlers.jsonprefixes містить ipv4Prefix та ipv6Prefix; звіряйте потрібну адресу з цим списком
Google, запити на дію користувачаhttps://developers.google.com/static/crawling/ipranges/user-triggered-fetchers.json; https://developers.google.com/static/crawling/ipranges/user-triggered-fetchers-google.json; https://developers.google.com/static/crawling/ipranges/user-triggered-agents.jsonЦе окремі списки fetcher-ів; не перевіряйте user-triggered агент лише за common crawlers
Applehttps://search.developer.apple.com/applebot.jsonJSON має creationTime і prefixes з ipv4Prefix; документація також описує reverse та forward DNS
Amazonhttps://developer.amazon.com/amazonbot/ip-addresses/; https://developer.amazon.com/amazonbot/searchbot-ip-addresses/; https://developer.amazon.com/amazonbot/live-ip-addresses/Це HTML-сторінки, у тексті яких є JSON із prefixes; скопіюйте його в окремий файл перед перевіркою. Окремі значення ipv4Prefix записані як одинична IP без маски
MetaОфіційна довідка Meta не публікує список IP для цих агентівПозначте «список не публікується»; одного збігу User-Agent недостатньо
Mistralhttps://mistral.ai/mistralai-user-ips.json; https://mistral.ai/mistralai-index-ips.jsonОбидва JSON мають creationTime і prefixes з ipv4Prefix; перевіреного списку для MistralAI-Training немає
DuckDuckGohttps://duckduckgo.com/duckassistbot.jsonJSON має creationTime та масив prefixes з ipv4Prefix
Microsoft Binghttps://www.bing.com/toolbox/bingbot.jsonПеревіряйте IP за опублікованим JSON, а не лише за User-Agent
Common CrawlДля CCBot окремий список IP не вказаний у FAQ Common CrawlПозначте «список не публікується»

У перевірених JSON-списках постачальники використовують масив prefixes, де ключ може називатися ipv4Prefix або ipv6Prefix. Скрипт нижче приймає обидва ключі; ipaddress також читає одиничну адресу без CIDR-маски. Файли й схеми можуть змінитися, тому перед регулярним запуском звіряйте їх зі сторінкою постачальника.

Спершу збережіть унікальні адреси з рядків одного агента:

grep -i 'GPTBot' access.log | awk '{print $1}' | sort -u > gptbot-ips.txt

Збережіть наступний скрипт як verify_ips.py. Він читає файл IP-адрес першим аргументом, JSON зі списком префіксів другим і друкує статус для кожної адреси:

import ipaddress
import json
import sys

if len(sys.argv) != 3:
    raise SystemExit("Usage: python3 verify_ips.py IP_FILE RANGES_JSON")
with open(sys.argv[1], encoding="utf-8") as f:
    addresses = [line.strip() for line in f if line.strip()]
with open(sys.argv[2], encoding="utf-8") as f:
    data = json.load(f)
networks = []
for item in data.get("prefixes", []):
    for key in ("ipv4Prefix", "ipv6Prefix"):
        if key in item:
            networks.append(ipaddress.ip_network(item[key], strict=False))
if not networks:
    raise SystemExit("No prefixes found in the JSON file")
for address in addresses:
    ip = ipaddress.ip_address(address)
    result = "verified" if any(ip in network for network in networks) else "not in list"
    print(f"{ip}: {result}")

Наприклад, передайте відповідні файли командою python3 verify_ips.py gptbot-ips.txt openai-gptbot.json. Це стартовий варіант для JSON із prefixes, а не універсальний валідатор будь-якого майбутнього формату.

Для Google та Apple перевірте reverse DNS, а потім прямим запитом переконайтеся, що hostname повертає ту саму IP. У першій команді задайте адресу з логу; у другій підставте hostname з PTR-відповіді:

dig +short -x "$ip"
dig +short "<hostname-from-ptr>"

Для Google звірте hostname з офіційним доменом відповідного типу агента, для Apple він має завершуватися на .applebot.apple.com. Forward lookup має повернути початкову IP. Перевірка лише PTR недостатня.

Google описує порядок перевірки IP у документації про верифікацію запитів. Для пакетного аналізу перевіряйте унікальні IP, а не кожен повторний рядок.

Якщо сайт стоїть за проксі, адресу в origin-лозі може займати сам CDN. Не довіряйте довільному X-Forwarded-For: приймайте його лише від відомого довіреного проксі, налаштованого сервером. Для одного підозрілого запиту й перевірки доступу до окремої сторінки є окремий посібник з перевірки AI-краулерів.

Козак звіряє IP бота з офіційним списком компанії
Козак звіряє IP бота з офіційним списком компанії

Що означають запити ChatGPT-User у логах

ChatGPT-User позначає отримання сторінки за дією людини в ChatGPT, а не регулярний обхід усього сайту. Таку саму роль мають Claude-User, Perplexity-User, Meta-ExternalFetcher, MistralAI-User та Amzn-User. Деталі правил різняться: OpenAI попереджає, що robots.txt може не застосовуватися до ChatGPT-User, Perplexity каже, що Perplexity-User зазвичай ігнорує ці правила, а Anthropic заявляє, що її агенти їх дотримуються. У документації Meta вказано, що Meta-ExternalFetcher може обходити robots.txt; Amazon уточнює, що Amzn-User може не виконувати всі його директиви у своїй довідці про Amazonbot.

Такий рядок підтримує обмежений висновок: у зафіксований час агент отримав або спробував отримати конкретний URL через дію в інтерфейсі. Він не розкриває автора запиту, текст запитання чи те, чи потрапила сторінка до фінальної відповіді. У мережі Cloudflare сканування за дією користувача зросло більш ніж у 15 разів у 2025 році; Cloudflare пов'язує цю динаміку з трафіком ChatGPT-User. Це мережеве спостереження за рік, а не норма для окремого сайту, як зазначено в огляді Cloudflare Radar за 2025 рік. Для власного домену перевірте частоту таких звернень і статуси запитаних сторінок.

Як часто AI-боти відвідують сайт

Єдиної норми для кількості відвідувань немає. Частота залежить від розміру й оновлення сайту, ролі бота, доступності сторінок, карти сайту, обмежень частоти та точки, де пишеться лог. Спочатку зберіть власну базову лінію по тижнях; порівнюйте однакові дні тижня й однаковий набір хостів.

Як аналізувати логи AI-краулерів у динаміці

Для тижневого порівняння спершу виведіть день і назву агента для кожного рядка, а потім згрупуйте однакові пари:

awk -F'"' '{ ua=$6; if (match(ua, /GPTBot|OAI-SearchBot|OAI-AdsBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User|Googlebot|Google-CloudVertexBot|GoogleOther|Applebot|Amazonbot|Amzn-SearchBot|Amzn-User|Meta-ExternalAgent|Meta-WebIndexer|Meta-ExternalFetcher|MistralAI-(User|Index|Training)|DuckAssistBot|CCBot|bingbot/)) { bot=substr(ua,RSTART,RLENGTH); day=substr($1,index($1,"[")+1,11); print day, bot } }' access.log | sort | uniq -c

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

Практичний спосіб аналізувати логи AI-краулерів полягає у порівнянні однакових днів тижня та ролей ботів. Так легше відрізнити нові сторінки в обході від звичайних повторних запитів.

МетрикаЯк порахуватиЩо показує
Запити за роллю за тижденьУ згрупованому виводі складіть денні рядки для ботів однієї ролі та ISO-тижняЗміни частоти пошукового, тренувального й користувацького отримання
Унікальні URL за ботомВідкиньте дублікати шляхів окремо для кожного User-Agent у межах тижняНаскільки широким є обхід сторінок, незалежно від повторних запитів
Частка не-200 відповідей за ботомкількість статусів не 200 / усі запити бота × 100% за тижденьЧастоту перенаправлень, відмов, обмежень та помилок сервера
URL, запитані впершеПорівняйте множину URL тижня з усіма URL у попередніх логахНові сторінки у видимому для вас обході
URL із запитами user-fetch агентівВідфільтруйте ChatGPT-User, Claude-User і Perplexity-User, а тоді зберіть унікальні шляхиЯкі сторінки отримували на дію користувачів

Таблиця допомагає побачити власні зміни: наприклад, нові URL почали отримувати пошукові запити або після зміни правил зросла частка відмов. У огляді Cloudflare Radar за 2025 рік наведено частки HTML-запитів у мережі Cloudflare: інші AI-боти без Googlebot становили в середньому 4,2%, сам Googlebot 4,5%. Це мережеві середні за 2025 рік, а не прогноз чи норма для окремого сайту.

Для порівняння фіксуйте часовий пояс і домен. Сплеск на edge без змін в origin може бути наслідком кешу або блокування до сервера. Після змін sitemap чи robots.txt занотуйте дату. Частоту відвідувань оцінюйте відносно власної базової лінії, а не за числом іншого домену.

Що логи показують, а чого ні

Один рядок має значення лише разом із перевіркою джерела, URL, статусу та рівня журналу. Таблиця допомагає вибрати наступну перевірку, не роблячи висновок ширшим за наявні дані.

Що бачитеЩо це підтверджуєЧого не доводитьЩо перевірити далі
Підтверджений OAI-SearchBot отримав сторінку зі статусом 200Запит цього агента дійшов до журналу і сервер відповів успішноЩо сторінка потрапила до індексу або відповіді ChatGPTПеревірте URL, тіло відповіді та видимість у відповідях окремо
ChatGPT-User запитав один URLСторінку запросили під час дії в ChatGPTЩо її процитували або який саме промпт її викликавПеревірте, чи з'являється цей URL серед цитованих джерел для пов'язаних запитів у моніторингу відповідей, і чи повернув сервер статус 200 з повним вмістом
GPTBot має 403 або 429Для цього запиту сервер чи захист відмовив або застосував обмеженняЩо це обов'язково помилка конфігурації або що всі інші агенти заблокованіЗіставте журнал CDN, правило доступу та повторні запити
Багато 404 від AI-агентівЗапитувані адреси не знайдені на цьому рівніЩо агент знайшов биті посилання саме зараз або що вся секція недоступнаПеревірте старі URL, редиректи, маршрути й походження адрес
Є ланцюжок 301 або 302Клієнт отримав один чи кілька редиректівЩо він завершив перехід на канонічну сторінкуПеревірте кінцевий URL та статус останнього кроку
Є статус 304Сервер повідомив, що ресурс не змінився відносно умовного запитуЩо в цьому рядку є повне тіло сторінкиВрахуйте кешування та попередню успішну відповідь
Є Googlebot, але немає інших AI User-AgentGooglebot звертався в межах видимого вам журналуЩо інші сервіси не використовують сайт або що Google AI має окремого агентаПеревірте період, CDN і Google Search Console
На origin ботів немає, а Cloudflare показує їхEdge зафіксував запити, яких не видно в origin-журналіЩо запит дістався застосунку чи отримав сторінку з originЗіставте edge-статус і дію кешу
Є запит до llms.txtХтось попросив цей файлЩо файл прочитали або він вплинув на відповідьПеревірте User-Agent, статус і вміст, не приписуючи вплив на цитування

Чотири рівні даних: CDN, лог сервера, GA4 і відповіді AI
Чотири рівні даних: CDN, лог сервера, GA4 і відповіді AI

У цьому ланцюжку кожен інструмент відповідає на інше питання: edge бачить запити до CDN, access log фіксує звернення на серверному рівні, GA4 рахує переходи людей з AI-помічників, а моніторинг відповідей показує згадки та джерела. Про вимірювання людських переходів ідеться в матеріалі про трафік з AI-пошуку в GA4; сторінки, на які посилаються AI-відповіді, розбирає аналіз джерел відповідей ШІ. У дослідженні Vercel і MERJ на обмеженій вибірці сайтів не виявили виконання JavaScript основними AI-краулерами; результати опубліковано у грудні 2024 року. Це висновок для того періоду й вибірки, а не твердження про кожен сучасний агент.

Запис у логу також не гарантує, що клієнт виконав JavaScript. У дослідженні Vercel і MERJ, опублікованому в грудні 2024 року на обмеженій вибірці сайтів, автори не виявили виконання JavaScript основними AI-краулерами. Це спостереження для їхнього періоду й вибірки, а не актуальна гарантія для кожного агента або сайту.

Як відстежувати AI-ботів на сайті регулярно

Вибір інструмента залежить від обсягу журналів, формату та того, чи потрібен звіт у часі. Починайте з сирого логу, щоб розуміти, які саме події потрапили до обробки.

ІнструментКоли підходитьОбмеження
grep, awk, zgrepРазова перевірка чи невеликий журнал, коли відомий форматКоманди з цієї статті залежать від combined layout і потребують адаптації для JSON
GoAccessШвидкий огляд вебжурналів і звіти з типових форматівСпершу перевірте, чи правильно розпізнані поля User-Agent та часовий пояс
Screaming Frog Log File AnalyserАналіз URL та бот-активності у веблогахПеревірте актуальні умови ліцензії, межі імпорту та сумісність формату на сайті постачальника
Cloudflare AI Crawl ControlАктивність AI-краулерів на сайтах за CloudflareЦе дані edge-рівня; деталі невдалих запитів не означають автоматично блокування
ELK, OpenSearch або BigQueryВеликі журнали, регулярні агрегації та дашбордиПотрібні імпорт, схема полів і підтримка запитів до джерела

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

У логах можуть бути IP-адреси й URL, які у певному контексті стосуються ідентифікованих людей. Recital 30 GDPR визнає IP-адреси онлайн-ідентифікаторами, що можуть бути персональними даними. Обмежте доступ до сирих файлів, зберігайте лише потрібний період і погодьте строк зберігання з політикою організації.

Типові помилки

  • Шукати Google-Extended або Applebot-Extended як User-Agent і вважати, що пошукові роботи зникли. Це токени правил, а не окремі агенти у запитах.
  • Довіряти назві в User-Agent без перевірки IP. Її може надіслати будь-який клієнт.
  • Дивитися лише origin log за наявності CDN, кешу або edge-блокування. Частина трафіку може завершитися раніше.
  • Називати відвідування цитуванням. Серверний лог не містить фінальної відповіді моделі.
  • Очікувати, що блокування ChatGPT-User через robots.txt зупинить запит. Правила для user-triggered fetch залежать від компанії й агента.
  • Порівнювати періоди в різних часових поясах або пропускати ротаційні .gz файли.
  • Робити висновок за одним сплеском без перевірки змін URL, sitemap, правил доступу й обсягу журналу.

Часті запитання

Як знайти GPTBot у логах сервера?

Для combined access log почніть із grep -i 'GPTBot' access.log, а далі згрупуйте рядки за URL, статусом і датою. Після цього перевірте IP за списком OpenAI, оскільки User-Agent можна підробити.

Як часто AI-боти відвідують сайт?

Універсальної норми немає. Виміряйте власну кількість запитів і унікальних URL по тижнях, розділіть агентів за роллю й порівнюйте періоди з однаковими налаштуваннями логування.

Що означають запити ChatGPT-User у логах?

Вони вказують на отримання сторінки за дією користувача в ChatGPT. Такий рядок не відкриває текст запитання і не підтверджує цитування URL у відповіді.

Як перевірити IP-адресу GPTBot?

Порівняйте адресу з актуальним JSON-списком OpenAI для GPTBot. Якщо сайт працює за проксі, спершу встановіть, чи це IP відвідувача або адреса самого проксі.

Чи означає візит GPTBot, що ChatGPT цитує сторінку?

Ні. GPTBot є окремим від пошукового OAI-SearchBot агентом; навіть підтверджений пошуковий запит не доводить, що сторінку використано у конкретній відповіді.

Чому в логах немає Google-Extended?

Google-Extended є токеном для правил обходу, а не назвою HTTP-бота. Запити Google Search, включно з AI Overviews та AI Mode, можуть надходити від Googlebot.

Як ми робимо це у VYDAI

VYDAI не читає серверні логи. GEO-аудит надсилає тестові запити з User-Agent окремих ботів, серед яких GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot, Claude-User, PerplexityBot і Perplexity-User, та показує, яку відповідь повернув сайт. Це перевірка поточної доступності сторінки, а не історія її відвідувань. Перелік перевірок можна переглянути в GEO-аудиті VYDAI.

Статус перевірки доступу AI-ботів у GEO-аудиті VYDAI
Статус перевірки доступу AI-ботів у GEO-аудиті VYDAI

Окремо VYDAI використовує дані GA4 про людські переходи з AI-помічників. Моніторинг відповідей показує, чи згадують ChatGPT, Gemini, Claude, Google AI Overviews та AI Mode бренд, і які джерела з'являються у відповідях. Це відповідає на інше питання, ніж журнал запитів. Для огляду моніторингу відкрийте демо VYDAI або зареєструйтеся.

Якщо потрібно перевірити відвідування сайту AI-ботами, лог покаже, чи приходив агент і яку відповідь отримав. VYDAI відповідає на інше запитання: чи потрапив бренд у відповіді AI та які джерела в них з'являються.

Далі

Що варто прочитати далі

Усі матеріали
// Спробуйте на своїх запитах

Подивіться, як AI бачить ваш бренд у VYDAI

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

Зареєструватися у VYDAI