Это практическое дополнение к нашей статье о том, почему AI-поиск цитирует одни местные компании и игнорирует другие. Пять проверок в том порядке, который важен: сначала доступ краулеров, потом разметка, llms.txt в самом конце. Каждая команда работает в обычном терминале на macOS или Linux либо в Git Bash на Windows.
Везде ниже замените https://www.example.com на свой адрес. Все названия, номера и адреса в шаблонах это примеры, их нужно заменить вашими настоящими данными.
Шаг 1. Спросите сайт, кого он пускает
Серверы и файрволы обычно фильтруют по имени в user agent, поэтому чтобы воспроизвести блокировку, достаточно отправить имя. Запустите это и прочитайте коды:
for ua in OAI-SearchBot GPTBot ChatGPT-User Claude-SearchBot ClaudeBot Claude-User PerplexityBot Googlebot AdsBot-Google bingbot; do
printf '%-18s ' "$ua"
curl -s -o /dev/null -w '%{http_code}\n' -A "Mozilla/5.0 (compatible; $ua)" https://www.example.com/
done
Что означают коды:
| Код | Значение | Что делать |
|---|---|---|
| 200 | Бот получает страницу | Ничего |
| 301 / 302 | Редирект | Запустить ещё раз с конечным адресом |
| 403 | Сервер отказывает этому боту | Найти фильтр в настройках хостинга или файрвола |
| 429 | Слишком много запросов | Подождать минуту и проверять по одному боту |
403 для OAI-SearchBot означает, что поиск ChatGPT ваш сайт не покажет. 403 для Claude-SearchBot может снизить видимость в поисковых ответах Claude. 403 для Googlebot, AdsBot или bingbot в этом тесте это предупреждение, а не доказательство: некоторые файрволы отклоняют любого, кто называет себя Googlebot, но приходит не с адреса Google. Такие случаи подтвердите через «Проверку URL» в Search Console.
В нашем сканировании ста сайтов таллинских компаний семь отвечали Claude-SearchBot кодом 403, хотя их robots.txt разрешал всё. Фильтр жил в хостинг-аккаунте, так что решением было обращение в поддержку, а не правка кода.
Шаг 2. Проверьте, что несуществующие страницы действительно не существуют
curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/this-page-does-not-exist-7f3k
curl -s -o /dev/null -w '%{http_code} %{content_type}\n' https://www.example.com/llms.txt
Первая строка должна вывести 404. Если она выводит 200, сайт сообщает каждому краулеру, что битые ссылки это настоящие страницы. Вторая строка показывает, есть ли /llms.txt: настоящий файл отдаёт 200 с типом text/plain или text/markdown. 200 с типом text/html значит, что CMS вместо файла отдаёт какую-то страницу. Так было на десяти сайтах из ста.
Шаг 3. robots.txt, который говорит то, что вы имеете в виду
Поисковые краулеры и краулеры для обучения разные. Можно разрешить поиск и при этом отказаться от обучения. AdsBot игнорирует User-agent: * и подчиняется только правилам, где он назван, поэтому не пишите для него правило, если не хотите его заблокировать на самом деле.
User-agent: *
Allow: /
# Необязательно: отказ от обучения моделей, AI-поиск остаётся
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: CCBot
Disallow: /
Sitemap: https://www.example.com/sitemap.xml
Три блока про обучение это бизнес-решение, а не рекомендация. И OpenAI, и Anthropic пишут, что блокировка GPTBot или ClaudeBot не закрывает сайт от их поисковых краулеров, OAI-SearchBot и Claude-SearchBot. Если причины блокировать нет, уберите эти блоки.
Шаг 4. Разметка LocalBusiness, которая совпадает со страницей
Руководство Google просит использовать самый точный подходящий подтип (Plumber, Electrician, Locksmith, Dentist, AutoRepair и так далее), а поля name и address обязательны. Всё, что есть в разметке, должно быть видно и на странице. Вставьте это в head главной или в конец body:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Plumber",
"@id": "https://www.example.com/#business",
"name": "Пример Сантехника OÜ",
"url": "https://www.example.com/",
"telephone": "+372 5000 0000",
"email": "info@example.com",
"image": "https://www.example.com/images/team.jpg",
"priceRange": "от 45 €",
"address": {
"@type": "PostalAddress",
"streetAddress": "Example tn 1",
"addressLocality": "Tallinn",
"postalCode": "10111",
"addressCountry": "EE"
},
"geo": { "@type": "GeoCoordinates", "latitude": 59.43696, "longitude": 24.75357 },
"areaServed": [
{ "@type": "City", "name": "Tallinn" },
{ "@type": "AdministrativeArea", "name": "Harju maakond" }
],
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "08:00",
"closes": "18:00"
}],
"sameAs": [
"https://www.facebook.com/primersantehnika",
"https://www.google.com/maps?cid=0000000000000000000"
]
}
</script>
Правила, которые избавят от отказа:
- Телефон с кодом страны, тот же номер, что и в видимом подвале сайта.
- У координат не меньше пяти знаков после запятой. Скопируйте их с метки вашего профиля компании в Google.
priceRangeкороче 100 символов, иначе Google его отбросит.- Для собственной компании не добавляйте
aggregateRating. Руководство Google по местным компаниям оставляет разметку отзывов сайтам, которые оценивают другие компании. - В
sameAsтолько профили, которые существуют и принадлежат вам. Самая полезная ссылка на профиль компании в Google.
Проверьте страницу в Rich Results Test от Google и в Schema Markup Validator. Исправьте всё, что отмечено как ошибка. Потом проверьте живой URL в Search Console, чтобы убедиться, что Google видит ту же разметку.
Шаг 5. Короткий llms.txt
llms.txt это предложение 2024 года, а не стандарт, и Google не использует его для AI Overviews. На него уходит десять минут, поэтому он идёт последним. Формат: один H1 с названием, описание в один абзац в виде цитаты, потом разделы H2 со ссылками. Сохраните как обычный текст по адресу /llms.txt:
# Пример Сантехника OÜ
> Ремонт и монтаж сантехники в Таллине и Харьюмаа. Пн–Пт 08:00–18:00, телефон +372 5000 0000. Цены от 45 €, итоговая цена после осмотра.
## Услуги
- [Устранение протечек](https://www.example.com/ru/protechki): выезд по Таллину, цены от 45 €
- [Установка бойлера](https://www.example.com/ru/boilery): поставка и монтаж, сначала письменное предложение
## Компания
- [Контакты и зона работы](https://www.example.com/ru/kontakty): адрес, часы работы, районы
- [Цены](https://www.example.com/ru/ceny): стартовые цены на частые работы
## Optional
- [Блог](https://www.example.com/ru/blog): советы по обслуживанию
Каждый факт в файле должен совпадать с сайтом и разметкой. Три источника, которые спорят о ваших часах работы, хуже одного правильного.
Шаг 6. Повторяйте после каждого изменения
Переезд на другой хостинг, новые правила файрвола и обновления плагинов CMS как раз те моменты, когда сайты оказываются заблокированы и никто этого не замечает. Запускайте шаги 1 и 2 после каждого такого события и в любом случае раз в месяц. Наша бесплатная быстрая оценка ниже тоже отмечает главную без структурированных данных, разметку, в которой компания ни разу не названа, и главную без ссылок на телефон или почту.
Частые вопросы
Какой подтип LocalBusiness выбрать?
Самый точный из тех, что schema.org предлагает для вашей деятельности: Plumber, Electrician, Locksmith, Dentist, AutoRepair, HairSalon и так далее. Google советует самый точный подтип и принимает массив, если подходит несколько.
Можно ли добавить звёзды рейтинга в разметку своей компании?
Руководство Google по местным компаниям рекомендует разметку aggregateRating и review только сайтам, которые собирают отзывы о других местных компаниях. Для своей компании её лучше не добавлять.
Уберёт ли блокировка GPTBot меня из ChatGPT?
Из поиска ChatGPT нет. OpenAI использует для поиска OAI-SearchBot, а для обучения GPTBot, и описывает эти две настройки как независимые.
Куда положить llms.txt?
В корень домена, по адресу /llms.txt, как обычный текст. Запрос к нему не должен возвращать главную страницу или HTML-страницу ошибки с кодом 200.
Проверьте свой сайт бесплатно
Тот же движок, что стоит за этой статьёй, сделает 50-балльную быструю проверку вашей главной страницы примерно за 30 секунд — бесплатно, без аккаунта.
Запустить быструю проверкуСначала посмотреть настоящий пример аудита