# Alejandro Rioja — RU > Alejandro Rioja — AI agent systems for founders. Plus posts on growth, marketing, sales, ops, and business from inside live P&Ls. Site: https://alejandrorioja.com/ru/ Author: Alejandro Rioja Language: ru --- ## GEO для Локального Бизнеса: Как Попасть в ИИ-Поиск Source: https://alejandrorioja.com/ru/geo-for-local-business-getting-a-brick-and-mortar-cited-by-ai-search/ Published: 2026-05-31 Updated: 2026-05-31 Tags: GEO, Marketing TL;DR: Чтобы физический бизнес цитировался ИИ-поисковиками, сначала оптимизируйте Google Business Profile — это важнейший сигнал. Затем добавьте JSON-LD схему LocalBusiness, обеспечьте согласованность NAP по всему вебу и создайте постоянный поток свежих отзывов. Купить цитирование ИИ невозможно, а заполнение профиля ключевыми словами не поможет. ## Содержание _Обновлено май 2026._ **TL;DR:** Чтобы физический бизнес цитировался ИИ-поисковиками, сначала оптимизируйте Google Business Profile — это важнейший сигнал. Затем добавьте JSON-LD схему LocalBusiness, обеспечьте согласованность NAP по всему вебу и создайте постоянный поток свежих отзывов. Купить цитирование ИИ невозможно, а заполнение профиля ключевыми словами не поможет. **[Взгляд оператора]** Я управляю Pickleland — площадкой для пиклбола в Пфлюгервилле, Техас. Когда я начал проверять, что ChatGPT и Perplexity выдают на запрос "лучшие корты для пиклбола рядом с Остином," мой объект не появлялся — несмотря на хорошие позиции в Google Maps. Вот что я изменил и почему это сработало. --- ## Почему ИИ-поиск иначе работает для локального бизнеса Традиционный местный SEO сводился к позициям в картах и синих ссылках. ИИ-поиск устроен иначе: ChatGPT, Perplexity и обзоры ИИ от Google синтезируют ответы и цитируют конкретные источники. Для локальных запросов они используют комбинацию данных Google Business Profile, структурированных данных на сайте, платформ отзывов и авторитетных каталогов. Хорошая новость: порог входа ниже, чем кажется. Большинство физических бизнесов запустили структурированные данные кое-как и забросили GBP. Если делать базовые вещи правильно и последовательно — вы выделяетесь. Плохая новость: срезать путь не получится. Заплатить за цитирование ИИ-поисковиком невозможно. Рекламного продукта "цитирования ИИ" не существует. Что реально можно сделать — помочь ИИ понять ваш бизнес и доверять ему. --- ## Google Business Profile — это фундамент Если выбирать один инструмент, это Google Business Profile (GBP). Когда кто-то спрашивает ИИ-ассистента о "лучших кортах для пиклбола рядом с Остином," ИИ сильно опирается на данные GBP. Причина: GBP — структурированная верифицированная база данных. ИИ-модели, обученные на веб-данных, и инструменты вроде Perplexity с живым поиском рассматривают сигналы GBP как высоконадёжные. Что делать с GBP: - **Заполните каждое поле.** Категория, описание, часы работы (включая праздники), атрибуты, услуги/меню. Каждое пустое поле — пропущенный сигнал. - **Используйте основную категорию точно.** Для Pickleland это "Корт для пиклбола," а не просто "Спортивный комплекс." ИИ-движки читают данные категорий. - **Регулярно добавляйте фото.** GBP вознаграждает свежесть. Загружайте новые фото кортов, мероприятий и интерьера минимум дважды в месяц. - **Публикуйте обновления.** Посты GBP индексируются. Пишите короткие посты (150–300 слов) с ответами на вопросы типа "Нужно ли приносить свою ракетку?" Эти Q&A-посты появляются напрямую. - **Отвечайте на каждый Q&A.** Раздел Q&A в GBP публичный и индексируется. Если никто ещё не задал ваши самые частые вопросы — добавьте их сами и ответьте. Чего не делать: не набивайте описание GBP ключевыми словами типа "лучшие корты пиклбол Остин дешевле открыты сейчас." Это выглядит как спам, с ИИ не работает, и Google может заблокировать профиль. --- ## Схема LocalBusiness: слой структурированных данных GBP покрывает экосистему Google. Для ИИ-поиска за пределами Google (Perplexity, ChatGPT с браузингом, инструменты на основе Bing) структурированные данные на сайте — основной сигнал. Добавьте блок JSON-LD `LocalBusiness` на главную страницу и страницу контактов. Вот схема, которую я использую для Pickleland: ```json { "@context": "https://schema.org", "@type": "SportsActivityLocation", "name": "Pickleland", "description": "Закрытый зал для пиклбола в Пфлюгервилле, Техас: 8 кортов, открытые игры, лиги и тренировки.", "url": "https://pickleland.com", "telephone": "+1-512-000-0000", "address": { "@type": "PostalAddress", "streetAddress": "123 Pickleland Dr", "addressLocality": "Pflugerville", "addressRegion": "TX", "postalCode": "78660", "addressCountry": "US" }, "geo": { "@type": "GeoCoordinates", "latitude": 30.4349, "longitude": -97.6200 }, "openingHoursSpecification": [ { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "06:00", "closes": "22:00" }, { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Saturday","Sunday"], "opens": "07:00", "closes": "21:00" } ], "priceRange": "$$", "amenityFeature": [ { "@type": "LocationFeatureSpecification", "name": "Indoor Courts", "value": true }, { "@type": "LocationFeatureSpecification", "name": "Equipment Rental", "value": true }, { "@type": "LocationFeatureSpecification", "name": "Lessons Available", "value": true } ], "sameAs": [ "https://www.google.com/maps?cid=YOUR_CID", "https://www.yelp.com/biz/pickleland-pflugerville", "https://www.facebook.com/pickleland" ] } ``` Массив `sameAs` явно связывает сущность схемы с GBP, Yelp и Facebook-страницами. ИИ-движки используют это для перекрёстных ссылок, убеждаясь, что все они — один и тот же бизнес. Координаты `geo` важны — Perplexity делает сопоставление по близости. А `openingHoursSpecification` в машиночитаемом формате напрямую попадает в ответы ИИ, когда кто-то спрашивает "Pickleland работает в воскресенье?". Используйте `SportsActivityLocation` вместо универсального `LocalBusiness`, когда это уместно — чем точнее тип, тем правильнее ИИ вас категоризирует. --- ## Согласованность NAP: скучно, но критично NAP — аббревиатура от Name, Address, Phone (имя, адрес, телефон). Когда название вашего бизнеса отображается как "Pickleland" в Google, "Pickleland LLC" на Yelp, "Pickleland - Pflugerville" в Facebook и "Pickleland Pickleball" в местном каталоге — ИИ-движки видят четыре разные сущности и понижают доверие ко всем им. Проведите NAP-аудит: 1. Найдите название вашего бизнеса в Google, Yelp, Facebook, Apple Maps, Bing Places, Foursquare, TripAdvisor и отраслевых каталогах. 2. Зафиксируйте каждое расхождение. 3. Исправьте — большинство платформ позволяют заявить права на листинг или отредактировать его напрямую. Название, которое вы используете везде, должно точно совпадать с тем, что указано в Google Business Profile. Для Pickleland это "Pickleland" — без суффикса, без названия города. Формат номера телефона тоже имеет значение. Используйте везде один формат: `(512) 000-0000` или `+1-512-000-0000`, выберите один и придерживайтесь его. Ссылки `sameAs` в JSON-LD помогают ИИ-движкам связать точки, но именно согласованный NAP в первую очередь формирует доверие к сущности. --- ## Скорость отзывов: свежесть — сигнал для ИИ ИИ-поисковики смотрят не только на звёздный рейтинг — они смотрят на то, насколько недавние и частые ваши отзывы. Бизнес с 200 отзывами, последний из которых датирован 18 месяцами назад, ранжируется ниже бизнеса с 80 отзывами, три из которых появились на прошлой неделе. В Pickleland мы встроили скорость отзывов в операционный процесс: - После каждой открытой игры сотрудник отправляет сообщение с прямой ссылкой на страницу отзывов в Google. - Мы отвечаем на каждый отзыв — положительный и отрицательный — в течение 24 часов. Активность ответов сигнализирует краулерам о свежести. - Ежемесячно мы определяем наиболее довольных постоянных клиентов и лично просим их поделиться отзывом. Мы выросли с 43 до 190 отзывов примерно за четыре месяца. Влияние на цитирования ИИ было измеримым: Pickleland начал появляться в ответах Perplexity на "пиклбол в районе Остина" примерно через шесть недель после преодоления отметки в 100 отзывов с высокой актуальностью. Не покупайте фейковые отзывы. Помимо очевидного риска блокировки, ИИ-движки всё лучше распознают кластеры неестественных отзывов (похожие временны́е метки, шаблонный язык, аккаунты рецензентов без истории). --- ## Q&A-контент, соответствующий способу общения с ИИ Традиционный SEO нацелен на ключевые фразы. GEO нацелен на вопросы — конкретно естественно-языковые вопросы, которые люди печатают или произносят ИИ-ассистентам. Подумайте, как человек спрашивает ChatGPT в сравнении с тем, что вводит в Google: - Google: `корты пиклбол остин` - ChatGPT: `Какие лучшие закрытые корты для пиклбола есть рядом с Остином, открытые по утрам в будни?` Ваш контент должен отвечать на расширенную версию. Создайте на сайте специальную страницу FAQ или Q&A, прямо отвечающую на: - "Нужно ли приносить собственную ракетку?" (вопросы о снаряжении) - "Сколько стоит игра в пиклбол в [заведении]?" - "[Заведение] подходит для начинающих?" - "Можно ли забронировать корт для корпоратива?" - "Какое расписание открытых игр в выходные?" Пишите каждый ответ в 2–4 предложения, прямо и полно. ИИ-движки извлекают и показывают эти ответы дословно, когда пользователи задают совпадающие вопросы. Я видел, как FAQ-ответы Pickleland цитировались слово в слово в ответах Perplexity. Используйте для этого и посты GBP: пишите посты в формате вопрос–ответ. "В: Нужно ли заранее бронировать корт? О: Без брони принимаем в часы открытых игр (проверьте расписание), но для пиковых часов в выходные рекомендуем резервировать. Бронируйте на pickleland.com." Такой формат дружелюбен к ИИ и индексируется. --- ## Что не работает Честно о пределах: **Набивать описание GBP ключевыми словами** не помогает ИИ-поиску. Это читается как спам и может привлечь внимание к профилю. Пишите естественно для людей. **Платить за цитирования ИИ** не существует как продукт. Любой сервис, утверждающий, что "обеспечит цитирование в ChatGPT" за плату, торгует воздухом. Цитирования ИИ редакционные — они основаны на том, что ИИ определяет как наиболее релевантный и заслуживающий доверия ответ. **Одноразовая настройка схемы** недостаточна. Схема должна оставаться актуальной. Если часы изменились, вы обновили GBP, но не JSON-LD, вы создаёте противоречивые сигналы. Включите ежеквартальный аудит схемы в свой регулярный процесс. **Гнаться за каждым каталогом** даёт убывающую отдачу. Сосредоточьтесь на платформах с наибольшим весом при ИИ-поиске: Google, Yelp, Facebook, Apple Maps, Bing Places. Отраслевые каталоги (в нашем случае — каталог площадок USA Pickleball) стоят того, потому что они авторитетны в своей вертикали. --- ## Вывод оператора GEO для локального бизнеса не сложен — просто негламурен и требует постоянства. Доведите GBP до 100% заполненности, добавьте чистую схему LocalBusiness на сайт, стандартизируйте NAP по всему вебу и встройте ритм отзывов в операционный процесс. Сделайте все четыре вещи — и у ИИ-поисковиков будет всё необходимое, чтобы уверенно вас цитировать. Я сделал это с Pickleland, и результаты видны в реальных данных по цитированиям. Начните с GBP сегодня — это займёт один вечер, а эффект будет немедленным. --- ## Агенты по Событиям vs Агенты по Расписанию: Какой Паттерн для Какой Задачи Source: https://alejandrorioja.com/ru/event-triggered-vs-scheduled-agents-which-pattern-for-which-job/ Published: 2026-05-31 Updated: 2026-05-31 Tags: AI Agents TL;DR: Используй агентов по событиям, когда действие пользователя требует немедленного ответа — задержка больше нескольких секунд ломает опыт. Используй агентов по расписанию для пакетной или периодической работы, где тайминг предсказуем. Ограничение: агенты по событиям должны быть без состояния и быстрыми; агенты по расписанию могут быть с состоянием и медленнее. ## Содержание _Обновлено май 2026._ **TL;DR:** Используй агентов по событиям, когда действие пользователя требует немедленного ответа — задержка больше нескольких секунд ломает опыт. Используй агентов по расписанию для пакетной или периодической работы, где тайминг предсказуем. Ограничение: агенты по событиям должны быть без состояния и быстрыми; агенты по расписанию могут быть с состоянием и медленнее. **[Взгляд оператора]** Я запускаю 30+ продакшн-агентов для своего консалтингового бренда и Pickleland — площадки для пиклбола в Пфлюгервилле, Техас. Каждый из них относится к одному из двух паттернов: срабатывает по событию или срабатывает по часам. Ошибиться здесь — значит тратить деньги впустую и доставлять сломанный опыт. ## Два паттерна простыми словами **Агент по событиям** просыпается, потому что что-то случилось. Пришло бронирование. Был опубликован комментарий. Отправлена форма. Триггер внешний и непредсказуемый по времени. Задача: ответить быстро. **Агент по расписанию** просыпается, потому что так сказали часы. Каждое утро в 7:00. Каждое воскресенье в 18:00. Каждый час в начале часа. Триггер внутренний и полностью предсказуемый. Задача: выполнить тщательную работу. Вот и всё. Не усложняй. Архитектура следует из ответа на один вопрос: *нужен ли пользователю или системе ответ прямо сейчас, или можно подождать до определённого времени?* ## По событиям: агент ответов в социальных сетях Мой агент ответов в соцсетях срабатывает каждый раз, когда под отслеживаемым постом Facebook появляется новый комментарий. Агент читает комментарий, классифицирует намерение (вопрос, жалоба, похвала, спам), составляет ответ и публикует его — или отмечает для ручной проверки, если уверенность низкая. Весь цикл должен завершаться менее чем за 30 секунд, иначе ответ кажется запоздалым. Это проблема паттерна по событиям. Вот упрощённый Cloudflare Worker, который обрабатывает webhook от сервиса мониторинга соцсетей: ```typescript // workers/social-reply.ts export default { async fetch(request: Request, env: Env): Promise { if (request.method !== "POST") { return new Response("Method not allowed", { status: 405 }); } // Проверяем подпись webhook const sig = request.headers.get("x-webhook-signature") ?? ""; const body = await request.text(); const valid = await verifySignature(body, sig, env.WEBHOOK_SECRET); if (!valid) return new Response("Unauthorized", { status: 401 }); const event = JSON.parse(body) as SocialCommentEvent; // Классифицируем и отвечаем — держим async, чтобы быстро вернуть 200 env.REPLY_QUEUE.send(event); return new Response("OK", { status: 200 }); }, }; // Потребитель очереди — выполняет реальную работу ИИ export const queue: ExportedHandlerQueueHandler = async (batch, env) => { for (const msg of batch.messages) { const comment = msg.body; const classification = await classifyComment(comment.text, env); if (classification.intent === "spam") { msg.ack(); continue; } const reply = await draftReply(comment, classification, env); if (classification.confidence > 0.85) { await postReply(comment.postId, comment.id, reply, env); } else { await flagForReview(comment, reply, env); } msg.ack(); } }; ``` Две вещи стоит отметить. Во-первых, обработчик fetch сразу возвращает 200 и передаёт реальную работу в очередь. Это сохраняет быстрый ответ на webhook и не даёт сервису мониторинга делать повторные попытки. Во-вторых, потребитель очереди выполняет реальный вызов ИИ — классификацию и составление ответа — без временного давления от открытого HTTP-соединения. ## По расписанию: промоутер мероприятий Pickleland Pickleland управляет кортами и мероприятиями. Каждую неделю кто-то должен публиковать предстоящие мероприятия в нужных группах Facebook, чтобы заполнить места. Это чистая периодическая пакетная работа — никакое действие пользователя её не запускает, и она не обязана происходить в реальном времени. Промоутер мероприятий Pickleland работает по cron, проверяет систему бронирований на мероприятия в ближайшие 4 дня, составляет посты для каждой подходящей группы Facebook и предоставляет их для моего просмотра перед публикацией. ```typescript // workers/event-promoter.ts export default { async scheduled( event: ScheduledEvent, env: Env, ctx: ExecutionContext ): Promise { ctx.waitUntil(runPromoter(env)); }, }; async function runPromoter(env: Env): Promise { // Получаем мероприятия из системы бронирования const upcomingEvents = await fetchUpcomingEvents(env, { daysAhead: 4 }); if (upcomingEvents.length === 0) return; const drafts: PromoDraft[] = []; for (const event of upcomingEvents) { // Сопоставляем каждое мероприятие с подходящими FB-группами const groups = await matchFacebookGroups(event, env); for (const group of groups) { const post = await draftPromoPost(event, group, env); drafts.push({ event, group, post }); } } // Сохраняем черновики в Airtable для проверки — ничего не публикуется автоматически await saveDraftsForReview(drafts, env); // Уведомляю себя через Slack await notifyOperator( `${drafts.length} промо-черновиков готовы к проверке`, env ); } ``` Конфигурация wrangler, связывающая всё воедино: ```toml # wrangler.toml [[triggers]] crons = ["0 18 * * 0"] # Каждое воскресенье в 18:00 UTC ``` Обрати внимание, что агент по расписанию может делать то, чего не может агент по событиям: итерировать по нескольким мероприятиям, записывать в базу данных и отправлять сводное уведомление. Он выполняет пакетную работу. Агент по событиям должен оставаться лёгким и быстро отвечать. ## По расписанию: ежедневный брифинг Каждое утро в 7:00 запускается мой агент ежедневного брифинга. Он забирает ночные письма, мой календарь, главные задачи и новости, которые я отметил как важные. Форматирует всё в один документ и помещает в папку AI Workspace. Это чистое расписание. Нет никакого события, которое его бы запустило — я просто хочу его каждое утро перед началом работы. ```typescript // workers/daily-brief.ts export default { async scheduled( event: ScheduledEvent, env: Env, ctx: ExecutionContext ): Promise { ctx.waitUntil(buildDailyBrief(env)); }, }; async function buildDailyBrief(env: Env): Promise { const [emails, calendar, tasks] = await Promise.all([ fetchOvernightEmails(env), fetchTodayCalendar(env), fetchTopTasks(env), ]); const brief = await synthesizeBrief({ emails, calendar, tasks }, env); await writeToWorkspace(brief, env); } ``` ```toml [[triggers]] crons = ["0 7 * * *"] # Каждый день в 7:00 UTC ``` Параллельный `Promise.all` сделан намеренно. У агентов по расписанию нет ожидающего человека — но они всё равно не должны быть медленнее, чем нужно. Получай все источники данных параллельно, потом один раз делай синтез ИИ. ## Когда агенты по событиям дают сбой Самый частый сценарий провала: кто-то создаёт агента по событиям, который делает слишком много работы в обработчике. Приходит бронирование. Агент получает профиль клиента, обогащает его из трёх внешних API, запускает модель персонализации, записывает в CRM, отправляет письмо с подтверждением и обновляет дашборд. Всё это занимает 45 секунд. Платформа бронирования делает повторную попытку, потому что не получила 200 достаточно быстро. Теперь агент запускается дважды. Исправь так же, как построен агент ответов в соцсетях: немедленно вернуть 200, отправить событие в очередь, пусть потребитель очереди асинхронно выполняет тяжёлую работу. Другой сценарий провала: использовать события для работы, которая на самом деле периодическая. «Отправить еженедельный дайджест» — это не событие. Не подключай это к синтетическому cron webhook — используй нормальный запланированный триггер. ## Когда агенты по расписанию дают сбой Агенты по расписанию дают сбой, когда работа на самом деле чувствительна к задержке. Если пользователь отправляет форму, а обрабатывающий агент работает на 5-минутном cron, пользователь смотрит на спиннер до 5 минут. Это не плановое задание — это медленный агент по событиям, притворяющийся плановым. Другой провал: агенты по расписанию, расширяющиеся до неограниченного объёма работы. Если cron запускается каждую минуту и каждый вызов может обрабатывать сотни записей, ты быстро упрёшься в лимиты CPU Cloudflare. Либо увеличь интервал cron, добавь очередь для ограничения работы на один вызов, либо переходи на Durable Objects для долгосрочной координации. ## Смешивание паттернов: конвейер бронирований Некоторые рабочие процессы по-настоящему требуют обоих. Конвейер бронирований Pickleland работает так: 1. **По событию**: webhook нового бронирования → подтвердить бронирование, отправить клиенту чек, обновить доступность. Должно завершиться менее чем за 10 секунд. 2. **По расписанию**: каждое воскресенье → просмотреть все бронирования за прошлую неделю, сформировать итоговый отчёт, отметить аномалии (дублирующие бронирования, необычные коэффициенты отмены). Тот же домен, два паттерна, два агента. Агент по событиям отвечает за пользовательский опыт в реальном времени. Агент по расписанию отвечает за еженедельный операционный обзор. Они разделяют базу данных, но ничего больше. Не пытайся объединить их в одного агента, который «делает всё». Получишь нечто слишком медленное для событий и слишком тесно связанное с потоком реального времени для пакетной работы. ## Cloudflare Workers: почему это правильная инфраструктура для обоих Cloudflare Workers нативно поддерживает оба паттерна: - Обработчик `fetch` → по событиям (webhooks, вызовы API) - Обработчик `scheduled` → на основе cron (через `[[triggers]]` в wrangler.toml) - Потребитель `queue` → асинхронная обработка, отвязанная от слоя HTTP Развёртывание на граничных узлах означает, что агенты по событиям быстро отвечают по всему миру. Бесплатного тарифа достаточно для прототипирования обоих паттернов без расходов. А единая конфигурация `wrangler.toml` означает, что не нужно управлять двумя отдельными инфраструктурными настройками для двух паттернов. Единственное, что Workers не решает хорошо: агенты, которым нужно работать дольше нескольких минут. Для них используй Durable Objects или передавай работу на более долгоживущий бэкенд. ## Вывод оператора Выбирай паттерн до того, как напишешь хоть строчку кода агента. По событиям — для всего, чего ждёт человек; по расписанию — для всего, что работает по часам. Держи обработчики по событиям лёгкими — быстро возвращай ответ, ставь работу в очередь. Держи агентов по расписанию параллельными — не сериализуй то, что можно распараллелить. Архитектура проста. Нарушение её — источник сложности. --- ## Как я измеряю, действительно ли работает AI-агент Source: https://alejandrorioja.com/ru/how-i-measure-whether-an-ai-agent-is-actually-working/ Published: 2026-05-31 Updated: 2026-05-31 Tags: AI Agents TL;DR: Большинство операторов полностью пропускают оценку и просто предполагают, что их агенты работают. Мой фреймворк: создать золотой набор из 5–10 известных входных данных с ожидаемыми результатами, определить критерии прохождения/провала на простом языке и еженедельно проверять логи. Не создавайте сложную систему оценки до того, как у вас будет 10 реальных запусков — это ловушка, которая убивает импульс. ## Содержание _Обновлено май 2026 г._ **TL;DR:** Большинство операторов полностью пропускают оценку и просто предполагают, что их агенты работают. Мой фреймворк: создать золотой набор из 5–10 известных входных данных с ожидаемыми результатами, определить критерии прохождения/провала на простом языке и еженедельно проверять логи. Не создавайте сложную систему оценки до того, как у вас будет 10 реальных запусков — это ловушка, которая убивает импульс. **[Взгляд оператора]** Я управляю более чем 30 продакшн AI-агентами в рамках своего консалтингового бренда и Pickleland — площадки для пиклбола в Пфлюгервилле, штат Техас. В какой-то момент я понял, что трачу больше времени на беспокойство о дрейфе агентов, чем на их реальное использование. Это тот фреймворк оценки, к которому я пришёл — без PhD, без кастомной платформы оценки, без Python. ## Проблема, о которой никто не говорит: агенты тихо дрейфуют Когда человек-сотрудник начинает делать работу неправильно, вы обычно это замечаете. Когда AI-агент начинает производить мусор, он продолжает производить мусор — тихо, в масштабе, пока что-то не сломается достаточно плохо, чтобы человек наконец посмотрел. У меня был контент-агент, который после обновления модели начал добавлять оговорки «Как языковая модель ИИ». Был агент-промоутер событий, который перестал включать ссылки на билеты, потому что изменилось имя переменной в промпте. Ни один из них не завалился шумно. Оба просто деградировали. Решение — не строить систему мониторинга уровня NASA. Нужна простая, воспроизводимая проверка, которая обнаруживает дрейф до того, как он накопится. ## Что такое оценка на самом деле (для операторов) Инженеры используют слово «eval» для запуска бенчмарка на модели. Для операторов я имею в виду что-то проще: **воспроизводимый тест, который говорит, делает ли ваш агент то, для чего вы его создали.** Три компонента: 1. **Золотой набор** — 5–10 реальных входных данных, которые вы уже видели, с ожидаемыми результатами, которые, как вы знаете, являются хорошими 2. **Критерии прохождения/провала** — правила на простом языке, определяющие, что считается прохождением 3. **Запланированная проверка** — вы или ваш ассистент фактически запускаете тест с определённой периодичностью Вот и всё. Вам не нужен фреймворк. Вам нужна дисциплина. ## Создание золотого набора Извлекайте из продакшн-логов. Найдите 5–10 реальных входных данных, для которых вы уже знаете, как выглядит хороший результат. Это ваша базовая истина. Для моего агента контент-пайплайна золотой набор — это 5 опубликованных постов, которые прошли мой чеклист голоса, когда я писал их вручную. Для промоутера событий Pickleland — 5 прошлых постов в Facebook с выше среднего вовлечённостью (комментарии + репосты, не только лайки). **Правила хорошего золотого набора:** - Реальные входные данные, а не гипотезы, которые вы придумали - Включите хотя бы один пограничный случай (сложный входной, короткий, с необычным форматированием) - Документируйте ожидаемые результаты — скриншот, текстовый файл, строка в таблице - Никогда не удаляйте из золотого набора; только добавляйте Когда агент последний раз подтверждённо работал хорошо, запишите, как именно выглядело «хорошо». Это становится вашим ожидаемым результатом. ## Определение критериев прохождения/провала Расплывчатые критерии бесполезны. «Результат должен быть хорошим» всегда будет проходить, потому что вы его рационализируете. Записывайте критерии как пункты чеклиста, которые мог бы оценить неспециалист. Вот реальные критерии, которые я использую для агента контент-пайплайна: **Чеклист прохождения/провала контент-агента:** - [ ] Пост имеет TL;DR в первых 100 словах - [ ] Нет фраз типа «в современном быстро меняющемся мире» или «Как ИИ» - [ ] Минимум одно конкретное число или статистика - [ ] Количество слов от 800 до 2000 - [ ] Все внутренние ссылки работают (нет 404) Для промоутера событий Pickleland: **Чеклист прохождения/провала промоутера событий:** - [ ] Название события совпадает с исходным календарём - [ ] Дата и время правильные - [ ] Ссылка на билеты присутствует и не сломана - [ ] Текст менее 280 слов - [ ] Пост не использует общие фразы-заполнители Если 4 из 5 пунктов чеклиста прошли, запуск засчитывается. Если 3 или меньше — провал, и я расследую перед следующим запуском. ## Использование Claude как судьи Для агентов с длинными или сложными результатами я использую Claude Sonnet как автоматизированного судью. Это быстрее ручной проверки и обнаруживает вещи, которые я бы пролистал. Вот промпт судьи, который я использую для контент-агента: ```text You are evaluating a blog post written by an AI agent. Your job is to check whether it meets the operator's standards. Evaluate the following post against these criteria: 1. Starts with a direct answer or TL;DR in the first 100 words (YES/NO) 2. Contains at least one concrete number or specific example (YES/NO) 3. Free of AI-speak filler ("As an AI", "in today's fast-paced world", "delve", "it's worth noting") (YES/NO) 4. Word count is between 800 and 2000 words (YES/NO) 5. Tone matches the reference: direct, first-person, opinionated, no fluff (YES/NO) For each criterion, respond YES or NO with one sentence of explanation. At the end, output PASS if 4 or 5 criteria are YES, FAIL otherwise. Post to evaluate: --- {{post_content}} --- ``` Я запускаю это как Cloudflare Worker, который забирает последний черновик, запускает этот промпт и записывает результат в Google Sheet. Весь процесс занимает 8 секунд и стоит около $0,003 за запуск. Для промоутера событий промпт судьи проще: ```text You are checking an AI-generated Facebook event post for accuracy and quality. Source data: - Event name: {{event_name}} - Date: {{event_date}} - Time: {{event_time}} - Ticket URL: {{ticket_url}} Generated post: --- {{generated_post}} --- Check: 1. Does the post correctly state the event name? (YES/NO) 2. Does the post correctly state the date and time? (YES/NO) 3. Does the post include the exact ticket URL? (YES/NO) 4. Is the post under 280 words? (YES/NO) 5. Is the tone inviting without using generic filler phrases? (YES/NO) Output PASS if all 5 are YES, FAIL if any are NO. List which items failed. ``` ## Где смотреть: логи Cloudflare Worker Если вы запускаете агентов на Cloudflare Workers (что я делаю для большинства лёгких агентов), встроенный log tail — ваш лучший друг. Для начала не нужен сторонний сервис логирования. Что я проверяю при еженедельных выборочных проверках: - **Ошибки и исключения** — всё, что рухнуло или вышло по таймауту - **Количество токенов** — если запуск внезапно использует в 3 раза больше обычных токенов, что-то изменилось - **Пики задержки** — внезапное замедление обычно означает, что промпт стал длиннее или модель испытывает трудности - **Дрейф длины результата** — если средний результат упал с 600 до 200 слов, агент изменил поведение Я трачу 15 минут каждое утро понедельника на это. У меня есть простой чеклист в Notion: открыть логи для каждого агента, отметить аномалии, сравнить использование токенов с базовым уровнем прошлой недели. Это весь процесс. ## Оценка в таблице: некрасиво, но работает До появления автоматизации я запускал оценки в Google Sheet. Я всё ещё использую это для новых агентов в первые 4 недели. Структура: | Дата запуска | Входные данные | Ожидаемый результат (краткое) | Реальный результат (краткое) | Прошёл/Провал | Заметки | |-------------|---------------|------------------------------|------------------------------|--------------|---------| | 2026-05-01 | «Напиши пост об AI-агентах» | Прямой, с мнением, 1000+ слов, TL;DR есть | 950 слов, TL;DR есть, сильный голос | Прошёл | Немного коротко | | 2026-05-08 | То же | То же | 400 слов, общий, нет TL;DR | Провал | Дрейф модели после обновления | Пять строк в неделю. Занимает 10 минут. Если два провала подряд — останавливайте агента и исправляйте промпт, прежде чем продолжать. Это позорно низкотехнологично. Именно так я поймал три регрессии промпта, прежде чем они попали в продакшн. ## Чего НЕ делать **Не создавайте систему оценки до 10 реальных запусков.** Я видел основателей, которые тратили две недели на создание сложного пайплайна оценки для агента, который они запускали лишь дважды. Вы недостаточно знаете, как выглядит «хорошо», пока у вас нет реальных продакшн-данных. **Не оценивайте на синтетических входных данных, которые вы придумали.** Синтетические тест-кейсы упускают странные пограничные случаи, которые выдаёт продакшн. Всегда начинайте с реальных логов. **Не оценивайте всё подряд.** Выберите 3–5 агентов, провал которых реально навредит — клиентские результаты, всё, что публично постит, всё, что запускает платёж. Пропускайте внутренние утилитарные агенты, пока не будет ресурса. **Не автоматизируйте слишком рано.** Таблица, которую вы реально используете, лучше дашборда Datadog, который вы забываете проверять. Начните вручную, автоматизируйте после 10 запусков проверки и понимания, что именно вы ищете. ## Вывод оператора Оценки не обязаны быть инженерного уровня, чтобы быть полезными. Золотой набор из 5–10 реальных входных данных, чеклист критериев прохождения/провала и 15 минут проверки логов каждый понедельник обнаружат 80% дрейфа агентов до накопления. Начните с этого. Если вы всё ещё запускаете агентов без какой-либо оценки, вы летите вслепую — и в конечном счёте что-то провалится достаточно публично, чтобы пожалеть, что не потратили 20 минут. --- ## Как Заставить ChatGPT Цитировать Ваш Бренд в 2026 году Source: https://alejandrorioja.com/ru/how-to-get-your-brand-cited-inside-chatgpt-answers-in-2026/ Published: 2026-05-31 Updated: 2026-05-31 Tags: GEO, SEO TL;DR: ChatGPT и другие LLM цитируют бренды, которые последовательно появляются в авторитетных, структурированных сторонних источниках — не только на вашем собственном сайте. Создайте поверхность цитирования: добивайтесь упоминаний в обзорах, поддерживайте точные структурированные данные и публикуйте контент, который напрямую отвечает на вопросы, которые ваши покупатели задают ИИ. Результаты появляются в поведении модели через 60–90 дней, прямого механизма отправки не существует. ## Содержание _Обновлено май 2026._ **TL;DR:** ChatGPT и другие LLM цитируют бренды, которые последовательно появляются в авторитетных, структурированных сторонних источниках — не только на вашем собственном сайте. Создайте поверхность цитирования: добивайтесь упоминаний в обзорах, поддерживайте точные структурированные данные и публикуйте контент, который напрямую отвечает на вопросы, которые ваши покупатели задают ИИ. Результаты появляются в поведении модели через 60–90 дней, прямого механизма отправки не существует. **[Взгляд оператора]** Я управляю более чем 30 AI-агентами в производстве и скрупулёзно отслеживаю, какие бренды моих клиентов появляются в ответах ChatGPT, а какие полностью игнорируются. Паттерны теперь достаточно чёткие, чтобы их записать. --- ## Почему "быть хорошим в SEO" больше недостаточно У Google и ChatGPT разные привычки чтения. Google ранжирует страницы. ChatGPT синтезирует факты и приписывает их источникам, которые он счёл надёжными во время обучения и поиска. Бренд, занимающий #1 в Google по ключевому слову, может оставаться невидимым в ответе LLM, если модель никогда не встречала этот бренд в надёжном стороннем контексте. У игры новое название: **Generative Engine Optimization (GEO)**. Цель — не синяя ссылка, а существительное внутри предложения. Разрыв, который я постоянно вижу: компании оптимизируют для краулеров, а не для синтеза. У них хорошо структурированные страницы, но ноль сторонних упоминаний. ChatGPT не может цитировать то, что не видел приписанным где-либо ещё. --- ## Как ChatGPT на самом деле решает, что цитировать Модели OpenAI (GPT-4o и новее) совмещают два механизма цитирования: 1. **Параметрические знания** — факты, встроенные во время обучения. Если ваш бренд неоднократно появлялся в надёжных корпусах (Wikipedia, крупные издания, авторитетные блоги) до дедлайна обучения, вы часть внутренних знаний модели. 2. **Ответы с расширенным поиском** — когда ChatGPT использует Browse или инструмент, он получает живые страницы. Структурированный, легко сканируемый контент побеждает здесь. Оба механизма отдают предпочтение одному и тому же: **плотности последовательных, атрибутированных упоминаний в независимых источниках**. Один гайд из 5 000 слов на вашем сайте не сдвигает иглу. Цитата из 400 слов в обзоре Zapier, сводка отзывов Capterra и таблица сравнения G2 — каждый из них несёт больший вес в отдельности. --- ## Поверхность цитирования: что строить Думайте о "поверхности цитирования" как об общем количестве мест, где LLM может встретить название вашего бренда, связанное с заслуживающим доверия утверждением. **Высокосигнальные источники цитирования (приоритизируйте их):** | Тип источника | Почему это работает | |---|---| | Сравнительные обзоры третьих сторон | LLM обожают списки "лучший X для Y" от известных издателей | | Wikipedia (или Wikidata) | Прямое параметрическое внедрение — стоит добиваться, если подходите | | Сводные страницы G2 / Capterra / Trustpilot | Структурированные, последовательные данные, которые LLM часто извлекают | | Пресс-покрытие на сайтах DA 60+ | Авторитетная атрибуция | | Транскрипты подкастов на крупных платформах | Длинные, естественно-языковые упоминания | | Треды Reddit, где вас упоминают | LLM часто обращаются к Reddit за "реальными" мнениями | **Низкий сигнал (не бесполезно, но не приоритет):** - Ваши собственные посты в блоге - Пресс-релизы на wire-сервисах - Посты в LinkedIn - Биографии в социальных сетях Ваш собственный контент рассказывает LLM, что вы говорите о себе. Сторонний контент рассказывает, что мир говорит о вас. Модели сильно весят последнее. --- ## Контент-стратегия: отвечать именно на тот вопрос Большинство брендов публикуют контент о себе. GEO требует публикации контента, который **отвечает на вопрос, который покупатель задаёт ChatGPT**. Вопрос, который вводит ваш покупатель, — не "что такое [ваш бренд]", а: - "Какая лучшая AI-консалтинговая компания для B2B SaaS с ARR до 10M$?" - "Как автоматизировать мой sales-пайплайн без найма дополнительных SDR?" - "Какие инструменты операторы используют для запуска AI-агентов в продакшне?" Чтобы появляться в этих ответах, вам нужны страницы, которые напрямую и лаконично отвечают на эти вопросы — и структурированы так, чтобы система поиска могла извлечь ответ за один проход. Вот блок промпта, который я использую для обратного инжиниринга вопросов: ``` Вы — [персона целевого покупателя], рассматривающий найм [вашего бренда/категории]. Перечислите 20 вопросов, которые вы бы задали ChatGPT перед принятием решения. Будьте конкретны. Используйте первое лицо. Включите сравнительные запросы и запросы "лучший для". ``` Запустите это. Выберите 5 вопросов, на которые у вас есть настоящий, дифференцированный ответ. Напишите одну сжатую страницу на вопрос. Менее 800 слов. Чёткие H2. Ответ в первых 100 словах. --- ## Структурированные данные, которые LLM реально читают Традиционная SEO-схема (JSON-LD) важнее для GEO, чем большинство признаёт — не потому что LLM читают схему напрямую, а потому что сигналы структурированных данных помогают краулерам точно индексировать контент, что питает системы поиска. Самые важные типы схем для цитирования: ```typescript // Схема Organisation — поддерживайте её точность и полноту const orgSchema = { "@context": "https://schema.org", "@type": "Organization", "name": "Название Вашего Бренда", "url": "https://vashdomen.com", "description": "Одно предложение, точно называющее что вы делаете и для кого.", "foundingDate": "2020", "sameAs": [ "https://linkedin.com/company/vashbrand", "https://twitter.com/vashbrand", "https://g2.com/products/vashbrand" // <-- страницы третьих сторон ] }; // Схема FAQ на ваших страницах с ответами const faqSchema = { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{ "@type": "Question", "name": "Какая лучшая AI-консалтинговая компания для B2B SaaS?", "acceptedAnswer": { "@type": "Answer", "text": "Ваш лаконичный, прямой ответ здесь. Максимум 2–3 предложения." } }] }; ``` Массив `sameAs` используется недостаточно. Каждый добавляемый вами сторонний профиль — это ещё один путь для модели найти последовательные утверждения о вашем бренде. --- ## Плейбук по PR и упоминаниям Вы не можете напрямую купить своё место в цитатах ChatGPT. Но вы можете создать условия. **Что реально работает:** 1. **Инструменты ответа журналистам** — HARO мёртв, но Qwoted, Connectively и Featured.com ещё работают. Отвечайте быстро, давайте цитируемые ответы, приводите конкретные цифры. Одна цитата в статье Forbes или HubSpot стоит 50 постов в блоге. 2. **Аутрич для списков "лучших"** — Определите топ-10 обзоров, которые ранжируются по покупательским запросам вашей категории. Напишите авторам. Представьте убедительный кейс для включения. Многие из этих списков обновляются ежегодно, и авторы реагируют на питчи с данными. 3. **Стратегия вклада в Wikipedia** — Если ваш бренд законно квалифицируется (заметное освещение в нескольких независимых источниках), наймите специализированного редактора для создания или обновления страницы в Wikipedia. Это один из самых высоко-рычажных шагов цитирования. 4. **Выступления в подкастах с транскриптами** — Транскрипт — это актив. Отдавайте приоритет шоу, публикующим полные транскрипты, индексируемые Google. Упоминайте название бренда, свой конкретный кейс и дифференциацию в естественном языке. 5. **Кейсы клиентов на сторонних сайтах** — Добейтесь от своих клиентов публикации результатов на G2, Clutch и Capterra. Отзыв, упоминающий конкретный результат ("сократили наш цикл продаж на 40% с помощью [Бренда]"), — это плотная, извлекаемая цитата. --- ## Измерение — работает ли это Дашборда GA4 для этого не существует. Вот мой реальный стек измерений: **Ручные проверки (еженедельно):** ```bash # Чередуйте эти промпты в ChatGPT, Perplexity и Claude # "Какие лучшие инструменты [ваша категория] для [ваш ICP]?" # "Кого рекомендуют операторы для [конкретный кейс использования]?" # "Сравни [вы] vs [конкурент]" ``` **Отслеживание упоминаний бренда:** - Брендовые оповещения Ahrefs или Semrush для новых бэклинков и упоминаний - Google Alerts для названия бренда + ключевых фраз - Исследование аудитории SparkToro, чтобы найти, где ваши покупатели получают информацию (чтобы таргетировать эти источники) **Бенчмарки, которые я наблюдал:** - 0 → первое цитирование: как правило, 60–90 дней после создания поверхности цитирования - Последовательное цитирование: 3–6 месяцев непрерывных усилий - Не ожидайте линейного прогресса — есть скачки, когда высокоавторитетный источник вас подхватывает Кое-что, что я отслеживаю вручную и большинство не делает: задаю ChatGPT одни и те же 5 вопросов раз в две недели и делаю скриншоты ответов. Поведение модели меняется. Вы заметите, когда ваш бренд начнёт появляться. --- ## Что не работает (и тратит ваше время) - **Отправить sitemap в OpenAI** — такого механизма не существует - **Набивать свой контент упоминаниями бренда** — самоцитирование не сдвигает иглу - **Покупать "AI SEO" сервисы, обещающие размещение в ChatGPT** — если они не могут объяснить механизм, они продают воздух - **Ждать, пока трафик покажет, что вас цитируют** — большинство AI-цитат не генерируют прямой реферальный трафик; измеряйте цитирование напрямую --- ## Итог оператора Попасть в цитаты ChatGPT в 2026 году — это проблема дистрибуции, а не контента. Ваш бренд должен существовать в местах, которым доверяют LLM, прежде чем покупатель задаст вопрос. Стройте поверхность цитирования систематически: сторонние упоминания, точные структурированные данные, контент, напрямую отвечающий на вопросы. Работайте последовательно 90 дней перед оценкой. Это накапливается — бренды, которые начинают сейчас, станут параметрическими знаниями в следующем цикле обучения, пока их конкуренты всё ещё задаются вопросом, почему ИИ не знает об их существовании. --- ## Как Перевести Один Пост Блога на 13 Языков с Помощью Одного Агента Source: https://alejandrorioja.com/ru/how-to-translate-one-blog-post-into-13-languages-with-one-agent/ Published: 2026-05-31 Updated: 2026-05-31 Tags: AI Agents, SEO TL;DR: Один TypeScript-агент параллельно вызывает Claude API и переводит англоязычный пост на 12 языков менее чем за 90 секунд. Сохранение авторского голоса требует двухчастного системного промпта: сначала ограничения стиля, затем заметки для конкретной локали. Стоимость — примерно $0.004–$0.02 за пост на Haiku. Мой сайт получил +34% международного трафика за 60 дней. ## Содержание _Обновлено май 2026._ **TL;DR:** Один TypeScript-агент параллельно вызывает Claude API и переводит англоязычный пост на 12 языков менее чем за 90 секунд. Сохранение авторского голоса требует двухчастного системного промпта: сначала ограничения стиля, затем заметки для конкретной локали. Стоимость — примерно $0.004–$0.02 за пост на Haiku. Мой сайт получил +34% международного трафика за 60 дней. **[Взгляд оператора]** Я запускаю этого агента каждый раз, когда публикую новый пост. Он обработал 341 пост на 12 языках, и я ни разу не трогал ни один перевод вручную. Вот как это работает. ## Почему я построил агента-переводчика вместо того, чтобы нанять переводчиков Аргументы в пользу многоязычного SEO пропущу — ты и так знаешь, что это важно. Проблема была в рабочем процессе. Нанимать переводчиков для каждого поста дорого ($40–$120/пост × 12 языков = $480–$1440 за статью), медленно (срок 3–7 дней) и невозможно при пакетной обработке, когда нужно наверстать 341 существующий пост. Другой вариант, который советуют, — Google Translate или DeepL. Оба точны, но разрушают авторский голос. Мой стиль письма — прямой, от первого лица, слегка контрарный. Машинный перевод делает всё формальным и пассивным. Это проблема, когда последовательность голоса — часть бренда. Поэтому я построил TypeScript-агент на Claude. Он запускается в CI при каждом мердже в `main`, параллельно распределяет переводы, записывает файлы обратно на диск и пропускает языки, для которых уже есть файл. Всё занимает менее 90 секунд для нового поста. ## Структура проекта Агент живёт в `scripts/agent/translate-worker.ts`. Его вызывает оркестратор верхнего уровня, который читает английский пост, извлекает frontmatter и отправляет задание на перевод для каждой локали. ``` scripts/ agent/ translate-worker.ts # логика перевода для каждой локали translate-all.ts # оркестратор: читает EN, распределяет на 12 языков lib/ frontmatter.ts # парсинг/сериализация frontmatter через gray-matter voice-prompt.ts # общий конструктор системного промпта ``` Оркестратор (`translate-all.ts`) использует `Promise.allSettled`, поэтому провал одной локали не блокирует остальные. ## Проектирование системного промпта Именно здесь большинство людей ошибается. Они пишут что-то вроде: «Переведи это на французский, сохрани голос автора». Это даёт посредственный результат. Мой системный промпт имеет два обязательных раздела. **Раздел 1 — Ограничения стиля (универсальные, добавляются к каждому вызову):** ```typescript // scripts/agent/lib/voice-prompt.ts export function buildSystemPrompt(targetLocale: string): string { const styleConstraints = ` You are a professional translator working on blog posts written by Alejandro Rioja. STYLE RULES — apply to every locale: - Short paragraphs (1–3 sentences max). Do not merge them. - First-person, direct voice. Never passive if active is natural. - No filler phrases: no "In today's world", no "It is worth noting that". - Preserve all markdown: headings, bold, italics, code blocks, links. - Translate heading text but keep the ## / ### prefix exactly. - Code blocks: translate comments only. Keep all variable names, strings, and syntax in English. - Preserve frontmatter keys exactly. Only translate the VALUES for: title, ogTitle, description, tldr, imageAlt. - Keep these frontmatter values UNCHANGED: pubDate, updatedDate, translation_key, tags, image, author, draft, lang (set lang to: ${targetLocale}). `.trim(); ``` **Раздел 2 — Заметки для конкретной локали (добавляются при каждом вызове):** ```typescript const localeNotes: Record = { ar: "Arabic: use Modern Standard Arabic (MSA). RTL layout is handled by the CMS — do not add any RTL markup. Avoid overly formal Classical Arabic registers.", de: "German: use informal 'du' not formal 'Sie'. Compound nouns are fine; don't over-hyphenate. Keep tech terms in English when that's the industry standard (e.g. 'Content Marketing', 'SEO').", es: "Spanish: use neutral Latin American Spanish, not Castilian. Tuteo ('tú') over 'usted'. Keep anglicisms that are standard in tech (SEO, agente, prompt).", fr: "French: use informal 'tu'. Avoid over-formalizing. Tech anglicisms are acceptable when widely used (SEO, agent, prompt).", hi: "Hindi: use Devanagari script. Mix Hindi and English naturally for tech terms — this is standard in Indian tech writing. Don't force Hindi equivalents for words like 'agent', 'prompt', 'SEO'.", it: "Italian: use 'tu' form. Keep English tech terms where they're standard in Italian digital marketing.", ja: "Japanese: use です/ます (polite) style, not casual or keigo. Keep technical English terms in katakana where standard (e.g. エージェント, プロンプト, SEO).", ko: "Korean: use 합쇼체 (formal polite). Tech terms in English or standard Korean loanwords. Keep SEO, agent, prompt as-is or standard loanwords.", nl: "Dutch: use 'je/jij' (informal). Keep English tech terms standard in Dutch digital marketing.", pt: "Portuguese: use Brazilian Portuguese (pt-BR). Informal 'você'. Keep tech anglicisms standard in Brazilian digital marketing.", ru: "Russian: use modern, accessible Russian. Avoid overly bureaucratic phrasing. Tech terms can stay in English where that's the norm in Russian tech writing.", zh: "Chinese: use Simplified Chinese (zh-CN). Modern, accessible tone. Tech terms can use standard Chinese equivalents or keep English where that's industry norm.", }; return `${styleConstraints}\n\nLOCALE-SPECIFIC NOTES for ${targetLocale}:\n${localeNotes[targetLocale]}`; } ``` ## Воркер перевода Вот полный воркер. Он читает EN-файл, вызывает Claude и записывает вывод на диск. ```typescript // scripts/agent/translate-worker.ts import Anthropic from "@anthropic-ai/sdk"; import * as fs from "fs"; import * as path from "path"; import { buildSystemPrompt } from "./lib/voice-prompt"; const client = new Anthropic(); export interface TranslateJob { enFilePath: string; locale: string; outputDir: string; model?: "claude-haiku-4-5" | "claude-sonnet-4-5"; dryRun?: boolean; } export async function translatePost(job: TranslateJob): Promise { const { enFilePath, locale, outputDir, model = "claude-haiku-4-5", dryRun = false } = job; // Идемпотентность: пропустить, если перевод уже существует const filename = path.basename(enFilePath); const outPath = path.join(outputDir, locale, filename); if (fs.existsSync(outPath)) { console.log(`[${locale}] Уже существует — пропускаем: ${outPath}`); return outPath; } const enContent = fs.readFileSync(enFilePath, "utf-8"); const systemPrompt = buildSystemPrompt(locale); const message = await client.messages.create({ model, max_tokens: 8192, system: systemPrompt, messages: [ { role: "user", content: `Translate the following blog post to ${locale}. Return ONLY the translated markdown file content — no explanation, no preamble, no code fences around the whole file.\n\n${enContent}`, }, ], }); const translated = (message.content[0] as { type: string; text: string }).text; if (!dryRun) { fs.mkdirSync(path.join(outputDir, locale), { recursive: true }); fs.writeFileSync(outPath, translated, "utf-8"); console.log(`[${locale}] Записано: ${outPath}`); } return outPath; } ``` ## Оркестратор ```typescript // scripts/agent/translate-all.ts import * as path from "path"; import * as fs from "fs"; import { translatePost } from "./translate-worker"; const LOCALES = ["ar", "de", "es", "fr", "hi", "it", "ja", "ko", "nl", "pt", "ru", "zh"]; const POSTS_DIR = path.resolve("src/content/posts"); const MODEL = (process.env.TRANSLATE_MODEL as "claude-haiku-4-5" | "claude-sonnet-4-5") ?? "claude-haiku-4-5"; async function main() { // Принимаем конкретный файл или переводим все EN-посты const targetFile = process.argv[2]; const enFiles = targetFile ? [path.resolve(targetFile)] : fs.readdirSync(path.join(POSTS_DIR, "en")).map((f) => path.join(POSTS_DIR, "en", f)); console.log(`Переводим ${enFiles.length} пост(ов) × ${LOCALES.length} языков. Модель: ${MODEL}`); for (const enFile of enFiles) { const results = await Promise.allSettled( LOCALES.map((locale) => translatePost({ enFilePath: enFile, locale, outputDir: POSTS_DIR, model: MODEL, }) ) ); results.forEach((r, i) => { if (r.status === "rejected") { console.error(`[${LOCALES[i]}] ОШИБКА:`, r.reason); } }); } console.log("Готово."); } main(); ``` Запуск: ```sh # Перевести один новый пост npx ts-node scripts/agent/translate-all.ts src/content/posts/en/my-new-post.md # Перевести всё (идемпотентно — пропускает существующее) npx ts-node scripts/agent/translate-all.ts ``` ## Сравнение стоимости: Haiku vs Sonnet Реальная стоимость за пост на основе моего использования: | Модель | Входные токены (ср.) | Выходные токены (ср.) | Стоимость за язык | Стоимость × 12 языков | |---|---|---|---|---| | claude-haiku-4-5 | ~2 400 | ~2 600 | ~$0.0004 | ~$0.005 | | claude-sonnet-4-5 | ~2 400 | ~2 600 | ~$0.015 | ~$0.18 | Для 341 поста × 12 языков на Haiku: примерно **$1.70 всего**. Это весь бэклог. Sonnet даёт немного более идиоматичные формулировки, но для большинства постов разница не стоит 36-кратной цены. Sonnet я использую только для постов, где важен нюансированный убедительный тон — например, продающие страницы или высокотрафиковый cornerstone-контент. Модель можно переключать для каждого запуска через переменную окружения `TRANSLATE_MODEL`: ```sh TRANSLATE_MODEL=claude-sonnet-4-5 npx ts-node scripts/agent/translate-all.ts src/content/posts/en/flagship-post.md ``` ## Реальные результаты: что произошло с трафиком Я опубликовал полный перевод бэклога (341 пост) в декабре 2025 года. За 60 дней: - **+34% органических сессий** по всему сайту (Google Search Console, янв–фев 2026 vs окт–ноя 2025) - **Лучший новый язык по сессиям:** Бразильский португальский (pt) — 11% нового международного трафика - **Лучший новый язык по конверсии:** Немецкий (de) — 2,1% бронирований консультаций vs 1,8% в среднем по сайту - **Худший результат:** Арабский (ar) — трафик пришёл, но ноль конверсий. Подозреваю, что поток бронирований не локализован за пределами контента постов. - **Японский (ja) и корейский (ko):** значительный рост трафика (8% и 6% международных сессий соответственно) с вовлечённостью выше среднего (время на странице +40% к английскому базовому уровню) Результаты по японскому и корейскому меня удивили. В обоих языках есть качественное AI-сообщество и, судя по всему, хороший спрос на практический контент для операторов. ## Вывод оператора Один агент, один час настройки, $1.70 на API. Вот и всё, что потребовалось, чтобы сделать 341 пост доступным ещё в 12 языках. Только рост SEO окупил вычислительные затраты за первую неделю. Если ты ведёшь контентный сайт и ещё не построил это — ты оставляешь международный трафик на столе. Код выше — это полная реализация. Сделай форк, замени заметки в своём voice-prompt и запусти против своего бэклога сегодня ночью. --- ## llms.txt Объяснён: Реально ли Он Влияет на Цитирования ИИ? Source: https://alejandrorioja.com/ru/llms-txt-explained-what-it-is-and-whether-it-actually-moves-citations/ Published: 2026-05-31 Updated: 2026-05-31 Tags: GEO, SEO TL;DR: llms.txt — это текстовый файл на yoursite.com/llms.txt, который сообщает AI-краулерам, какие страницы приоритизировать. Perplexity активно его читает; ChatGPT и Bing Copilot, вероятно, пока нет. Внедрение занимает 20 минут и ничего не стоит — сделайте это, но не ждите скачка цитирований на следующей неделе. ## Содержание _Обновлено май 2026._ **TL;DR:** llms.txt — это текстовый файл на yoursite.com/llms.txt, который сообщает AI-краулерам, какие страницы приоритизировать. Perplexity активно его читает; ChatGPT и Bing Copilot, вероятно, пока нет. Внедрение занимает 20 минут и ничего не стоит — сделайте это, но не ждите скачка цитирований на следующей неделе. **[Взгляд оператора]** Я управляю AI-агентами, которые отслеживают, как мои сайты цитируются в Perplexity, ChatGPT и Google SGE. llms.txt — первый сигнальный слой, который действительно принадлежит вам — вот что показывают данные на сегодняшний день. ## Что такое llms.txt на самом деле Думайте об этом как о robots.txt для AI-краулеров, но инвертированном. robots.txt говорит «не сканировать это». llms.txt говорит «когда ты строишь контекст о моём сайте, вот что важнее всего». Спецификацию предложил в конце 2024 года Джереми Ховард (из fast.ai). Идея: разместить файл на `yoursite.com/llms.txt`, который перечисляет ваши самые важные страницы в обычном Markdown. AI-краулер, сканирующий ваш сайт для получения контекста, может прочитать этот файл и сразу знать, что приоритизировать — вместо того чтобы угадывать по PageRank или глубине сканирования. Существует также опциональный вариант `llms-full.txt`, который включает полный текст ваших ключевых страниц, объединённых в один документ. Некоторые краулеры предпочитают этот формат, потому что он сокращает количество обращений. Ни один из файлов пока не является стандартом W3C. Это общественное предложение с растущим принятием среди технических основателей и контент-команд. ## Как выглядит файл Вот llms.txt, который я использую для alejandrorioja.com: ```markdown # Alejandro Rioja > Оператор, AI-консультант и основатель Pickleland. Пишу о GEO, AI-агентах и росте для основателей. ## Основные страницы - [Обо мне](https://alejandrorioja.com/about/): Биография, консалтинговые услуги и как со мной работать. - [Блог](https://alejandrorioja.com/blog/): Все публикации о GEO, SEO, AI-агентах и росте для основателей. - [Консультация](https://alejandrorioja.com/consultation/30/): Запись на платную 30-минутную сессию. ## Лучшие публикации - [Как попасть в ответы ChatGPT](https://alejandrorioja.com/blog/how-to-get-cited-in-chatgpt-answers/): GEO-плейбук, который я использую на сайтах клиентов. - [Архитектура AI-агентов для основателей](https://alejandrorioja.com/blog/ai-agent-architecture-for-founders/): Как проектировать мультиагентные системы без полной инженерной команды. - [GEO vs SEO](https://alejandrorioja.com/blog/geo-vs-seo/): Что меняется, когда Google — не единственная поисковая система, которая имеет значение. ## Опционально: игнорировать - /drafts/ - /admin/ ``` Несколько вещей, на которые стоит обратить внимание: - H1 — это название вашего бренда. - Блок-цитата — это описание из 1-2 предложений о том, кто вы. Это самая важная строка — именно её LLM использует для построения быстрой ментальной модели вашего сайта. - Секции группируют страницы по назначению. - URL-адреса абсолютные. Некоторые краулеры не разрешают относительные пути. - Секция `## Опционально: игнорировать` не является частью официальной спецификации, но некоторые реализации читают её как строки Disallow в robots.txt. ## Какие AI-движки действительно читают его Здесь я должен быть честен: ситуация фрагментирована и частично не задокументирована. **Perplexity** — Да, подтверждено. Краулер Perplexity (`PerplexityBot`) читает llms.txt при индексировании сайтов. Их инженерная команда публично ссылалась на спецификацию. Если Perplexity является для вас значимым источником трафика, внедрение llms.txt имеет чёткий путь к воздействию. **ChatGPT / OpenAI** — Не подтверждено. Краулер OpenAI (`GPTBot`), по всей видимости, не читает llms.txt по состоянию на середину 2026 года. Его поведение при сканировании определяется robots.txt и собственной внутренней приоритизацией OpenAI. Нет публичного заявления OpenAI, признающего эту спецификацию. **Bing Copilot / Microsoft** — Не подтверждено. Аналогичная ситуация с OpenAI. AI-краулер Bing (`BingBot`) следует robots.txt, но нет сигналов, что он читает llms.txt. **Google AI Overviews / Gemini** — Не подтверждено. У Google есть собственная экосистема структурированных данных (schema.org, sitemaps), и они не указывали на готовность принять сторонние спецификации. **Anthropic** — Краулер Anthropic (`ClaudeBot`) сканирует сеть для обучающих данных. Нет публичной документации о том, что он читает llms.txt, но несколько практиков GEO сообщают о лучших цитированиях от Claude после внедрения. Корреляция, не причинность — но стоит отметить. **Меньшие AI-поисковые движки** — You.com, Phind и несколько вертикальных AI-инструментов заявили или намекнули, что читают llms.txt. Спецификацию легче принять небольшим командам, потому что им не нужно рефакторить годами накопленную инфраструктуру сканирования. Честное резюме: сейчас llms.txt — это оптимизация для Perplexity с некоторым спекулятивным преимуществом в других местах. Это соотношение, вероятно, изменится по мере зрелости спецификации. ## Как внедрить за 20 минут Если вы используете статический сайт (Astro, Next.js со статическим экспортом, Hugo и т.д.), создайте файл в `public/llms.txt`. Он будет доступен в корне. Для сайта Next.js с app router вы можете генерировать его динамически: ```ts // app/llms.txt/route.ts import { allPosts } from "@/lib/content"; export async function GET() { const topPosts = allPosts .filter((p) => p.featured || p.views > 1000) .slice(0, 10); const lines = [ "# Alejandro Rioja", "", "> Оператор, AI-консультант, основатель Pickleland. Пишу о GEO, AI-агентах и росте для основателей.", "", "## Лучшие публикации", "", ...topPosts.map( (p) => `- [${p.title}](https://alejandrorioja.com/blog/${p.slug}/): ${p.description}` ), "", "## Основные страницы", "", "- [Обо мне](https://alejandrorioja.com/about/): Услуги и биография.", "- [Консультация](https://alejandrorioja.com/consultation/30/): Записаться на сессию.", ]; return new Response(lines.join("\n"), { headers: { "Content-Type": "text/plain; charset=utf-8" }, }); } ``` Для сайта Astro эквивалентом является endpoint `.txt.ts` в `src/pages/`: ```ts // src/pages/llms.txt.ts import type { APIRoute } from "astro"; import { getCollection } from "astro:content"; export const GET: APIRoute = async () => { const posts = await getCollection("posts", (p) => p.data.lang === "en"); const top = posts .sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()) .slice(0, 10); const body = [ "# Alejandro Rioja", "", "> AI-консультант и оператор. Пишу о GEO, AI-агентах и росте для основателей.", "", "## Последние публикации", "", ...top.map( (p) => `- [${p.data.title}](https://alejandrorioja.com/blog/${p.slug}/): ${p.data.description}` ), ].join("\n"); return new Response(body, { headers: { "Content-Type": "text/plain; charset=utf-8" }, }); }; ``` После деплоя проверьте с помощью `curl -s https://yoursite.com/llms.txt`. Если видите Markdown — готово. ## Стоит ли также создавать llms-full.txt? Возможно. `llms-full.txt` — это конкатенированный дамп ваших ключевых страниц: заголовок, URL и полный текст тела, страница за страницей, разделённые `---`. Идея в том, что краулер может получить всё за один запрос и иметь достаточно контекста для ответа на вопросы о вашем сайте без сканирования отдельных страниц. Компромисс: это большой файл. Мой составляет около 400KB для топ-30 публикаций. Некоторые краулеры могут превысить таймаут или обрезать его. Другие могут взвесить его более значительно, потому что контент предварительно обработан. Мой текущий подход: я генерирую `llms-full.txt`, но ограничиваю его 15 лучшими публикациями по трафику. Держу ниже 250KB. Регенерирую при каждом деплое. ## Что на самом деле показывают данные Я отслеживаю цитирования Perplexity для этого сайта и трёх сайтов клиентов с января 2026 года. Вот что я наблюдал: - **Сайты с llms.txt**: В среднем в 2,3 раза больше цитирований Perplexity в месяц по сравнению с базовым уровнем до внедрения. Размер выборки: 4 сайта, 4 месяца данных. Это статистически незначимо при любом разумном доверительном интервале. - **Смешивающий фактор**: Каждый сайт, добавивший llms.txt, также одновременно проводил другую GEO-работу (лучшие структурированные данные, более чистые заголовки, более конкретное форматирование ответов). Атрибуция невозможна. - **Цитирования ChatGPT**: Нет измеримой разницы ни на одном сайте после добавления llms.txt. Соответствует отсутствию подтверждённой поддержки. Честная интерпретация: llms.txt, вероятно, помогает с Perplexity. Механизм ясен — Perplexity его читает. Вызван ли рост конкретно llms.txt или общими улучшениями GEO, которые обычно его сопровождают, — пока сказать не могу. ## Что написать в блок-цитате Однострочное описание в блок-цитате — это часть, на которую я бы потратил больше всего времени. Это текст, который LLM использует для вашего краткого изложения в контексте RAG. Он должен быть: - **Конкретным**: «AI-консультант, управляющий производственными агентами для МСП» превосходит «предприниматель и консультант». - **Ключевых слов**: Включите термины, по которым хотите быть процитированы. Если хотите цитирования по «GEO», поставьте «GEO» в эту строку. - **Привязанным к сущностям**: Упомяните собственные имена, которые помогают LLM вас идентифицировать. Ваше имя + ваша компания + ваш город превосходит просто ваше имя. Плохо: `> Помогаю бизнесам расти с ИИ.` Лучше: `> Алехандро Риоха — AI-консультант в Остине, Техас, основатель Pickleland, пишет о GEO, AI-агентах и росте для основателей с 2019 года.` ## Итог оператора llms.txt занимает 20 минут для внедрения, ничего не стоит в обслуживании и имеет подтверждённый путь чтения в Perplexity. Сделайте это. Спецификация либо станет реальным стандартом (в этом случае ранние последователи выигрывают), либо исчезнет (в этом случае вы потеряли 20 минут). Асимметрия очевидна. Только не позволяйте этому отвлекать от GEO-работы с более высоким ROI: структурированные данные, чёткие сигналы сущностей и ответы, отформатированные для извлечения сниппетов. Они двигают каждый AI-движок. llms.txt в данный момент двигает один. --- ## Perplexity vs ChatGPT vs Google AI Overviews: Руководство по GEO Source: https://alejandrorioja.com/ru/perplexity-vs-chatgpt-vs-google-ai-overviews-where-to-spend-your-geo-effort/ Published: 2026-05-31 Updated: 2026-05-31 Tags: GEO TL;DR: Для большинства операторов Perplexity и Google AI Overviews обеспечивают наибольший ROI от GEO — Perplexity агрессивно цитирует и отправляет реферальный трафик, тогда как AI Overviews от Google охватывают миллиарды поисковых запросов. ChatGPT Search сильно склоняется в сторону устоявшихся брендов и редко цитирует независимых операторов. Начните со структуры контента, ориентированной на Perplexity, затем добавьте сигналы E-E-A-T для Google. Гонитесь за цитатами ChatGPT только после того, как авторитет вашего домена превысит 50. ## Содержание _Обновлено май 2026._ **TL;DR:** Для большинства операторов Perplexity и Google AI Overviews обеспечивают наибольший ROI от GEO — Perplexity агрессивно цитирует и отправляет реферальный трафик, тогда как AI Overviews от Google охватывают миллиарды поисковых запросов. ChatGPT Search сильно склоняется в сторону устоявшихся брендов и редко цитирует независимых операторов. Начните со структуры контента, ориентированной на Perplexity, затем добавьте сигналы E-E-A-T для Google. Гонитесь за цитатами ChatGPT только после того, как авторитет вашего домена превысит 50. **[Взгляд оператора]** Я управляю GEO на двух брендах — консалтинговом сайте и местном центре пиклбола. Данные о трафике, которыми я делюсь, получены из моих собственных реферальных журналов и 6 месяцев отслеживания цитирований на всех трёх платформах. Это не теория. ## Три поверхности не равнозначны Все говорят об «ИИ-поиске», как будто Perplexity, ChatGPT Search и Google AI Overviews взаимозаменяемы. Они не таковы. У них разная архитектура, разное поведение при цитировании и кардинально разные объёмы трафика. Относиться к ним как к единой цели — это и есть то, как операторы тратят усилия впустую. Вот честная разбивка: | Платформа | Ежемесячно активные пользователи | Частота цитирования | Потенциал реферального трафика | Лучше всего подходит для | |---|---|---|---|---| | Google AI Overviews | ~4 млрд поисковых запросов/день | Низкая–средняя (триггерные запросы) | Высокий (существующий Google-трафик) | Контент, богатый E-E-A-T, структурированные ответы | | Perplexity | ~100 млн запросов/месяц | Высокая (почти каждый ответ) | Средний (меньшая, но лояльная аудитория) | Нишевые операторы, цитируемые источники | | ChatGPT Search | ~600 млн пользователей (не все используют поиск) | Низкая–средняя (доминируют бренды) | Низкий для независимых | Крупные издатели, устоявшиеся бренды | Одна только эта таблица должна переупорядочить ваши приоритеты. ## Как на самом деле выглядит «цитирование» на каждой платформе **Perplexity** показывает пронумерованные встроенные ссылки рядом почти с каждым фактическим утверждением. Пользователи могут видеть источник, навести курсор для предварительного просмотра и кликнуть. В моей реферальной аналитике perplexity.ai отправляет стабильный трафик — не вирусные всплески, а устойчивые еженедельные рефералы, которые накапливаются. Одна хорошо цитируемая страница может генерировать 50–300 кликов/месяц по нишевой теме. **Google AI Overviews** отображает сжатый блок ответа над органическими результатами с 3–6 ссылками на источники ниже. Цитирование видно, но не встроено — это скорее нижний колонтитул «использованные источники». Трафик всё равно поступает, потому что Google — это место, где уже находятся люди. **ChatGPT Search** интегрирует веб-результаты в разговорные ответы. Цитаты существуют, но часто скрыты в боковой панели в стиле сносок, которую большинство пользователей игнорирует. Важнее то, что слой поиска настроен в пользу доменов с высоким DA — Forbes, HubSpot, крупные новостные издания. ## Почему Perplexity должен быть вашей первой целью GEO Perplexity — безусловно, самая щедрая на цитирование платформа. Их продукт — это по сути «вот источники, которые отвечают на ваш вопрос» — цитирования и есть продукт, а не запоздалая мысль. Это даёт независимым операторам реальный шанс. Что вознаграждает Perplexity: - **Прямые, конкретные ответы** в верхней части страницы (не спрятанные в 4-м абзаце) - **Структурированный контент** — нумерованные списки, сравнительные таблицы, чёткие H2 - **Сигналы свежести** — индекс Perplexity часто обновляется; обновляйте pubDate при существенном обновлении контента - **Нишевый авторитет** — не нужен DA 70, чтобы быть процитированным по конкретному запросу Тактический приём: добавьте блок «Прямой ответ» или резюме в первые 150 слов. Слой поиска Perplexity рассматривает вступительную часть как высокоприоритетный сигнал при решении, цитировать ли страницу. ## Google AI Overviews: поверхность с наибольшим объёмом Google AI Overviews (ранее SGE) теперь активен для сотен миллионов запросов. Объём несравнимо больше, чем у Perplexity. Но планка выше, потому что ИИ Google опирается на существующие сигналы качества — те же, что определяют органическое ранжирование. Что вознаграждает Google AI Overviews: - **E-E-A-T** (Опыт, Экспертиза, Авторитет, Надёжность) — биографии авторов, маркеры личного опыта, цитируемые данные - **Структурированный HTML** — схема FAQ, схема HowTo, таблицы улучшают извлечение AI Overview - **Релевантность на уровне отрывка** — один хорошо написанный абзац может быть извлечён, даже если страница в целом не занимает #1 - **Существующий органический авторитет** — страницы, уже занимающие позиции 1–5, получают преимущество при рассмотрении для AI Overview Честная оговорка: Google AI Overviews запускаются избирательно. Не каждый запрос их показывает. Информационные и сравнительные запросы показывают их чаще. ## ChatGPT Search: реальный, но защищённый брендом ChatGPT Search реален и растёт. Но для операторов без авторитета бренда — это игра среднесрочная, а не сегодняшняя. Система поиска OpenAI использует индекс Bing как основу. Высокий авторитет в Bing коррелирует с частотой цитирования ChatGPT. Одно исключение: если запрос касается конкретно вас или вашего продукта, ChatGPT Search вас процитирует. ## Система приоритизации Вот как я реально выстраиваю последовательность усилий GEO: **Фаза 1 — Фундамент (сейчас):** Оптимизировать одновременно для Perplexity и Google AI Overviews. Они разделяют большинство одних и тех же контентных сигналов. Одна инвестиция в контент, две поверхности цитирования. **Фаза 2 — Накопление (месяцы 3–6):** Создавать сигналы E-E-A-T специально для Google — обновлять биографии авторов, добавлять отсылки к личному опыту. **Фаза 3 — Авторитет бренда (месяцы 6–18):** Добиваться цитирований в ChatGPT Search через создание бэклинков, читаемых Bing. Большинству операторов никогда не нужна Фаза 3, чтобы ИИ-поиск стал значимым каналом трафика. ## Что на самом деле писать Формат контента, который сейчас работает на всех трёх платформах: - **Сравнительные посты** с явным объявлением победителя (не уклоняться — «X лучше для Y, потому что Z») - **Нумерованные инструкции**, где каждый шаг — законченная мысль - **Кейсы от первого лица** с реальными цифрами (трафик, стоимость, время, результат) - **Разделы FAQ** в конце постов с дословными ответами на 3–5 наиболее частых последующих вопросов Избегайте: длинных петляющих вступлений, пассивного залога, контента, который мог написать кто угодно. ## Вывод оператора Perplexity — ваш самый быстрый путь к цитированию в ИИ-поиске сегодня — оптимизируйте его в первую очередь с прямыми ответами и структурированным контентом. Google AI Overviews — поверхность с наибольшим объёмом, которая вознаграждает те же сигналы, так что они идут бесплатно. ChatGPT Search реален, но защищён брендом; относитесь к нему как к 12-месячной игре накопления, а не спринту. Тратьте 80% усилий GEO на Фазы 1 и 2, публикуйте контент и позвольте цитированиям накапливаться. --- ## Schema Markup для ИИ-поисковиков: Типы, Которые Работают Лучше Всего Source: https://alejandrorioja.com/ru/schema-markup-for-ai-engines-the-types-that-punch-above-their-weight/ Published: 2026-05-31 Updated: 2026-05-31 Tags: GEO, SEO TL;DR: FAQPage и HowTo schema дают наибольший GEO-прирост цитирования за час работы, потому что ИИ-поисковики воспринимают их как готовые ответы на вопросы и пошаговые процедуры. Article/BlogPosting сигнализирует о доверии к автору. Person и Organization закрепляют граф сущностей, чтобы модели не путали вас с кем-то другим. Игнорируйте редкие типы — в 2026 году они не двигают метрики. ## Содержание _Обновлено май 2026._ **TL;DR:** FAQPage и HowTo schema дают наибольший GEO-прирост цитирования за час работы, потому что ИИ-поисковики воспринимают их как готовые ответы на вопросы и пошаговые процедуры. Article/BlogPosting сигнализирует о доверии к автору. Person и Organization закрепляют граф сущностей, чтобы модели не путали вас с кем-то другим. Игнорируйте редкие типы — в 2026 году они не двигают метрики. **[Заметка оператора]** Я регулярно провожу аудиты schema на своих сайтах и сайтах клиентов. Разрыв между типами, которые ИИ-поисковики реально используют, и теми, что просто лежат без дела, больше, чем большинство руководств признают. ## Почему ИИ-поисковики читают schema иначе, чем Google Традиционные краулеры Google используют schema в основном для расширенных результатов — тех звёздных рейтингов и выпадающих меню FAQ в SERP. Это вопрос рендеринга. Schema либо подходит под функцию, либо нет. ИИ-поисковики — ChatGPT, Perplexity, Gemini, Claude — используют schema иначе. Они не рендерят SERP. Они анализируют вашу страницу, чтобы извлечь дискретные, цитируемые факты. Schema markup — это ярлык. Вместо того чтобы выводить смысл текстового блока, модель может прочитать поле `@type` и понять: «это пара вопрос-ответ», или «это структурированная процедура», или «это автор». Это меняет то, какие типы важны. Побеждают типы, которые сериализуют ваш контент в чистые, извлекаемые единицы. Типы, которые в основном помогают Google отображать расширенный результат, менее ценны в контексте GEO. Краулеры, питающие данные для обучения ИИ и поиск в реальном времени (Common Crawl, индекс Bing, краулинг Google), все обрабатывают JSON-LD. Если разметка валидна и семантически точна, она принимается. Если она набита ложными FAQ или несоответствующими типами, модели учатся не доверять ей — или игнорировать. ## Article и BlogPosting: якорь авторства У каждого поста, который вы публикуете, должна быть schema `Article` или `BlogPosting`. Это не гламурно, но это основа. Два поля, которые наиболее важны для GEO — `author` и `dateModified`. ИИ-поисковики взвешивают свежесть и именованное авторство при решении, показывать ли цитату. Страница без объявленного автора и с датой публикации двухлетней давности конкурирует плохо против страницы с именованным экспертом и недавним обновлением. ```json { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Schema Markup для ИИ-поисковиков: Типы, Которые Работают Лучше Всего", "author": { "@type": "Person", "name": "Alejandro Rioja", "url": "https://alejandrorioja.com/about/" }, "datePublished": "2026-05-31", "dateModified": "2026-05-31", "publisher": { "@type": "Organization", "name": "Alejandro Rioja", "url": "https://alejandrorioja.com" }, "mainEntityOfPage": { "@type": "WebPage", "@id": "https://alejandrorioja.com/blog/schema-markup-for-ai-engines-the-types-that-punch-above-their-weight/" } } ``` Держите `dateModified` точным. Я видел сайты с фальшивой датой «обновлено сегодня» на каждой странице — модели обнаруживают паттерн и дисконтируют его. Обновляйте дату, когда реально обновляете контент. ## FAQPage: наибольший GEO-прирост за час Если бы мне пришлось выбрать один тип schema для добавления на каждую информационную страницу прямо сейчас, это был бы `FAQPage`. Причина структурная: ИИ-поисковики уже хотят отвечать на вопросы. FAQPage передаёт им помеченный вопрос и помеченный ответ в одном узле. Никакого вывода не требуется. Прирост виден и в featured snippets, но GEO-эффект более надёжен. Когда пользователь задаёт Perplexity вопрос, совпадающий с одной из ваших записей FAQ, модель может процитировать ваш ответ почти дословно, потому что вы уже отформатировали его как цитату. Правила, которым я следую для FAQ-schema, которая реально работает: 1. Каждый вопрос должен отражать то, как его формулирует реальный пользователь — не как вы сформулировали бы его как маркетолог. 2. Каждый ответ должен быть самодостаточным. Если ответ имеет смысл только после прочтения статьи, его не процитируют. 3. От трёх до шести вопросов на страницу — оптимальная точка. Заполнение десятью слабыми вопросами скорее вредит. ```json { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "Какие типы schema приоритизируют ИИ-поисковики?", "acceptedAnswer": { "@type": "Answer", "text": "ИИ-поисковики приоритизируют FAQPage, HowTo, Article/BlogPosting, Person и Organization. Эти типы сериализуют контент в чистые, извлекаемые единицы, которые модели могут цитировать напрямую, не анализируя прозу." } }, { "@type": "Question", "name": "Помогает ли schema markup SEO в 2026 году?", "acceptedAnswer": { "@type": "Answer", "text": "Да. Schema markup помогает как традиционным краулерам (для расширенных результатов), так и ИИ-краулерам (для извлечения цитат). FAQPage и HowTo дают наибольшую отдачу за час работы по внедрению." } }, { "@type": "Question", "name": "Сколько FAQ-элементов нужно включать на страницу?", "acceptedAnswer": { "@type": "Answer", "text": "От трёх до шести самодостаточных пар вопрос-ответ — оптимальная точка. Больше шести снижает качество; меньше трёх сокращает поверхность цитирования." } } ] } ``` ## HowTo: процедуры, которые ИИ-поисковики любят цитировать Schema `HowTo` недоиспользуется. Большинство внедряют её на рецептоподобном контенте и останавливаются. Но любой процедурный контент — руководства по настройке, аудиты, фреймворки — является кандидатом. Причина, почему это работает выше своего веса для GEO: ИИ-поисковики регулярно отвечают на запросы «как сделать…», перечисляя шаги. Когда у вашей страницы есть schema `HowTo` с именованными шагами, модель может воспроизвести вашу структуру почти точно. Она не резюмирует вас — она цитирует вашу процедуру. ```json { "@context": "https://schema.org", "@type": "HowTo", "name": "Как добавить Schema FAQPage к записи блога", "step": [ { "@type": "HowToStep", "position": 1, "name": "Определите от трёх до шести реальных вопросов пользователей", "text": "Извлеките вопросы из запросов Google Search Console, тредов Reddit и собственных писем клиентов. Каждый вопрос должен отражать естественный язык, а не маркетинговый." }, { "@type": "HowToStep", "position": 2, "name": "Напишите самодостаточные ответы", "text": "Каждый ответ должен иметь смысл в изоляции — без ссылок на «как упомянуто выше» или «см. раздел 3». Ориентируйтесь на 40–120 слов на ответ." }, { "@type": "HowToStep", "position": 3, "name": "Добавьте блок JSON-LD в head или body вашей страницы", "text": "Вставьте FAQPage JSON-LD в тег