Ответ нейросети с включённым поиском обычно приходит со списком источников, и этот список выглядит как готовый ответ на вопрос «где про эту тему пишут». Я собрал такой список по семи запросам одной темы из логов собственного прогона — получилось 359 уникальных адресов. Раскрыть удалось 199. За остальными 160 стоит редирект, за которым реальный сайт не виден ни из кода, ни глазами.
Ниже — откуда берётся этот пробел, почему его нельзя закрыть локально, что из неё всё‑таки вытаскивается бесплатно и как из‑за неё врут метрики, если считать их наивно.
Что вообще отдают каналы вместе с ответом
Прогон — это набор вопросов, заданных нескольким сервисам с поиском, с записью ответа целиком. Для этого текста я привожу данные по прогону одного из клиентов, кому помогали увеличить видимость ответов ИИ‑моделях: 20 вопросов, шесть каналов, по три повтора на вопрос, 358 годных ответов.

160 адресов, за которыми ничего не видно
Я взял семь запросов одной темы — про выбор подрядчика — и собрал по ним все адреса источников из всех шести каналов. Вышло 359 уникальных. Из них 160 выглядят так:
https://vertexaisearch.cloud.google.com/grounding‑api‑redirect/AUZIYQF…s7Q
Это grounding‑редирект Google: канал отдаёт не адрес страницы, а собственную ссылку‑обёртку, внутри которой настоящий адрес зашифрован. Открывается она только переходом. urlparse даёт домен vertexaisearch.cloud.google.com — то есть на всех 160 адресах в моей таблице стоял бы один и тот же адрес — сервисный домен Google, к теме отношения не имеющий.
Пробел целиком приходится на один канал. По всему прогону из 253 ссылок Gemini таких обёрток 248 — 98%. У остальных пяти каналов адреса приходят прямыми.
Проверка простая и лезет в пять строк:
OPAQUE = ("vertexaisearch.cloud.google.com", "/grounding-api-redirect/", "/goto?url=") def is_opaque(url: str) -> bool: """Ссылка-обёртка: домен из неё вычислить нельзя.""" return any(marker in url for marker in OPAQUE)
Третий маркер в списке появился позже двух первых, и он важнее, чем кажется. С августа 2026 года Google начал отдавать часть ссылок и в обычной выдаче через /goto?url= — адрес внутри токена, ключ у Google. То есть непрозрачность источников не осталась особенностью одного API, а поехала в сторону поверхности, где мы снимаем обзоры.
Редирект нельзя раскрыть, не выходя в сеть
Первое, что приходит в голову, — раскрыть редирект запросом. Технически это работает: requests.head(url, allow_redirects=True) вернёт конечный адрес.
Дальше начинаются причины, по которым я это делать не стал.
Токен в ссылке зашифрован, и ключ есть только у выдающей стороны — вычислить адрес из строки, не выходя в сеть, нельзя в принципе. Значит, любой способ раскрытия — это сетевой запрос на каждый адрес. Путь /goto закрыт в robots.txt Google, а массовые переходы по редиректам с одного адреса быстро упираются в капчу. На 160 адресах одного прогона это ещё выглядит как задача, на нескольких прогонах в неделю — уже как отдельный краулер со своими прокси, ротацией и разбором капчи. Ради колонки в таблице.
Поэтому я оставил ссылки нераскрытыми, а взамен сделал две вещи: научился опознавать часть адресов бесплатно и стал явно считать, сколько источников осталось неопознанными.
Что из ссылок можно опознавать бесплатно

Первый — сверка заголовка с органикой того же ответа. Если у обёртки заголовок «Как попасть в ответы нейросетей», а в органике того же ответа есть страница ровно с таким заголовком, домен берётся оттуда.
Второй — домен, написанный прямо в заголовке источника. Каналы часто дописывают его хвостом: «… — vc.ru».
Порог 0,85 подобран руками по своим же данным: на 0,9 отваливались пары, где канал обрезал длинный заголовок многоточием, на 0,8 начали склеиваться разные материалы с типовыми названиями. Ниша, где половина заголовков состоит из одних и тех же четырёх слов, для нечёткого сравнения — тяжёлый случай, и порог тут не универсальная константа, а настройка под корпус.
Домыслить домен по смыслу заголовка соблазнительно и категорически нельзя: ошибка тихо поедет в таблицу площадок, по которой принимаются решения.
Как из‑за этого врут метрики
Фальшивый лидер таблицы. Если считать домены как есть, vertexaisearch.cloud.google.com встаёт в первую строку с 248 ссылками — выше любой реальной площадки. Формально верно, содержательно бессмысленно. У меня такие адреса помечены служебными вместе с документацией вендоров: в карте площадок они остаются видимыми, но в планы не попадают.
Заниженный вклад канала. Всё, что процитировал Gemini, в разбор по доменам почти не входит. Утверждать по этим данным, какие площадки читает Gemini, нельзя — независимо от того, сколько ссылок он отдал.
Смещённый знаменатель. Доля ответов с источниками у Gemini — 31 из 60. Но показанный источник и опознанный источник — разные события, и во второй метрике Gemini падает почти до нуля. Пока обе колонки не разведены, любая сводная цифра по прогону смешивает их.
Отсюда правило, которое у меня теперь зашито в код разбора: доля неопознанных источников считается и пишется в отчёт всегда, даже когда она нулевая.
Что осталось в списке после отсева обёрток

Из полного прогона после отсева обёрток остаётся 327 доменов на 1887 ссылок. Разбор этого остатка даёт картину не менее отрезвляющую, чем сам пробел в данных:
98 доменов из 327 собрали 80% всех ссылок;
140 доменов встретились ровно в одном ответе из 358;
238 доменов из 327 попались ровно одному каналу из шести;
в пяти каналах и более встретились 9 доменов.
Три четверти списка — адреса, за которыми стоит один канал и обычно один‑единственный ответ. Открытая глазами выгрузка выглядит как карта возможностей: три сотни сайтов. Посчитанная — сжимается до девяти адресов, на которых сходятся почти все каналы.
Чего этот разбор не показывает
Считаны только источники, которые канал показал. Модель могла читать страницу и не отдать её в списке — такие ответы у меня выглядят как ответы без источников.
Прогон один и снят за один день. Состав источников заметно пересобирается от съёма к съёму, поэтому карту площадок я строю накоплением по нескольким прогонам, а не по одному.
Оценка «160 из 359» относится к одной подвыборке из семи запросов. По другой теме доля обёрток будет другой — постоянна тут только их природа.
Доля Google в разборе занижена по построению, и никакой поправкой это не лечится: занижение и есть предмет этого разбора.
Что я поменял в коде после разбора
Обёртки распознаются списком маркеров на входе, а не по домену на выходе. Домен у них валидный, и без явной проверки они доезжают до таблицы площадок в виде одной гигантской строки.
Опознание идёт бесплатными способами, а неопознанное остаётся неопознанным. Сверка заголовка с органикой и домен из хвоста заголовка закрывают часть адресов; остальное дешевле потерять, чем угадать.

