Claude Code читает не страницу, а её пересказ: прошёл путь одного запроса по документации Claude


Совет оптимизировать сайт под Claude смешивает два инструмента Anthropic: Claude и агента Claude Code. Profound снял 24 135 ответов на одних запросах, и у двух инструментов разошёлся почти каждый показатель. Я прошёл по документации путь запроса в обоих инструментах. Для владельца сайта из разбора следуют три вещи: какие боты Anthropic заходят на сайт, что закрыть в robots.txt и как проверить заходы по access-логу.
Откуда данные: документация Anthropic и открытые исследования
Своих прогонов под эту статью я не делал, картина собрана по открытым источникам. Claude здесь и дальше означает приложение claude.ai и программный доступ к той же ИИ-модели через Messages API, Claude Code — агента, которого разработчик запускает в терминале для работы с кодом. Profound снимал приложение claude.ai, а параметры поиска и формат цитат взяты из документации Messages API: для приложения Anthropic их не описывает. Источников три группы: документация Anthropic (platform.claude.com, code.claude.com, support.claude.com), разбор Profound «Claude and Claude Code are distinct answer engines» от 24 августа 2026 года (answer engine — система, которая отвечает вместо выдачи ссылок) и два исследования серверных логов, Ahrefs и Saaslinks, о том, кто запрашивает у сайтов файл llms.txt.
Выборка Profound — 24 135 ответов на 1 724 запроса из 11 категорий, снятых с 13 по 23 июля 2026 года, веб-поиск включён у всех систем; отдельная подвыборка про программирование — 2 800 ответов на 200 запросов. Ещё компания разобрала топ-1000 страниц, которые агенты обеих систем посетили с 18 июля по 18 августа, и разложила их по категориям нейросетью GPT-4.1-mini, а не вручную. Страницы взяты с доменов, которые Profound отслеживает у себя (в оригинале internally tracked domains), и выборка, вероятно, смещена к SaaS и технологическим компаниям: переносить эти цифры на интернет-магазин или медицинский сайт без проверки я бы не стал.
Что происходит, когда Claude ищет через API: цитата с адресом и куском текста
В выборке Profound приложение claude.ai искало в вебе больше чем в 93% ответов. Это цифра одной выборки: другое исследование, со своим набором запросов и счётом по промптам, даёт для Claude 36,6%. По документации веб-поиска Messages API ИИ-модель сама решает, вызывать ли инструмент для конкретного вопроса. Владельцу сайта из параметров поиска важен один: разработчик приложения на API может сузить поиск списком разрешённых (allowed_domains) или запрещённых (blocked_domains) доменов, и тогда сайт вне списка такое приложение не найдёт, как бы хорошо он ни был написан.
Найденные страницы приходят отдельным блоком web_search_tool_result — списком с адресом и заголовком каждой. В тексте ответа Claude расставляет цитаты типа web_search_result_location, и каждая несёт адрес (url), заголовок (title), зашифрованный указатель на источник и кусок процитированного текста до 150 символов (cited_text). Поля url, title и cited_text в токенах не учитываются. Следующий фрагмент нужен тому, кто строит приложение на API: так со стороны кода выглядит разбор уже полученного ответа, без единого сетевого запроса.
def extract_cited_urls(response_content):
"""Уникальные цитаты web_search_result_location
из response.content ответа Messages API."""
seen = set()
citations = []
for block in response_content:
for c in block.get("citations") or []:
if c.get("type") != "web_search_result_location":
continue
url = c.get("url")
if not url or url in seen:
continue
seen.add(url)
citations.append({
"url": url,
"title": c.get("title", ""),
"cited_text": c.get("cited_text", ""),
})
return citationsФункция проходит по блокам response.content, берёт из них цитаты веб-поиска и отбрасывает повторы одного адреса. Если страница есть в блоке результатов, но её url нет среди цитат, поиск её нашёл, а в текст ответа она не попала. У Messages API есть и второй инструмент, web fetch tool, который забирает содержимое страницы по адресу. По его документации он открывает только адреса, которые уже встречались в разговоре: в сообщении пользователя или в результатах прошлого поиска. Ссылку, которую ИИ-модель сочинила сама, он не откроет — так Anthropic защищается от утечки данных. JavaScript этот инструмент не выполняет, для страниц, которые собирает браузер, у Anthropic есть отдельный browser use tool.
На какие сайты приходятся цитаты Claude, посчитала OtterlyAI: 379 321 цитата по 16 406 доменам, июнь 2026 года, запросы из SaaS и tech. Сайты брендов и продуктов собрали 64,0% цитат, новости и медиа — 14,9%. На топ-10 доменов пришлось 9,5% всех цитат, на топ-500 — 59,9%, а 32,9% доменов процитированы ровно один раз.
Когда Claude Code открывает страницу, до основной ИИ-модели доходит пересказ

