|
| 1 | +--- |
| 2 | +name: seo-sync |
| 3 | +description: Синхронизирует public/sitemap.xml, public/robots.txt и public/llms.txt с реальным содержимым сайта. Запускать при добавлении/удалении страниц или статей. Триггеры: «обнови sitemap», «обнови SEO-файлы», «синхронизируй llms.txt», «добавь статью в sitemap», «seo sync», «обнови мета-файлы». |
| 4 | +user_invocable: true |
| 5 | +--- |
| 6 | + |
| 7 | +# SEO Sync — процедура синхронизации SEO-файлов |
| 8 | + |
| 9 | +Синхронизирует `public/sitemap.xml`, `public/robots.txt` и `public/llms.txt` с актуальным содержимым сайта. |
| 10 | + |
| 11 | +**Базовый URL:** `https://roman-purtow.ru` |
| 12 | + |
| 13 | +--- |
| 14 | + |
| 15 | +## Шаг 1: Сбор данных |
| 16 | + |
| 17 | +1. Прочитать `src/data/articles.ts` — массив `articles` со всеми статьями (title, href, date, dateISO, sourceName). |
| 18 | +2. Просканировать `src/pages/` через glob (`src/pages/**/*.astro`) — определить все существующие страницы. |
| 19 | +3. Классифицировать: |
| 20 | + - **Публичные**: `index.astro` + `articles/*.astro` |
| 21 | + - **Скрытые**: `offer/*.astro` + любые другие директории в `src/pages/`, не входящие в `articles/` |
| 22 | +4. Прочитать текущий `public/robots.txt` — сохранить существующие Disallow-правила для `/glavred-calls/` и `/helpa-research/` (исторические пути, закрытые по решению пользователя, не имеют соответствующих страниц в `src/pages/`). |
| 23 | + |
| 24 | +--- |
| 25 | + |
| 26 | +## Шаг 2: Генерация `public/sitemap.xml` |
| 27 | + |
| 28 | +Перезаписать файл полностью. Формат: |
| 29 | + |
| 30 | +```xml |
| 31 | +<?xml version="1.0" encoding="UTF-8"?> |
| 32 | +<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> |
| 33 | + <url> |
| 34 | + <loc>https://roman-purtow.ru/</loc> |
| 35 | + <lastmod>YYYY-MM-DD</lastmod> |
| 36 | + <priority>1.0</priority> |
| 37 | + </url> |
| 38 | + <!-- Для каждой статьи из src/pages/articles/*.astro --> |
| 39 | + <url> |
| 40 | + <loc>https://roman-purtow.ru/articles/{slug}/</loc> |
| 41 | + <lastmod>YYYY-MM-DD</lastmod> |
| 42 | + <priority>0.8</priority> |
| 43 | + </url> |
| 44 | +</urlset> |
| 45 | +``` |
| 46 | + |
| 47 | +Правила: |
| 48 | +- `lastmod` — текущая дата в формате `YYYY-MM-DD` |
| 49 | +- Статьи сортировать по имени файла (алфавитно) |
| 50 | +- **Не включать** страницы из `offer/` и других скрытых директорий |
| 51 | + |
| 52 | +--- |
| 53 | + |
| 54 | +## Шаг 3: Генерация `public/robots.txt` |
| 55 | + |
| 56 | +Перезаписать файл полностью. Формат: |
| 57 | + |
| 58 | +``` |
| 59 | +User-agent: * |
| 60 | +Allow: / |
| 61 | +Disallow: /glavred-calls/ |
| 62 | +Disallow: /helpa-research/ |
| 63 | +Disallow: /offer/ |
| 64 | +``` |
| 65 | + |
| 66 | +Правила: |
| 67 | +- `Disallow:` для каждой скрытой директории в `src/pages/` (всё кроме `articles/`): например `/offer/` |
| 68 | +- **Всегда сохранять** исторические Disallow: `/glavred-calls/`, `/helpa-research/` |
| 69 | +- Если обнаружены новые скрытые директории (помимо `offer/`), добавить Disallow и для них |
| 70 | +- Завершить пустой строкой и строкой `Sitemap: https://roman-purtow.ru/sitemap.xml` |
| 71 | + |
| 72 | +--- |
| 73 | + |
| 74 | +## Шаг 4: Обновление `public/llms.txt` |
| 75 | + |
| 76 | +**Не перезаписывать весь файл** — обновить только секцию `## Статьи`. |
| 77 | + |
| 78 | +1. Прочитать `public/llms.txt`. |
| 79 | +2. Из `src/data/articles.ts` собрать полный список статей **в порядке массива**. |
| 80 | +3. Формат каждой записи: |
| 81 | + - Внешние (href начинается с `https://`): `- [title](href) (date, sourceName)` |
| 82 | + - Внутренние (href начинается с `/`): `- [title](https://roman-purtow.ru{href}) (date, sourceName)` |
| 83 | +4. В title заменить `\u00A0` (неразрывный пробел) на обычный пробел. |
| 84 | +5. Заменить содержимое от `## Статьи\n\n` до конца файла (или до следующей секции `## `). |
| 85 | + |
| 86 | +--- |
| 87 | + |
| 88 | +## Шаг 5: Проверка |
| 89 | + |
| 90 | +1. Запустить `npm run build`. |
| 91 | +2. Убедиться, что `dist/sitemap.xml`, `dist/robots.txt`, `dist/llms.txt` существуют и содержат актуальные данные. |
| 92 | +3. Сообщить пользователю итог: сколько статей в sitemap, сколько Disallow-правил в robots.txt, сколько записей в llms.txt. |
| 93 | + |
| 94 | +--- |
| 95 | + |
| 96 | +## Ключевые файлы |
| 97 | + |
| 98 | +| Файл | Роль | |
| 99 | +|---|---| |
| 100 | +| `src/data/articles.ts` | Массив всех статей с title, href, date, dateISO, sourceName | |
| 101 | +| `src/pages/**/*.astro` | Все страницы сайта (glob-сканирование) | |
| 102 | +| `public/sitemap.xml` | Целевой файл — перезаписывается полностью | |
| 103 | +| `public/robots.txt` | Целевой файл — перезаписывается полностью | |
| 104 | +| `public/llms.txt` | Целевой файл — обновляется только секция «Статьи» | |
0 commit comments