# robots-txt

## Что такое robots.txt?

`robots.txt` — текстовый файл по адресу `/robots.txt` с директивами для поисковых ботов и AI-краулеров: какие страницы разрешено или запрещено посещать.

Стандарт формализован в RFC 9309 (2022). Существует с 1994 года и поддерживается всеми поисковиками и большинством AI-ботов.

## Зачем сайту robots.txt?

Без `robots.txt` AI-боты (GPTBot, ClaudeBot, PerplexityBot) не знают, куда им можно, куда нельзя. Файл решает четыре задачи:

1. Явно разрешить AI-ботам индексировать публичный контент
2. Запретить индексацию чувствительных путей (`/admin/`, `/api/private/`)
3. Указать на sitemap через директиву `Sitemap:`
4. Добавить [Content-Signal](/glossary/content-signals) для декларации согласия на AI-использование

Пример корректного `robots.txt` для [GEO](/glossary/geo):

```
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /api/private/

User-agent: GPTBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: PerplexityBot
Allow: /

Sitemap: https://example.com/sitemap.xml

Content-Signal: ai-train=yes, search=yes, ai-input=yes
```

## Как настроить robots.txt?

Создайте файл `public/robots.txt` (для статических сайтов) или endpoint `/robots.txt` (для динамических).

**WordPress:** плагины Yoast SEO или Rank Math генерируют robots.txt автоматически. Вручную добавьте секции для AI-ботов через редактор файлов.

**Next.js:** создайте `app/robots.ts` или `public/robots.txt`:
```typescript
// app/robots.ts
import type { MetadataRoute } from 'next';

export default function robots(): MetadataRoute.Robots {
  return {
    rules: [
      { userAgent: '*', allow: '/' },
      { userAgent: 'GPTBot', allow: '/' },
      { userAgent: 'ClaudeBot', allow: '/' },
    ],
    sitemap: 'https://example.com/sitemap.xml',
  };
}
```

**Astro:** разместите `public/robots.txt` — отдаётся как статический файл.

## Как мы проверяем robots.txt?

Сканер делает `GET /robots.txt` и последовательно проверяет:

1. **HTTP 200** — файл существует и доступен
2. **Content-Type: text/plain** — отдаётся как текст, не HTML
3. **Непустое содержимое** — файл не пустой
4. **Наличие директив `User-agent:`** — минимум один блок (RFC 9309)
5. **Валидность формата** — нет структурных ошибок

Градиент результата: **1.0** если есть `Sitemap:` или хотя бы один не-wildcard User-agent блок; **0.5** если только `User-agent: *` без Sitemap. Статус **fail** — при HTTP не-200, пустом файле или отсутствии директив.

Файл кешируется и передаётся в зависимые проверки: [AI bot rules](/glossary/ai-bot-rules), [Content Signals](/glossary/content-signals), [Sitemap](/glossary/sitemap).

[← Все термины глоссария](/glossary)