Claude Code ищет редко: в той же выборке Profound веб-поиск сработал в 13% ответов. Поиск здесь один инструмент, WebSearch, и по справочнику инструментов Claude Code его разрешают или запрещают целиком, без правил для отдельных доменов.
Страницу Claude Code открывает инструментом WebFetch, и до основной ИИ-модели она, как правило, доходит уже переработанной. По справочнику, WebFetch получает адрес и промпт с описанием, что нужно извлечь, страницу по этому промпту читает вспомогательная ИИ-модель поменьше, и в большинстве случаев основная получает её ответ, а не исходную страницу. Длинные страницы перед обработкой обрезаются до фиксированного числа символов, а сама документация называет инструмент lossy by design: детали он теряет намеренно.
Исключение описано не у Anthropic, а в стороннем разборе кода Claude Code от января 2026 года. HTML там переводится в Markdown библиотекой Turndown, а пересказ пропускается при двух условиях сразу: домен входит в зашитый список примерно из 80 сайтов документации (Python Docs, MDN, React, Kubernetes, AWS), и страница отдаётся как text/markdown короче примерно 100 тысяч символов. Обычный сайт в этот список не входит, поэтому его страницу Claude Code получает пересказом, в каком бы формате она ни была. Anthropic списка не публикует, и он может смениться с любой версией.
Остальное в справочнике касается в основном отладки агента: кэш ответа на 15 минут, пятиминутный срок загрузки, переменные окружения. Для сайта важны две детали. Редирект на другой домен WebFetch сам не проходит: он возвращает исходный и новый адрес, и агент должен повторить запрос. А правилом WebFetch(domain:example.com) в списке permissions.deny файла settings.json разработчик может запретить агенту конкретный сайт, даже если robots.txt этого сайта открыт.
Разницу между Claude и Claude Code видно и по ответам

Разбор Profound показывает ту же разницу со стороны ответов. На одних и тех же 1 724 запросах Claude Code в среднем называет 6,6 бренда за ответ, Claude — 5,2, и совпадает у них лишь один бренд из пяти. Длина ответа тоже разная: в среднем 322 слова у Claude Code и 459 у Claude.
Сильнее всего различается форма ответа. По данным Profound, Claude Code вставляет списки в 94% ответов и таблицы в 54%. У Claude списки есть в 56% ответов, таблицы — в 11%. Причин такой разницы Profound не называет, в разборе приведены только доли.
Разные и страницы, на которые ходят агенты. В топ-1000 страниц, посещённых с 18 июля по 18 августа, почти три четверти визитов Claude Code пришлись на документацию. У Claude 60% визитов — это robots.txt, карта сайта (sitemap) и главные страницы.
Одна цифра в открытых источниках не сходится. Profound на июльской выборке получил поиск больше чем в 93% ответов Claude. Другое исследование, представленное на сессии Profound Zero Click и пересказанное Search Engine Land в июне 2026 года, даёт для Claude 36,6% промптов с поиском при примерно 90% у ChatGPT. Там же частота поиска разложена по типам запросов: 81% у вопросов о свежих событиях, 67% у рейтингов, 55% у запросов с привязкой к месту и 51% у сравнений. Profound считает долю ответов, второе исследование — долю промптов, выборки и периоды у них разные, поэтому к одному числу эти данные не сводятся. Сравнивать 13% у Claude Code корректно только с цифрой Profound: обе сняты на одной выборке.
Сам Profound выводит из этих данных, что под два инструмента нужно оптимизировать раздельно. Для Claude Code компания советует машиночитаемую документацию и точные технические характеристики, для Claude — брендовый контент широкого охвата.
На сайт заходят три разных бота Anthropic

