robots.txt и sitemap.xml: полная настройка
Синтаксис robots.txt, что нельзя блокировать, директивы для AI-ботов, структура sitemap.xml, отправка в Google Search Console и типичные ошибки — практическая настройка.
Содержание
robots.txt и sitemap.xml — два первых файла, которые Googlebot проверяет при знакомстве с вашим сайтом. Первый говорит, что не трогать. Второй показывает, что стоит посмотреть. Вместе они управляют тем, как Google тратит crawl budget на вашем домене. Настроить их правильно — 30 минут работы, но ошибка в любом из них может заблокировать весь сайт или оставить сотни страниц вне индекса.
Полный контекст технического SEO — в разделе SEO. Здесь — конкретно robots.txt и sitemap.xml: синтаксис, что нельзя блокировать, директивы для AI-ботов, структура sitemap и отправка в GSC.
robots.txt: синтаксис и директивы
Файл robots.txt живёт в корне домена: https://example.com/robots.txt. Он не защищён паролем и доступен всем. Его размер не может превышать 500 КБ — Googlebot игнорирует остаток файла после этого порога.
Базовая структура
User-agent: *
Disallow: /admin/
Disallow: /cart/
Disallow: /checkout/
Disallow: /search/
Disallow: /?s=
Allow: /
Sitemap: https://example.com/sitemap.xml
Директивы:
| Директива | Что делает |
|---|---|
User-agent: * | Правило для всех ботов |
User-agent: Googlebot | Правило только для Googlebot |
Disallow: /path/ | Запретить сканирование этого пути |
Allow: /path/ | Явно разрешить (важно для исключений из широкого Disallow) |
Sitemap: | URL файла карты сайта |
Crawl-delay: 10 | Пауза между запросами в секундах (Googlebot игнорирует) |
Wildcard и точное совпадение
Robots.txt поддерживает два специальных символа:
*— любая последовательность символов$— конец URL
Примеры:
# Запретить все URL с параметром ?sort=
Disallow: /*?sort=
# Запретить URL, заканчивающиеся на .pdf
Disallow: /*.pdf$
# Запретить все страницы пагинации
Disallow: /blog/page/
# Разрешить только главную и /docs/, остальное запретить
Disallow: /
Allow: /$
Allow: /docs/
Важно: если есть и Disallow, и Allow для одного и того же URL, побеждает более специфичное правило. /admin/page.html с Disallow: /admin/ и Allow: /admin/page.html — страница будет разрешена (более длинное совпадение).
Несколько блоков User-agent
Можно написать отдельные правила для разных ботов:
User-agent: Googlebot
Disallow: /staging/
Allow: /
User-agent: Bingbot
Disallow: /staging/
Allow: /
User-agent: *
Disallow: /admin/
Disallow: /staging/
Googlebot и Bingbot следуют своим блокам. Остальные боты — блоку *.
Что НЕЛЬЗЯ блокировать
Самая частая ошибка — заблокировать ресурсы, без которых Google не может нормально отрендерить страницу.
Никогда не блокируйте:
- CSS-файлы — без стилей Google видит вёрстку страницы без форматирования и может счесть её mobile-unfriendly
- JavaScript-файлы — Googlebot рендерит JS через Chromium; заблокированный JS = невидимый контент
- Шрифты — влияют на рендеринг
/wp-content/uploads/— изображения WordPress/wp-content/themes/и/wp-content/plugins/— CSS и JS тем и плагинов
Проверка: Google Search Console → Settings → Crawl Stats → откройте «By response» и посмотрите, есть ли blocked resources. Ещё надёжнее — GSC → URL Inspection на произвольной странице → «View crawled page» → вкладка «More info» покажет blocked resources.
Что стоит блокировать:
Disallow: /admin/
Disallow: /wp-admin/
Disallow: /wp-login.php
Disallow: /cart/
Disallow: /checkout/
Disallow: /account/
Disallow: /my-account/
Disallow: /thank-you/
Disallow: /search/
Disallow: /?s=
Disallow: /internal-preview/
Это страницы с дублирующимся или нерелевантным контентом, которые только съедают crawl budget.
AI-боты: современная политика
С 2023 года в robots.txt появились новые User-agent — от AI-компаний, собирающих данные для обучения моделей. Определите свою позицию явно, иначе они сканируют по умолчанию.
Основные AI-боты
| User-agent | Компания | Что делает |
|---|---|---|
GPTBot | OpenAI | Собирает данные для обучения ChatGPT |
Google-Extended | Данные для Gemini/Bard (отдельно от Googlebot) | |
ClaudeBot | Anthropic | Данные для Claude |
CCBot | Common Crawl | Открытый датасет для ML |
PerplexityBot | Perplexity AI | AI-поисковик |
Applebot-Extended | Apple | Данные для Apple Intelligence |
Вариант 1: заблокировать всех AI-ботов
# SEO-боты — полный доступ
User-agent: Googlebot
Allow: /
User-agent: Bingbot
Allow: /
# AI обучение — заблокировать
User-agent: GPTBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: PerplexityBot
Disallow: /
User-agent: Applebot-Extended
Disallow: /
# Остальные
User-agent: *
Disallow: /admin/
Важно: Google-Extended — отдельный User-agent от Googlebot. Блокировка Google-Extended не влияет на SEO-индексацию. Но блокировка Googlebot по ошибке = катастрофа.
Вариант 2: разрешить AI-поисковики, заблокировать training
Некоторые владельцы сайтов хотят появляться в Perplexity или ChatGPT Browse, но не хотят, чтобы контент использовался для обучения. Проблема: сейчас нет надёжного способа разделить «browse» и «train» через robots.txt — одни и те же боты выполняют обе функции.
Проверьте Robots.txt Tester чтобы убедиться, что ваши директивы срабатывают правильно.
robots.txt и canonical/noindex: что важнее
Критическое понимание: robots.txt блокирует сканирование, но не индексацию.
| Директива | Блокирует сканирование | Блокирует индексацию |
|---|---|---|
Disallow: в robots.txt | Да | Нет |
<meta name="robots" content="noindex"> | Нет | Да |
X-Robots-Tag: noindex (HTTP-заголовок) | Нет | Да |
Если вы хотите, чтобы страница не была в Google — ставьте noindex, не Disallow. Если вы поставили Disallow, но на эту страницу ведут ссылки с других сайтов, Google увидит URL и может показать её в результатах как «No information available» — без заголовка и сниппета.
Есть и обратная проблема: если страница заблокирована в robots.txt, Googlebot не может прочитать noindex на ней. Поэтому если хотите и заблокировать сканирование, и исключить из индекса — сначала дождитесь, пока Google удалит её из индекса (через noindex), потом добавляйте Disallow.
sitemap.xml: структура и формат
Sitemap.xml — XML-файл со списком URL для индексации. Он не гарантирует индексацию, но ускоряет обнаружение новых страниц и сигнализирует Google, что эти URL важны.
Минимальный валидный файл
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2026-06-24</lastmod>
</url>
<url>
<loc>https://example.com/seo/robots-txt-guide/</loc>
<lastmod>2026-06-24</lastmod>
</url>
</urlset>
Обязательно: <loc> с абсолютным URL. Остальное — опционально.
Все теги и что они означают
<url>
<!-- Обязательно: полный абсолютный URL -->
<loc>https://example.com/page/</loc>
<!-- Дата последнего реального изменения (ISO 8601) -->
<!-- Полезный сигнал для Googlebot -->
<lastmod>2026-06-24</lastmod>
<!-- Частота изменений. Google в основном игнорирует -->
<!-- Допустимые: always, hourly, daily, weekly, monthly, yearly, never -->
<changefreq>monthly</changefreq>
<!-- Относительная важность от 0.0 до 1.0. Google в основном игнорирует -->
<priority>0.8</priority>
</url>
<changefreq> и <priority> Google официально подтвердил как «mostly ignored». Не тратьте время на их тонкую настройку. Сосредоточьтесь на <lastmod> — он действительно используется.
Что включать и что не включать
Включайте:
- Страницы с HTTP 200
- Canonical-версии URL (не дубли с параметрами)
- Страницы без
noindex - Страницы, доступные без авторизации
НЕ включайте:
- URL с
noindex - URL с redirect (301/302)
- Страницы, возвращающие 404 или 5xx
- Дубликаты с UTM-параметрами (
?utm_source=email) - Страницы пагинации (опционально — зависит от стратегии)
/admin/,/cart/,/checkout/
Включение URL с redirect или noindex в sitemap — классическая ошибка. Google воспринимает это как противоречивый сигнал: «ты просишь меня проиндексировать это, но тут стоит noindex». Результат — сниженное доверие ко всему sitemap.
Sitemap index для больших сайтов
Если URL больше 50 000 или хотите удобную структуру — используйте sitemap index:
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://example.com/sitemap-posts.xml</loc>
<lastmod>2026-06-24</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap-products.xml</loc>
<lastmod>2026-06-24</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap-categories.xml</loc>
<lastmod>2026-06-24</lastmod>
</sitemap>
</sitemapindex>
Лимит sitemap index — 50 000 дочерних sitemap-файлов. Лимит каждого дочернего — 50 000 URL или 50 МБ.
Специализированные sitemap
Помимо текстовых URL можно добавлять дополнительные данные для медиаконтента:
Image sitemap (расширение namespace):
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>https://example.com/article/seo-guide/</loc>
<image:image>
<image:loc>https://example.com/images/seo-guide-cover.jpg</image:loc>
<image:title>Пошаговый гайд по SEO</image:title>
</image:image>
</url>
</urlset>
Video sitemap и News sitemap — аналогичная структура со своими namespace. Google использует их для Google Images, Google Videos и Google News соответственно.
Как отправить sitemap в Google Search Console
Отправка sitemap в GSC — обязательный шаг для каждого сайта. Она ускоряет первое сканирование и даёт постоянный мониторинг статуса.
Пошаговый процесс
- Откройте Google Search Console и выберите нужный сайт.
- В левом меню — раздел «Sitemaps» (в блоке «Indexing»).
- В поле «Add a new sitemap» введите URL файла — можно относительный (
sitemap.xml) или абсолютный (https://example.com/sitemap.xml). - Нажмите «Submit».
- GSC покажет статус: «Success» или ошибку парсинга.
Что показывает GSC после отправки
| Показатель | Что означает |
|---|---|
| Discovered URLs | Сколько URL найдено в файле |
| Indexed | Сколько из них реально в индексе Google |
| Last read | Когда Google последний раз читал файл |
| Status: Success/Error | Есть ли ошибки парсинга XML |
Разница между «Discovered» и «Indexed» — нормальная. Google не индексирует всё, что вы просите. Страницы с тонким контентом, дубли, страницы с плохим UX — отфильтровываются.
Sitemap в Bing Webmaster Tools
Bing / DuckDuckGo — отдельный индекс. Отправьте sitemap и там:
- Bing Webmaster Tools → ваш сайт.
- «Sitemaps» → «Submit sitemap».
- Введите URL и подтвердите.
Bing также поддерживает IndexNow API — протокол мгновенного уведомления о новых URL без ожидания краулера. Некоторые CMS-плагины (например Rank Math для WordPress) отправляют уведомления через IndexNow автоматически.
Связь между robots.txt и sitemap
Самый простой способ сообщить всем ботам о вашем sitemap — строка Sitemap: в robots.txt:
User-agent: *
Disallow: /admin/
Sitemap: https://example.com/sitemap.xml
Sitemap: https://example.com/sitemap-images.xml
Можно указать несколько строк Sitemap. Это находит Googlebot при первом краулинге ещё до того, как вы отправили sitemap через GSC.
Полная схема взаимодействия файлов:
Googlebot приходит на сайт
↓
Читает robots.txt:
- находит правила Disallow/Allow
- находит строку Sitemap
↓
Загружает sitemap.xml
↓
Обходит URL из списка (где разрешено)
↓
Проиндексированные страницы → Google Search
Типичные ошибки и как их избежать
1. Disallow: / для всех после переноса сайта
Самая распространённая и деструктивная ошибка. Стейджинг-сервер обычно имеет Disallow: / чтобы не попасть в индекс. При переносе на продакшн — забыли убрать.
Результат: через 1-2 недели сайт выпадает из Google. Симптом в GSC: Pages → «Blocked by robots.txt» начало резко расти.
Проверка после каждого деплоя: https://yoursite.com/robots.txt — первая строка после User-agent: * не должна быть Disallow: /.
2. Блокировка CSS и JavaScript
# ПЛОХО — Google не рендерит страницу нормально
User-agent: *
Disallow: /wp-content/
Эта строка блокирует и uploads (изображения), и themes (CSS), и plugins (JS). Google рендерит страницу без стилей и скриптов — Mobile Usability report показывает «Content wider than screen», «Text too small».
3. Sitemap содержит redirect-URL или noindex-страницы
Пример: после редизайна старые URL получили 301 на новые, но старый sitemap не обновили. Теперь Google видит в sitemap страницы, которые сами говорят «я не здесь».
Проверка: проверяйте статус-коды URL в вашем sitemap раз в месяц. Screaming Frog или Ahrefs Site Audit делает это автоматически.
4. Отсутствующий lastmod или фиктивная дата
Ставить <lastmod>2026-06-24</lastmod> на всех страницах при каждом обновлении sitemap — это обман краулера. Google учится игнорировать такой сигнал.
Правильно: <lastmod> обновляется только для страниц, на которых реально изменился контент.
5. robots.txt без Allow: / при широком Disallow
# ОПАСНО — всё заблокировано?
User-agent: *
Disallow: /private/
На самом деле это нормально — Disallow блокирует только /private/, остальное разрешено по умолчанию. Но Allow: / в конце — явное подтверждение для читабельности и чтобы избежать ошибок.
6. Несколько Disallow вместо wildcard
# Долго и что-то забудете
Disallow: /?color=red
Disallow: /?color=blue
Disallow: /?color=green
# Лучше
Disallow: /?color=
Или: если у вас сотни параметров URL (e-commerce фильтры) — не перечисляйте их в robots.txt, лучше поставьте canonical на основные URL и noindex на отфильтрованные страницы.
7. Забыли заблокировать внутренний поиск
WordPress: /search/ и /?s= дают бесконечное количество уникальных URL с разными поисковыми запросами. Если их не заблокировать, Google может индексировать тысячи страниц «результатов поиска» с никчёмным контентом.
Disallow: /search/
Disallow: /?s=
8. AI-бот директивы после User-agent: *
# НЕПРАВИЛЬНО — Google-Extended попадает под User-agent: *
User-agent: *
Disallow: /
User-agent: Google-Extended
Disallow: /
Robots.txt обрабатывается сверху вниз. Googlebot видит User-agent: * и применяет Disallow: / — весь сайт заблокирован. Всегда прописывайте User-agent: Googlebot + Allow: / явно в отдельном блоке, прежде чем ставить глобальные ограничения.
Проверка настроек
Чек-лист перед запуском
-
https://yoursite.com/robots.txtвозвращает 200, не redirect и не 404 - Первая строка после
User-agent: *— НЕDisallow: / - CSS, JS, fonts и /uploads/ НЕ заблокированы
-
User-agent: GooglebotсAllow: /есть явно, если есть другие ограничительные блоки - AI-бот директивы написаны — или разрешить, или заблокировать, осознанно
- Строка
Sitemap:указывает на правильный URL - Sitemap.xml возвращает 200 и является валидным XML
- Sitemap содержит только 200-страницы без noindex и без redirect
-
<lastmod>в sitemap — реальные даты изменений - Sitemap отправлен в Google Search Console и Bing Webmaster Tools
Инструменты для проверки
- Robots.txt Tester — проверьте конкретные URL на разрешённость
- Google Search Console → URL Inspection — реальный статус сканирования
- Google Search Console → Sitemaps — статус обработки и количество URL
- SEO Audit Checklist — полный чек-лист технического аудита
Если вы настраиваете сайт с нуля или после переноса — пройдитесь по чек-листу полностью. Два файла, robots.txt и sitemap.xml, занимают 30 минут на правильную настройку и потенциально спасают от месяцев проблем с индексацией.
Связанные материалы:
- Техническое SEO: полное руководство — crawling, indexing, CWV, hreflang
- Robots.txt Tester — проверка синтаксиса онлайн
- SEO Audit Checklist — полный пошаговый аудит сайта
Похожие статьи
Техническое SEO: полное руководство с чего начать — индексация, Core Web Vitals, schema.org, hreflang
Пошаговое руководство по техническому SEO для начинающих: crawling, indexing, robots.txt, sitemap.xml, canonical, hreflang, Core Web Vitals (LCP/INP/CLS), schema.org, mobile-first и типичные ошибки.
ToolsRobots.txt Tester — проверка правил сканирования
Бесплатный онлайн-тестер robots.txt: проверяет разрешение на сканирование URL для 16 поисковых и AI-ботов (Googlebot, Bingbot, GPTBot, ClaudeBot), показывает правило и строку.
SeoCore Web Vitals: как измерить и улучшить
LCP, INP, CLS — пороги, инструменты измерения (PageSpeed Insights, CrUX, Lighthouse, web-vitals JS) и конкретные способы улучшить каждую метрику.