У Anthropic три краулера с разными именами и задачами, и правило в robots.txt для одного из них не действует на двух других. По документации поддержки Anthropic, обновлённой 7 апреля 2026 года, ClaudeBot собирает контент для обучения ИИ-моделей, и его блокировка исключает сайт из будущих обучающих наборов. Claude-User забирает страницу, когда о ней спрашивает конкретный пользователь Claude, и его блокировка снижает видимость сайта в ответах на такие вопросы. Claude-SearchBot индексирует контент для качества поиска, и без него, по той же документации, может упасть точность цитирования.
Все три бота соблюдают robots.txt, включая Claude-User. По разбору Search Engine Journal это отличает Anthropic от OpenAI, у которой ChatGPT-User по её же документации может файл не соблюдать. Правила пишутся на каждого бота и на каждый поддомен отдельно. Кто хочет остаться в ответах Claude, но не отдавать тексты на обучение, закрывает только ClaudeBot:
User-agent: ClaudeBot
Disallow: /
User-agent: Claude-User
Allow: /
User-agent: Claude-SearchBot
Allow: /Группы с Allow: / для Claude-User и Claude-SearchBot нужны, если в файле есть общее правило User-agent: с запретами: по стандарту robots.txt (RFC 9309) бот, для которого есть группа со своим именем, общую группу не читает. Если общего запрета нет, эти две группы можно не писать. Блокировать ботов по IP-адресу Anthropic не советует: они работают на мощностях публичных облачных провайдеров. Список адресов в bots.json компания публикует, но надёжнее различать ботов по user-agent — подписи, которой бот представляется серверу.
С user-agent инструмента WebFetch в Claude Code как раз ничего не ясно: какой подписью он ходит на внешние сайты, Anthropic не публикует. Это может быть тот же Claude-User или отдельная строка, а независимые каталоги ботов расходятся даже в строке Claude-User. Ответ для своего сайта даёт только собственный лог.
Боты Anthropic llms.txt почти не читают
Файл llms.txt лежит по адресу /llms.txt и коротко описывает сайт для ИИ-моделей: ссылки на главные страницы в формате, удобном для машинного чтения. У platform.claude.com и code.claude.com такой файл есть, со ссылкой на полную версию llms-full.txt, так что для собственной документации Anthropic этот формат держит.
На чужих сайтах его почти никто не запрашивает, в том числе боты Anthropic. Ahrefs проверил 137 210 доменов в мае 2026 года и нашёл валидный llms.txt примерно у 38 000: у 97% из них за месяц к файлу не было ни одного обращения. Краулеры обучения всех компаний вместе дали 5,3% запросов к llms.txt, а ClaudeBot — 0,8% запросов внутри этой категории. Claude-User набрал 2,5% всех запросов к файлу. Saaslinks разобрал логи одного сайта за две недели: ClaudeBot, Claude-SearchBot и Claude-User сделали 319, 96 и 8 запросов к /robots.txt и ни одного к /llms.txt.
Claude Code в исследовании Ahrefs назван среди примеров категории ИИ-агентов, и вся эта категория дала 10,5% запросов к llms.txt. По какой подписи Ahrefs опознавал агентов, в исследовании не раскрыто: сказано только, что все user-agent разложены на двенадцать категорий. Боты, от которых зависит ответ пользователю Claude в чате, файл почти не трогают. Если у проекта есть документация для разработчиков, llms.txt там уместен, Anthropic держит такой файл и у своей. Как способ попасть в ответ Claude на вопрос о бренде он по этим логам не работает.
Как посмотреть в своём логе, кто из ботов Anthropic к вам заходит
Какие боты Anthropic заходят на конкретный сайт, показывает только его собственный access-лог. У nginx стандартный формат журнала (combined log) содержит поле user-agent, и скрипт на Python считает по нему хиты трёх ботов и запрошенные пути. Официальной подписи WebFetch в Claude Code нет, поэтому все прочие user-agent со словом claude в любом регистре скрипт печатает отдельным списком: по нему видно, какие подписи с этим словом приходят на сайт.
from __future__ import annotations
import re
import sys
from collections import Counter
LOG_PATTERN = re.compile(
r'(?P<ip>\S+) \S+ \S+ \[(?P<time>[^\]]+)\] '
r'"(?P<method>\S+) (?P<path>\S+) \S+" '
r'(?P<status>\d+) (?P<size>\S+) '
r'"(?P<referer>[^"]*)" "(?P<agent>[^"]*)"'
)
BOTS = ("ClaudeBot", "Claude-User", "Claude-SearchBot")
def classify(user_agent: str) -> str | None:
for name in BOTS:
if name in user_agent:
return name
return None
def analyze(lines):
hits: Counter[str] = Counter()
paths_by_bot: dict[str, Counter[str]] = {}
other_claude_agents: Counter[str] = Counter()
for line in lines:
match = LOG_PATTERN.match(line)
if not match:
continue
agent = match.group("agent")
bot = classify(agent)
if bot:
hits[bot] += 1
paths_by_bot.setdefault(bot, Counter())[match.group("path")] += 1
elif "claude" in agent.lower():
other_claude_agents[agent] += 1
return hits, paths_by_bot, other_claude_agents
def main() -> None:
if len(sys.argv) != 2:
sys.exit("Использование: python3 claude_log_stats.py access.log")
with open(sys.argv[1], encoding="utf-8", errors="replace") as f:
hits, paths_by_bot, other_claude_agents = analyze(f)
print("Хиты по ботам Anthropic:")
for bot, count in hits.most_common():
print(f" {bot}: {count}")
print("\nПути по ботам:")
for bot, paths in paths_by_bot.items():
print(f" {bot}: {dict(paths.most_common(5))}")
if other_claude_agents:
print("\nДругие user-agent с подстрокой claude:")
for agent, count in other_claude_agents.most_common():
print(f" {agent}: {count}")
if __name__ == "__main__":
main()Файл читается построчно за один проход и не загружается в память целиком, так что большой лог скрипт тоже переварит. Функция classify ищет в user-agent имя одного из трёх ботов, analyze раскладывает строки на хиты, пути и прочие подписи с claude, а main без аргумента печатает подсказку и выходит с кодом 1. Строки, которые не разобрались по формату combined, пропускаются молча: если в логе nginx настроен свой формат, регулярное выражение придётся поправить под него.
Я проверил скрипт на шести синтетических строках, которые составил сам, это не трафик реального сайта. В них два захода ClaudeBot, по одному Claude-User и Claude-SearchBot, придуманный агент example-agent/0.1 (claude-test) и обычный браузер. Вывод прогона:
Хиты по ботам Anthropic:
ClaudeBot: 2
Claude-User: 1
Claude-SearchBot: 1
Пути по ботам:
ClaudeBot: {'/robots.txt': 1, '/blog/article-1': 1}
Claude-User: {'/docs/pricing': 1}
Claude-SearchBot: {'/pricing': 1}
Другие user-agent с подстрокой claude:
example-agent/0.1 (claude-test): 1Браузер в счёт не попал, придуманный агент ушёл в последний список. На синтетике это проверка того, что разбор работает, и больше ничего. На настоящем логе в последнем списке окажется подпись, которой к сайту приходит всё остальное с именем Claude, в том числе, возможно, WebFetch из Claude Code.
Что по итогу разбора
Какой из двух инструментов важнее, решает аудитория сайта. Если вас выбирают покупатели, спрашивая чат, это Claude и его боты Claude-User и Claude-SearchBot. Если вашей документацией пользуются разработчики, добавляется Claude Code. Из документации и открытых исследований для владельца сайта следуют пять действий, первые два делаются за десять минут без разработчика.
Прописать robots.txt отдельно для ClaudeBot, Claude-User и Claude-SearchBot. Правило для одного бота на других не действует. Чтобы остаться в ответах Claude, но не отдавать тексты на обучение, достаточно закрыть только ClaudeBot.
Проверить, что важные страницы отдаются без JavaScript. Web fetch tool в Messages API не выполняет JavaScript, а WebFetch в Claude Code, по стороннему разбору кода, переводит в Markdown полученный HTML без выполнения скриптов. Если текст страницы собирает скрипт в браузере, оба инструмента его не увидят. Проверка простая: открыть страницу с отключённым JavaScript (в DevTools браузера это отдельная настройка). Что видно там, то видит и инструмент чтения.
Смотреть в собственный access-лог по user-agent. У трёх ботов Anthropic фиксированные подписи, их считает любой разбор лога по этому полю, а неизвестные подписи с claude стоит выводить отдельным списком. Скрипт на 60 строк здесь хватит, но запускать его на сервере обычно будет разработчик или администратор.
Не считать llms.txt способом попасть в ответы Claude. Боты, от которых зависят эти ответы, файл почти не запрашивают. У Saaslinks на логах одного сайта за две недели — ноль обращений от каждого из трёх, у Ahrefs 97% файлов на 38 000 доменов за месяц не получили ни одного обращения. Для документации, которую разработчики читают через Claude Code, llms.txt уместен.
Ставить главное в начало длинной страницы. WebFetch обрезает длинные страницы до обработки, а затем пересказывает их вспомогательной ИИ-моделью. Markdown-версия обычному сайту пересказа не отменит: по стороннему разбору кода быстрый путь без пересказа есть только у примерно 80 зашитых сайтов документации.
У разбора три ограничения. Цифры Profound сняты на доменах, которые компания отслеживает сама, вероятно в основном SaaS и tech, и для других ниш доли могут быть другими. Частота поиска у Claude расходится между источниками: больше 93% ответов у Profound и 36,6% промптов во втором исследовании, при разном счёте и разных выборках. User-agent, которым WebFetch в Claude Code ходит на внешние сайты, официально не описан, и узнать его можно только по своему логу.
Путь запроса в обоих инструментах описан в открытой документации почти целиком. В Messages API он заканчивается цитатой с адресом и куском исходного текста, у Claude Code — пересказом вспомогательной ИИ-модели, и формата цитат для него в документации Claude Code нет.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.