papa-seo: SEO-скил для Claude Code и Codex
Агент с этим скилом проверяет страницы и сайты, составляет ТЗ, пишет и правит тексты под Google, Яндекс и AI-поиск. Скил бесплатный, платные API ему не нужны.
- Версия 0.1.0
- Лицензия MIT
- Режимы 13
- Модули 29
- Скрипты 9
- Примеры 63
- Python 3.10+
Что делает скил
papa-seo — папка с инструкциями и скриптами, которую читает ИИ-агент. Это SEO через нейросеть, но не онлайн-сервис: скил работает в вашем Claude Code или OpenAI Codex, сам скачивает страницу и проверяет живой HTML. Просить можно обычными словами («проверь страницу», «составь ТЗ», «почему просела статья») или назвать режим. Пригодится SEO-специалисту, редактору или разработчику, который уже работает в агенте и ведёт сайт сам или по заказу.
Google и Яндекс скил разбирает отдельно, у каждой находки помечено, к какому поисковику она относится. Для AI-поиска (AI Overviews, ChatGPT search, Perplexity, Алиса AI) он проверяет, допущена ли страница к ответам и каких ботов пускает robots.txt.
Работает на том, что есть бесплатно: публичный URL, ваши файлы, выгрузки из Search Console или Вебмастера. Wordstat API или DataForSEO скил может предложить, но каждый раз предупреждает, что это платно. Частотность, позиции и трафик скил не придумывает: нет данных — так и пишет. Сайт сам не меняет, правка доходит до патча, а дальше решаете вы. Пакет сделала команда affpapa.org для своей работы и выложила как есть.
Что нашёл SEO-аудит affpapa.org
24 октября 2026 года скил проверил этот портал: 15 страниц по очереди с паузой, robots.txt и индекс sitemap, без обхода. Ниже три находки и промпты, которыми их получили. На своём сайте замените адрес.
-
Обзор карточки называет рынками страны из «Запрещённых ГЕО» той же страницы
Промптpapa-seo page https://affpapa.org/nepartners/1win-partners И английскую пару /en/nepartners/1win-partners. Сверь текст обзора с блоком «Характеристики»: страны, выплаты, всё, что можно проверить по той же странице.- Что сделает скил
- Модуль on-page сравнил текст обзора с блоком «Характеристики» в том же HTML, отдельно в русской и английской версии карточки.
- Что получите
- Обзор называет рынками программы Бразилию, Индию, Германию, США и Украину, а «Характеристики» той же страницы держат Германию, США и Украину в «Запрещённых ГЕО». Доказательство — строки 1142 и 1223 сохранённой страницы, в английской паре та же фраза на строке 1148. Статус confirmed, важность high. Правка — в генераторе обзоров: передавать ему только целевые ГЕО, а текст со страной из запрещённых не публиковать.
- Подводный камень
- Проверена одна пара RU/EN из ~1 580 карточек. Сколько обзоров затронуто и где ошибка, в данных источника или в генерации, по одной странице не видно.
-
Сравнения брендов ?brands= открыты для обхода и ставят canonical на чужое содержимое
Промптpapa-seo audit affpapa.org, без обхода: 15 адресов из urls.txt, один поток, пауза 4 секунды. Сначала robots.txt и sitemap, потом страницы. Отдельно посмотри параметрические URL, на которые ссылаются карточки.- Что сделает скил
- page_facts.py снял с адреса /neblask/compare?brands=1win,stake meta robots, canonical, размер и ссылки, robots_check.py проверил тот же адрес по robots.txt. Дальше — сверка robots, meta robots, canonical и sitemap по матрице индексации.
- Что получите
- Страница сравнения открыта для индекса (index, follow), весит 544 663 байта HTML и ставит canonical на хаб /neblask/compare с другим содержимым. Ссылки на пары стоят на паспортах брендов и в НеРейтинге, брендов 2 555, и каждый порядок пары даёт свой URL. Правила для /neblask/compare?* в robots.txt нет. Статус likely, важность high. Правок две, выбор по спросу: закрыть комбинации от обхода или оставить белый список пар со своим title, H1 и self-canonical.
- Подводный камень
- Сколько таких URL уже в индексе, сколько их обходят боты и есть ли спрос на «X vs Y», без Вебмастера, логов и Wordstat неизвестно, поэтому статус likely, а не confirmed.
-
Разметка события сдвигает время начала на три часа
Промптpapa-seo page https://affpapa.org/neevents/piterskie-razborki — сверь даты и время в JSON-LD с тем, что написано на странице.- Что сделает скил
- page_facts.py достал JSON-LD Event и видимый текст, модуль schema сверил каждое значение разметки с тем, что видит человек на странице.
- Что получите
- В разметке начало в 19:00 по UTC (startDate 2026-10-25T19:00:00+00:00), а на странице «начало в 19:00» в Санкт-Петербурге, где UTC+3. Google получит начало в 22:00 по Москве и конец в 02:00 следующего дня. Статус confirmed, важность medium. Правка: хранить время события с поясом площадки и выводить смещение города, а не +00:00.
- Подводный камень
- Проверено 1 событие из ~670 в core.xml. Что ошибка в шаблоне, а не в одной записи, — предположение.
Как установить скил в Claude Code и Codex
Установщика нет. Пакет ставится копированием одной папки papa-seo/ и ничего не перезаписывает в ваших настройках; проверьте только, что папки с таким именем в целевом каталоге ещё нет. Скриптам нужен Python 3.10 или новее. Удалить скил — значит стереть эту папку.
Как скилы устроены вообще и куда их кладут другие агенты, разобрано в каталоге скиллов для Claude Code и Codex.
Claude Code
git clone https://github.com/AffPapa/papa-seo.git && cd papa-seo
cp -R papa-seo ~/.claude/skills/papa-seo
cp -R papa-seo <проект>/.claude/skills/papa-seo
OpenAI Codex
cp -R papa-seo ~/.agents/skills/papa-seo
cp -R papa-seo <репозиторий>/.agents/skills/papa-seo
Codex ищет папку .agents/skills в каждом каталоге от текущего до корня репозитория (документация Codex, проверено 24.10.2026). Путь ~/.codex/skills из старых инструкций текущая документация не называет.
Контекст проекта
mkdir -p .papa-seo && cp ~/.claude/skills/papa-seo/templates/project-context.md .papa-seo/project.md
Файл .papa-seo/project.md в корне проекта скил читает до выбора модуля. В нём пишут рынок и язык, на какие поисковики смотреть, можно ли обходить сайт и с какой нагрузкой, куда класть результаты, кто публикует правки. Без файла настройки самые осторожные: одна страница или до 20 адресов по очереди, без обхода и без публикации. В Codex заготовка лежит в ~/.agents/skills/papa-seo/templates/.
Режимы: что можно попросить
Режим называют прямо, например papa-seo page https://example.ru/, или описывают задачу словами. Если запрос подходит под два режима, скил выберет тот, что ближе к нужному результату, и скажет, какой выбрал.
| Режим | Когда | Модули |
|---|---|---|
page |
Одна страница по URL или HTML-файлу, в том числе до публикации: title, description, заголовки, картинки, разметка, индексируемость. | on-page, tech-audit, schema, geo |
audit |
«Проверь сайт», «почему не индексируется». Идёт по выборке адресов, а не обходом. | tech-audit → indexing → on-page → schema → performance → report |
yandex |
Рунет: Вебмастер, Clean-param, YandexAdditional, коммерческие сигналы, Алиса AI, переезды. | yandex + профильный модуль |
geo |
AI Overviews, ChatGPT search, Perplexity, Алиса AI: допущена ли страница к ответам, каких ботов пускать, нужен ли llms.txt. | geo, indexing |
plan |
Семантика и структура раздела: интенты, кластеры, карта «запрос → страница», каннибализация. | semantics → serp → links |
brief |
ТЗ копирайтеру: интент, угол, структура, таблица фактов с источниками, вопросы эксперту. | brief, serp, semantics |
write |
Статья или текст страницы по ТЗ. Нет ТЗ — скил сначала составит его. | brief → write → factcheck → deai → headlines |
refresh |
Старая статья устарела или просела: что поменялось в выдаче и в данных, сверка фактов до и после. | measure → edit → factcheck |
edit |
Правка, рерайт, «убери ИИ-стиль» без потери фактов и голоса автора. | edit, deai, voice |
landing |
Лендинг, страница услуги, оффер. Отзывы, цифры и гарантии — только настоящие. | landing → deai → headlines |
links |
Перелинковка: сироты, глубина, анкоры, где именно поставить ссылку. | links |
fix |
«Исправь», «сгенерируй разметку, robots, title». Черновик или патч, применяется после вашего «да». | профильный модуль + policies/actions.md |
measure |
Выгрузки Search Console, Вебмастера, GA4: сравнение периодов, выпадения, запросы рядом с топом. | measure |
Модули: по файлу на задачу
Роутер SKILL.md читает только модули, нужные режиму, остальное в контекст агента не попадает. Своих порогов и дат модули не держат: всё это лежит в references/facts-2026.md, у каждой записи есть дата и ссылка на первоисточник.
Техника и индексация
tech-auditМожет ли поисковик получить и проиндексировать страницу: статусы, редиректы, canonical, meta robots и X-Robots-Tag, сырой HTML против JS, HTTPS.indexingrobots.txt по RFC 9309 и правилам Яндекса, sitemap, матрица «сканировать / индексировать / в sitemap», IndexNow.on-pageTitle, description, H1–H6, первый экран, Open Graph, изображения.schemaJSON-LD: что есть, что сломано, что даёт расширенный сниппет в Google и что понимает Яндекс. Генерирует только из данных страницы.performanceCore Web Vitals: в какой метрике и какой её части проблема у реальных пользователей и что чинить первым.internationalhreflang, x-default и их согласованность с canonical.programmaticШаблонные страницы из таблицы: у какой есть свои данные и право на индекс.migrationСмена URL, домена или CMS: инвентарь, карта 301, проверка после переезда, откат.logsЛоги сервера и CDN: какие боты приходят, что сканируют, какие ответы получают.
Яндекс и AI-поиск
yandexВсё, чем Яндекс отличается от Google: его роботы в robots.txt, зеркала и регион, поддерживаемая разметка, Вебмастер, Алиса AI, коммерческие сигналы, Wordstat.geoДопуск к ответам AI Overviews, Алисы AI, ChatGPT search, Perplexity и Claude. Боты поиска отдельно от ботов обучения, llms.txt как опция.
Семантика, ссылки, доверие
semanticsИнтенты, кластеры по общей выдаче, карта «запрос → страница», каннибализация.serpКакую страницу поисковик считает ответом на запрос и совпадает ли с ней тип вашей.linksГраф внутренних ссылок из готовых данных, без обхода: сироты, глубина, анкоры, план вставки.backlinksВнешние ссылки по бесплатным данным Search Console и Вебмастера, с честной оговоркой, чего в них не видно.eeatE-E-A-T и ЭПОС: видно ли, кто сделал материал и почему ему верить, узнают ли поисковики организацию и автора.
Тексты
briefТЗ на одну страницу: интент, читатель, угол, структура, факты с источниками, чего не писать.writeТекст по брифу: ответ в начале, разделы из фактов. Опыта и мнений, которых у автора нет, не добавляет.editТочечная правка, рерайт, пересборка из фактов, обновление старой страницы.deaiДе-AI редактура на русском и английском: убирает следы генерации, факты и голос не трогает.headlinesTitle, H1, description и первый абзац, которые обещают то, что на странице действительно есть.landingЛендинги и страницы услуг: сначала ясность, отзывы и цифры только с доказательством.voiceПрофиль голоса бренда или автора, собранный из его настоящих текстов.factcheckДве проверки порознь: говорит ли источник то, что написано в тексте, и не исказила ли правка факты.text-metricsЗнаки, ключи, тошнота, вода, ритм. Всё, кроме простых счётчиков, помечено как оценка.
Локальный бизнес и магазины
localКарточки в Google Business Profile, Яндекс Бизнесе и 2ГИС, совпадение NAP, отзывы, страницы точек.ecommerceКарточки товаров, категории, фасеты, снятые товары, разметка Product и Offer.
Данные и отчёт
measureSearch Console, Вебмастер, GA4: сравнение периодов, выпадения, запросы рядом с топом, дрейф после релиза.reportСводит находки в один отчёт: вердикт, что сделать первым, как проверить.
Промпты для SEO-задач по режимам
Промпт копируется в чат агента как есть, остаётся заменить адрес и пути на свои. Под русским вариантом — английский. В каждом примере указано, какие модули и скрипты сработают, что получится на выходе и где обычно спотыкаются.
page
Проверить страницу до публикации по HTML-файлу
papa-seo page ./build/uslugi/remont.html
адрес будет https://example.ru/uslugi/remont/
papa-seo page ./build/services/repair.html — it will live at https://example.com/services/repair/
- Что сделает скил
- page_facts.py с --base-url разбирает файл без сети: title, meta robots, canonical, hreflang, заголовки, ссылки, картинки, JSON-LD, скрытые инструкции. Дальше on-page и tech-audit.
- Что получите
- Список находок по finding.schema.json: блокирующие сверху, у каждой цитата из HTML и способ проверить после выкладки.
- Подводный камень
- Статусы, редиректы и заголовки ответа по файлу не видны — их проверят после выкладки по живому URL.
Разобрать страницу услуги под Яндекс и Google
проверь страницу https://example.ru/uslugi/remont-kvartir/ — рынок Москва, важен Яндекс
check https://example.ru/uslugi/remont-kvartir/ — Moscow market, Yandex matters most
- Что сделает скил
- Один запрос через http_safe.py, page_facts.py, robots_check.py для Googlebot, YandexBot и AI-ботов. Модули on-page, tech-audit, schema и дорожка yandex.
- Что получите
- Находки с пометкой engine: google / yandex / both, карточка страницы (title, H1, description, первый абзац как есть) и 2–3 варианта title черновиком.
- Подводный камень
- Частотности запросов не будет: без Вебмастера, Wordstat или вашей выгрузки скил её не пишет.
Понять, почему страница не попадает в индекс
Страница https://example.ru/catalog/divany/ три недели не в индексе Google, в Яндексе есть. Что мешает?
https://example.com/catalog/sofas/ has been out of Google's index for three weeks but Yandex has it. What's blocking it?
- Что сделает скил
- tech-audit: статус и цепочка редиректов, meta robots и X-Robots-Tag, canonical, сырой HTML против признаков CSR; robots_check.py по этому URL для Googlebot и YandexBot отдельно.
- Что получите
- Блокирующие условия (если есть) с доказательством; если всё открыто — список того, что смотреть в Search Console («Проверка URL», причина исключения).
- Подводный камень
- Отчёт Search Console агент не видит. Если технических блоков нет, причину он назовёт гипотезой, а не фактом.
Проверить JSON-LD на странице и его соответствие тексту
papa-seo page https://example.ru/blog/kak-vybrat-laminat/ — только разметка: что есть, что сломано, что даёт расширенный сниппет
papa-seo page https://example.com/blog/choosing-laminate/ — markup only: what's there, what's broken, what still earns a rich result
- Что сделает скил
- Модуль schema: извлечь JSON-LD, Microdata, RDFa и OG; синтаксис; сверка каждого значения с видимым текстом; статус типа в Google по facts-2026 §6; заметка для Яндекса.
- Что получите
- Инвентарь: тип → формат → путь в JSON → статус в Google → замечание для Яндекса; находки с фрагментом.
- Подводный камень
- FAQPage скил не советует ради выдачи: в Google этот сниппет не показывается с 07.05.2026, в справке Яндекса тип не найден.
Проверить, видят ли поисковик и AI-боты текст без JavaScript
У нас Next.js, контент подгружается на клиенте. Посмотри https://example.ru/tarify — что видно в сыром HTML?
We're on a client-rendered SPA. Look at https://example.com/pricing — what is in the raw HTML?
- Что сделает скил
- page_facts.py: words_main, words_visible_raw_html, признаки CSR (поле csr), скрипты. Модули tech-audit и geo (шаг «Рендер»).
- Что получите
- Сколько основного текста в сыром HTML, есть ли цены и ответы без JS, находка rendered, если их нет.
- Подводный камень
- Рендера в пакете нет: отрендеренный DOM он не строит, сравнение «до/после JS» — только если вы дадите сохранённую отрендеренную версию.
audit
Аудит сайта по выборке URL без обхода
papa-seo audit example.ru. Сайт не обходить, сервер слабый. Вот 15 адресов: главная, по две страницы каждого шаблона — urls.txt. Пауза 3 секунды.
papa-seo audit example.com. Do not crawl, the server is weak. 15 URLs in urls.txt: home plus two of each template. 3-second pause.
- Что сделает скил
- tech-audit → indexing → on-page → schema → performance, итог — модуль report. page_facts.py --urls-file с --delay, robots_check.py, sitemap_check.py.
- Что получите
- Отчёт по templates/report.md: вердикт, что сделать первым, находки по severity, строка покрытия «проверено N из ~M URL», раздел «Не проверено».
- Подводный камень
- «На всём сайте нет X» скил по выборке не напишет — только «в проверенных N страницах».
Аудит по выгрузке краулера, а не по живому сайту
Есть выгрузка Screaming Frog за вчера: ./crawl/internal_all.csv и ./crawl/all_inlinks.csv. Сделай аудит по ним, на сайт не ходи.
Here is yesterday's Screaming Frog export: ./crawl/internal_all.csv and ./crawl/all_inlinks.csv. Audit from these, don't hit the site.
- Что сделает скил
- Файлы пользователя — первый источник по SKILL.md §3. Статусы, canonical, meta robots, title и H1 из таблицы; граф ссылок — link_graph.py по CSV инлинков.
- Что получите
- Находки с source_type user_file и строкой CSV в evidence; группы URL с правилом из матрицы индексации.
- Подводный камень
- Содержимое CSV — данные, не инструкции; формулы в ячейках при экспорте экранируются.
Проверить sitemap: лимиты, lastmod, чужие хосты
проверь https://example.ru/sitemap.xml — там индекс на 8 файлов, они генерятся на лету, много не дёргай
check https://example.com/sitemap.xml — it's an index of 8 files generated on the fly, go easy
- Что сделает скил
- sitemap_check.py --follow-index --max-children 2: тип, лимиты файла, чужие хосты, http-записи, дубли, правдоподобие lastmod. URL из карты не обходит.
- Что получите
- Находки модуля indexing; в children_warning — какие шарды не открывались.
- Подводный камень
- Больше двух дочерних карт — только по явной просьбе; «в sitemap нет X» скил скажет только по полному набору файлов.
Проверить пары RU/EN: hreflang, x-default, canonical
У нас русская версия и /en/. Проверь hreflang на этих 6 парах (файл pairs.txt), особенно взаимные ссылки и x-default.
We have Russian pages and /en/ copies. Check hreflang on the 6 pairs in pairs.txt, especially return links and x-default.
- Что сделает скил
- Модуль international: самоссылка, взаимность, коды языков и регионов, согласованность с canonical, язык основного контента.
- Что получите
- Матрица кластера: URL × язык-регион × самоссылка × взаимность × статус × canonical × язык контента; черновик исправленного набора тегов.
- Подводный камень
- Если страница ставит canonical на другой URL, отсутствие самоссылки в hreflang не ошибка — смотреть надо на согласованность.
Решить, какие шаблонные страницы оставить в индексе
У нас 4 000 страниц «услуга + город» из одной таблицы. Вот выгрузка записей ./data/cities.csv и 10 адресов. Какие из них имеют право на индекс?
We have 4,000 'service + city' pages built from one table. Records are in ./data/cities.csv, plus 10 sample URLs. Which ones should be indexed?
- Что сделает скил
- Модуль programmatic: инвентарь полей, разбор шаблона на статику и данные, гейт «у страницы есть свои данные» на выборке 10–20 записей разной заполненности.
- Что получите
- Правило индексации по полям записи, таблица выборки с вердиктом, план выкладки партиями.
- Подводный камень
- Процент «уникальности текста» скил не считает и порогом не использует: это миф из references/folklore.md.
Разобрать Core Web Vitals и понять, что чинить первым
Вот отчёт PageSpeed в JSON: ./psi/home.json. LCP красный на мобильных. Что именно тормозит?
Here's a PageSpeed JSON report: ./psi/home.json. Mobile LCP is red. What exactly is slow?
- Что сделает скил
- Модуль performance: сначала поле, потом лаборатория; LCP раскладывается на подчасти (TTFB, задержка загрузки, загрузка, отрисовка), чинится самая большая.
- Что получите
- Таблица: шаблон → метрика → поле (p75, устройство, период) → часть-виновник → правка → как проверить.
- Подводный камень
- Замер TTFB с нагруженного сервера скил считает недействительным и просит подписывать условия замера.
yandex
Проверить robots.txt на AI-ботов и YandexAdditional
посмотри наш robots.txt https://example.ru/robots.txt: кого из AI-ботов пускаем, кого нет, и закрыты ли мы от ответов Алисы
look at https://example.com/robots.txt: which AI bots get in, which don't, and are we excluded from Yandex Alice answers
- Что сделает скил
- robots_check.py: группы и склейка UA, longest match, таблица доступа по ростеру ai-bots.yaml (поиск, обучение, загрузка по запросу), bot_notes для YandexAdditional.
- Что получите
- Таблица «бот × URL → разрешено/запрещено» и находки engine: yandex; черновик правки robots.txt диффом, если просили.
- Подводный камень
- YandexAdditional не подпадает под User-agent: * и под группу Yandex — ему нужна своя группа. Частая ошибка: «закрыли через звёздочку».
Убрать дубли из-за UTM-меток через Clean-param
В Вебмастере дубли с utm_ и ?ref=. Составь Clean-param и проверь, что он не сломает остальное. robots.txt приложил.
Yandex Webmaster shows duplicates with utm_ and ?ref=. Draft a Clean-param rule and check it won't break anything else. robots.txt attached.
- Что сделает скил
- Дорожка yandex: robots_check.py --param-hints utm_source,utm_medium,ref по файлу; правила Clean-param из references/yandex.md §1 (синтаксис, путь, 500 символов).
- Что получите
- Дифф robots.txt с новым правилом, таблица доступа до и после по тем же URL.
- Подводный камень
- Disallow важнее Clean-param: закрытая страница не индексируется, даже если подпадает под правило.
Проверить коммерческие и юридические сигналы страницы для Яндекса
papa-seo yandex https://example.ru/dostavka-cvetov/ — что из коммерческих факторов есть, чего нет
papa-seo yandex https://example.ru/flower-delivery/ — which commercial signals are present and which are missing
- Что сделает скил
- Чек-лист references/yandex.md §7 — только пункты, ожидаемые для этого типа страницы; page_facts.py для контактов, цен, ссылок на условия.
- Что получите
- По каждому пункту «есть / нет / не найдено в проверенном HTML» с фрагментом.
- Подводный камень
- Баллов и весов нет; юрлицо и реквизиты скил не дописывает — только отмечает, что их не нашёл.
Разобрать исключённые страницы из Вебмастера
Выгрузил из Вебмастера «Исключённые страницы» за октябрь: ./webmaster/excluded.csv. Что тут главное?
I exported Excluded pages from Yandex Webmaster for October: ./webmaster/excluded.csv. What matters here?
- Что сделает скил
- yandex + indexing: группировка по причинам (дубль, малоценная или маловостребованная, редирект, noindex, ошибка, запрет в robots) и по группам URL; класс technical или quality.
- Что получите
- Таблица причин по группам URL с примерами и решение для каждой группы.
- Подводный камень
- «Малоценная или маловостребованная» — вопрос качества и спроса, переобход её не лечит.
geo
Узнать, может ли страница попасть в ответы ChatGPT, Perplexity и Алисы AI
geo-проверка для https://example.ru/guide/ipoteka-2026/ — может ли она попасть в AI Overviews, Алису, ChatGPT и Perplexity?
GEO check for https://example.com/guide/mortgage-2026/ — is it eligible for AI Overviews, ChatGPT search and Perplexity?
- Что сделает скил
- Модуль geo: гейт допуска по каждому движку (200, бот поиска допущен, нет noindex, сниппет-директивы не закрывают текст, canonical не уводит), robots_check.py, page_facts.py.
- Что получите
- Таблица допуска по движкам с доказательством по каждой строке и таблица доступа ботов по группам.
- Подводный камень
- Допуск — не обещание цитирования. Настройки Search Console и Вебмастера видит только владелец.
Запретить обучение моделей, не закрывая сайт от AI-поиска
Хотим запретить обучение на наших текстах, но остаться в поиске ChatGPT и Claude. Подготовь правку robots.txt, ничего не выкладывай.
We want to opt out of model training but stay in ChatGPT and Claude search. Draft the robots.txt change, don't deploy anything.
- Что сделает скил
- geo, таблица «одно утверждение — свой бот»: GPTBot против OAI-SearchBot, ClaudeBot против Claude-SearchBot, Google-Extended против Googlebot. robots_check.py до и после.
- Что получите
- Дифф robots.txt с объяснением, что меняется для каждого бота, и таблица доступа до/после.
- Подводный камень
- Боты загрузки по запросу пользователя (ChatGPT-User, Claude-User) robots.txt соблюдают не всегда — это не дефект сайта.
Составить llms.txt из своего списка страниц
Сделай llms.txt по списку разделов из ./docs/sections.md. Описания коротко, по одному предложению.
Make an llms.txt from the section list in ./docs/sections.md. One-sentence descriptions.
- Что сделает скил
- geo, шаг 8: файл собирается только из вашего списка; каждое описание проходит фильтр скрытых инструкций page_facts.py, помеченные записи не включаются.
- Что получите
- Черновик llms.txt и список исключённых записей с причиной.
- Подводный камень
- Файл необязателен: Google Поиск его не использует, у Яндекса сведений нет. Отсутствие llms.txt скил находкой не считает.
Настроить ручной мониторинг упоминаний сайта в AI-ответах
Хочу раз в две недели смотреть, упоминают ли нас Алиса, ChatGPT и Perplexity. Вот 20 запросов из Вебмастера — queries.txt. Сделай протокол.
I want to check every two weeks whether ChatGPT, Perplexity and AI Overviews mention us. 20 real queries from Search Console in queries.txt. Build the protocol.
- Что сделает скил
- geo, шаг 9: фиксированный набор вопросов, платформы, регион и язык, поля записи (дата, есть ли AI-ответ, упомянут ли сайт, какой URL, какие домены рядом, ошибки о бренде).
- Что получите
- Шаблон таблицы протокола и порядок повторных замеров; рядом — бесплатные первоисточники (Вебмастер «Видимость сайта в Алисе AI», GA4/Метрика).
- Подводный камень
- Вопросы задаёт человек в обычной сессии: скил не скрейпит ответы и не берёт cookie. Сравнивать доли по набору, а не единичные ответы.
Проверить, не режет ли CDN или WAF AI-ботов
robots.txt у нас всех пускает, но в логах от GPTBot одни 403. Проверь главную с его User-Agent.
Our robots.txt allows everyone, yet GPTBot gets only 403s in the logs. Fetch the home page with its User-Agent.
- Что сделает скил
- http_safe.py fetch --ua-of GPTBot: один запрос с UA бота из документации вендора; сравнение статуса с обычным запросом.
- Что получите
- Находка headers, если robots разрешает, а живой запрос с UA бота отдаёт 403 или капчу.
- Подводный камень
- Если WAF пропускает ботов по IP, запрос с вашего адреса с UA бота этого не покажет. Для YandexAdditional и Google-Extended UA нет: они запросов не делают.
plan
Разбить выгрузку Wordstat на кластеры и страницы
Вот выгрузка из Wordstat, собирал руками: ./wordstat/laminat.csv, 340 фраз. Разбей на кластеры и скажи, какая страница под какой кластер.
Here is a Yandex Wordstat export I collected by hand: ./wordstat/laminate.csv, 340 phrases. Cluster it and map clusters to pages.
- Что сделает скил
- semantics: нормализация и стемминг, интент каждого запроса, пре-группировка, кластеризация по общей выдаче (пороги помечены HEURISTIC), карта «запрос → страница».
- Что получите
- page_map.csv (cluster, query, intent, demand, demand_source, period, target_url, url_status, page_type), таблица кластеров и список нецелевых запросов с причиной.
- Подводный камень
- Для рунета решает выдача Яндекса; если встроенный поиск агента отдал другую, это будет написано, а спорные пары помечены likely.
Спланировать структуру нового раздела сайта
Запускаем раздел про ипотеку. Есть только список тем от редакции (topics.md) и запросы из GSC по сайту. Предложи структуру и что куда.
We're launching a mortgage section. We have the editors' topic list (topics.md) and our Search Console queries. Propose the structure.
- Что сделает скил
- semantics → serp → links: интенты, тип страницы по выдаче, по одной целевой странице на кластер, оси перелинковки.
- Что получите
- Таблица кластеров с типом страницы и URL (existing/new/merge), page_map.csv, план связей между страницами раздела.
- Подводный камень
- Подсказки поиска дают формулировки без частотности; платные Wordstat API и DataForSEO — только по вашему ключу, с ценой до запуска.
Найти каннибализацию по выгрузке Search Console
Подозреваю, что две статьи про ламинат мешают друг другу. Выгрузка GSC «запрос × страница» за 3 месяца: ./gsc/query_page.csv
I think two laminate articles compete. Search Console query × page export for 3 months: ./gsc/query_page.csv
- Что сделает скил
- semantics, шаг 8: запросы, по которым показы получают два и больше URL; отсев нормы (бренд, разные интенты, регионы); смена ранжирующего URL по неделям.
- Что получите
- Таблица: запрос, конкурирующие URL, данные, предложенное решение (развести интенты, объединить с 301, перелинковать), approval_required: true.
- Подводный камень
- Без выгрузки «запрос × страница» каннибализацию скил не утверждает: site:-проверка — подсказка, не доказательство.
Понять по выдаче, какой тип страницы нужен под запрос
По запросу «ламинат для кухни» у нас статья, а в топе вроде каталоги. Глянь выдачу Яндекса и скажи, что делать.
For 'laminate for kitchen' we have an article but the top looks like category pages. Check the SERP and tell me what to do.
- Что сделает скил
- Модуль serp: топ-10 с типами страниц, блоки выдачи и кто их держит, вердикт «совпадает / несовпадение типа».
- Что получите
- Сводка выдачи (движок, регион, дата, источник), вердикт по типу страницы с severity и вопросы пользователя для брифа.
- Подводный камень
- Записывается только то, что реально открыто и прочитано; не открылось — так и будет сказано.
brief
Составить ТЗ копирайтеру на статью
составь ТЗ на статью «как выбрать ламинат для кухни». Источники фактов — наш прайс ./sources/price.xlsx и паспорта производителей в ./sources/
write a brief for an article on how to choose laminate flooring for a kitchen. Facts come from our price list and manufacturer sheets in ./sources/
- Что сделает скил
- brief + serp + semantics: карточка задачи, интент, выдача, тип страницы, угол, таблица фактов с источниками и датами, структура H1/H2 с привязкой к фактам.
- Что получите
- Заполненный templates/brief.md, отдельный список [NEED: …] с тем, у кого спросить, вопросы эксперту.
- Подводный камень
- Всё, чего нет в таблице фактов, автор по ТЗ не пишет. Объём числом слов скил не задаёт.
ТЗ с требованиями заказчика по знакам, тошноте и воде
Заказчик хочет 6–8 тыс. знаков без пробелов, тошнота не выше 3, вода до 15%. Составь ТЗ на страницу «замена ламината в квартире» с этими условиями.
The client wants 6–8k characters without spaces and a keyword-density cap. Write the brief for a page on replacing laminate flooring with those requirements.
- Что сделает скил
- brief, шаг 9: требования записываются как требования заказчика со способом проверки через text_metrics.py, а не как нормы поисковика.
- Что получите
- ТЗ, где метрики стоят в блоке приёмки с командой проверки.
- Подводный камень
- Тошнота и вода — оценка: формулы Advego и Text.ru не опубликованы, цифры скрипта с ними не совпадут.
ТЗ на честную страницу сравнения «X или Y»
Нужна страница «Tilda или WordPress для лендинга». Мы сами делаем сайты на обоих. ТЗ, чтобы сравнение было честным.
We need a 'Tilda vs WordPress for a landing page' article. We build on both. Brief it so the comparison stays fair.
- Что сделает скил
- brief + serp, раздел «Страницы сравнения и альтернативы X»: одни критерии для обеих сторон, источник и дата под каждую цену, раскрытие своего участия, видимая методика.
- Что получите
- ТЗ с таблицей критериев и источником под каждую ячейку, чек-лист честности.
- Подводный камень
- Сравнение без данных и оценки без методики попадут в «чего не писать».
write
Написать статью по готовому ТЗ с источниками
papa-seo write по ТЗ ./briefs/kak-vybrat-laminat.md
источники в ./sources/, результат положи в ./drafts/
papa-seo write from ./briefs/choosing-laminate.md — sources in ./sources/, save the draft to ./drafts/
- Что сделает скил
- write → factcheck → deai → headlines: ответ в начале, разделы из фактов брифа, таблица «утверждение → источник → статус», вычитка deai_scan.py.
- Что получите
- Markdown-файл, список источников, открытые [NEED: …], короткий отчёт проверок.
- Подводный камень
- Опыт, истории и мнения, которых нет у автора, скил не добавляет; цифра без источника остаётся пометкой [NEED].
Текст для категории без SEO-простыни под листингом
Нужен короткий текст для категории «угловые диваны». Характеристики ассортимента — ./data/sofas.csv. Без простыни внизу.
Need short copy for the 'corner sofas' category. Range data is in ./data/sofas.csv. No wall of text at the bottom.
- Что сделает скил
- write с типом страницы «категория» из references/page-types.md и ecommerce: заголовок, короткий полезный текст из данных ассортимента.
- Что получите
- Текст по блокам, H1 и description черновиком, список фактов с источником.
- Подводный камень
- Плотность ключа скил целью не ставит: в его справочнике это фольклор, не фактор ранжирования.
Придумать title, H1 и description для страницы
придумай title и description для https://example.ru/remont-stiralnyh-mashin/ — сейчас в сниппете ерунда
write a title and description for https://example.com/washer-repair/ — the current snippet is junk
- Что сделает скил
- Модуль headlines (и on-page для текущих тегов): обещание заголовка сверяется с содержимым страницы, учитываются запросы из GSC/Вебмастера, если их дали.
- Что получите
- 2–3 варианта title с пояснением, H1, description, первый абзац; таблица «было → стало → почему».
- Подводный камень
- Длину скил числом символов не нормирует (facts-2026 §5); обещания, которых страница не подтверждает, вынесет в предупреждения.
refresh
Обновить старую статью по выгрузке Search Console
papa-seo refresh https://example.ru/blog/laminat-2023/
Выгрузка GSC за 16 месяцев: ./gsc/laminat.csv
papa-seo refresh https://example.com/blog/laminate-2023/ — 16 months of Search Console data in ./gsc/laminate.csv
- Что сделает скил
- measure (сравнение периодов) → edit, режим D → factcheck; выдача по главным запросам; factdiff.py до и после.
- Что получите
- План (разделы, варианты title, мета, разметка), после согласия — новая версия текста, отчёт factdiff.py, что сравнить в GSC через несколько недель.
- Подводный камень
- URL, якоря и проверенные факты сохраняются; дату обновления скил ставит только при реальных изменениях.
Разобраться, почему просела страница
С сентября страница /uslugi/okna/ потеряла половину кликов. Выгрузки GSC за август и октябрь в ./gsc/. Что случилось?
Since September /services/windows/ lost half its clicks. Search Console exports for August and October are in ./gsc/. What happened?
- Что сделает скил
- measure, режим «Выпадения»: потеря раскладывается на спрос (показы при той же позиции), ранжирование (позиция), сниппет (CTR) и индексацию (страница пропала из данных).
- Что получите
- Вердикт в одну-две фразы, таблица изменений с абсолютными и относительными значениями, причины со статусами confirmed / likely / hypothesis.
- Подводный камень
- «Совпало по времени» не значит «вызвано». Без дат апдейтов из facts-2026 связь с апдейтом поисковика — гипотеза.
Обновить цены и даты в статье и не потерять факты
Обнови цены в статье ./content/okna-ceny.md по новому прайсу ./sources/price-2026.pdf, остальное не трогай.
Update the prices in ./content/window-prices.md from the new price list ./sources/price-2026.pdf, leave the rest alone.
- Что сделает скил
- edit, режим A (точечная правка) + factcheck; factdiff.py сравнивает до и после: числа, даты, деньги, URL, имена, оговорки при числах.
- Что получите
- Изменённые строки с причиной и отчёт factdiff.py с объяснением каждого «пропало» и «появилось».
- Подводный камень
- Исходник скил сохраняет отдельным файлом до правки; без него сверки не будет.
edit
Убрать из текста признаки нейросети
убери ИИ-стиль из ./drafts/obzor.md, смысл и цифры не меняй
de-AI ./drafts/review.md, keep the meaning and every number
- Что сделает скил
- deai: регистр и голос, deai_scan.py --genre, чтение по одной проверке за проход (остатки чат-бота, плотность, шаблонность, ритм), правка по списку, factdiff.py.
- Что получите
- Текст и не больше двух строк «Проверить перед отправкой»; список правок — по запросу.
- Подводный камень
- Баллов «человечности» и вероятности ИИ скил не считает и обхода детекторов не обещает.
Найти признаки машинного текста без правки
Подрядчик сдал 12 статей, папка ./incoming/. Не правь, просто покажи, где текст звучит как нейросеть.
A contractor delivered 12 articles in ./incoming/. Don't edit, just show where they read as machine-written.
- Что сделает скил
- deai, операция «Аудит»: deai_scan.py по каждому файлу и чтение; сила признака решает, что править.
- Что получите
- По файлу: сила · строка · цитата · что мешает · действие, и итог «чисто / отдельные места / кластеры → править / пересобрать».
- Подводный камень
- Скрипт даёт места для чтения, а не вердикт; одна слабая примета без кластера — не повод править.
Переписать текст из штампов, сохранив все факты
Текст ./pages/o-kompanii.md весь из общих слов. Перепиши заново, но только из того, что там реально сказано.
./pages/about.md is all filler. Rewrite it from scratch using only what it actually says.
- Что сделает скил
- edit, режим C: голый список фактов исходника → текст заново → deai → factdiff.py.
- Что получите
- Список правок (цитата → действие), итоговый текст, отчёт factdiff.py.
- Подводный камень
- Если фактов мало, текст станет короче. «Примерные» цифры на месте пустых слов скил не подставляет.
Собрать профиль голоса бренда из своих текстов
Вот пять наших лучших постов в ./voice/. Собери профиль голоса, чтобы дальше писать так же.
Here are five of our best posts in ./voice/. Extract a voice profile so new texts sound the same.
- Что сделает скил
- voice, режим «Извлечь»: text_metrics.py и deai_scan.py по каждому образцу, чтение (кто говорит, «вы» или «ты», как вводятся термины и цифры).
- Что получите
- Черновик templates/voice-profile.md с фрагментами образцов и вопросами по спорным местам.
- Подводный камень
- Только тексты, на которые у вас есть права; голос реального человека — с его согласия. Без вашего утверждения профиль — гипотеза.
landing
Написать лендинг услуги без выдуманных отзывов и цифр
Нужен лендинг для услуги «аудит сайта под Яндекс». Что мы реально даём — в ./offer.md. Отзывов пока нет.
We need a landing page for a technical SEO audit service. What we actually offer is in ./offer.md. No testimonials yet.
- Что сделает скил
- landing → deai → headlines: диагноз ситуации, таблица оффера с источниками, блоки страницы.
- Что получите
- Текст по блокам, таблица оффера, список [NEED: …] на месте отзывов, кейсов и гарантий.
- Подводный камень
- Дефицит и сроки — только реальные. Если у оффера нет доказательств, на странице останутся пометки [NEED], а не заглушки.
Отревьюить существующий лендинг
посмотри https://example.ru/kurs-seo/ как редактор: что непонятно, что не подтверждено, где обещаем лишнее
review https://example.com/seo-course/ as an editor: what's unclear, what's unproven, where we overpromise
- Что сделает скил
- landing, ревью от стратегии к строке: короткий разбор по шести вопросам, затем правки по строкам.
- Что получите
- Разбор, правки «цитата → проблема → правка», список [NEED: …].
- Подводный камень
- Балла конверсии не будет.
links
Найти страницы-сироты по выгрузке ссылок
Вот выгрузка ссылок краулера edges.csv (from,to,anchor) и список URL из sitemap sitemap_urls.txt. Найди сирот и слишком глубокие страницы.
Here's a crawler link export edges.csv (from,to,anchor) and the sitemap URL list sitemap_urls.txt. Find orphans and pages buried too deep.
- Что сделает скил
- links: link_graph.py edges.csv --pages sitemap_urls.txt — входящие из main и сквозные отдельно, глубина от главной, внутренний PageRank, сироты.
- Что получите
- Сводка графа (источник, страниц, полнота, сироты, глубина) и таблица проблемных страниц.
- Подводный камень
- «Сирота» — только при полном графе; иначе формулировка «в проверенных N страницах ссылок нет». Вместо CSV можно дать папку сохранённых HTML (--html-dir).
Составить план перелинковки с точными предложениями для вставки
Хочу усилить /uslugi/remont-vannoy/. Подбери 3–5 страниц, откуда поставить ссылку, и покажи, в какое предложение её вставить.
I want to boost /services/bathroom-renovation/. Pick 3–5 donor pages and show the exact sentence where each link goes.
- Что сделает скил
- links, шаги 7–9: доноры по теме и видимости, проверка, что донор и цель отдают 200 и индексируемые, поиск href цели в HTML донора.
- Что получите
- Таблица: донор → цель → анкор → дословное предложение донора → новое предложение → регион → приоритет.
- Подводный камень
- URL доноров скил не придумывает и не собирает по шаблону; в CMS ничего не вставляет без «да».
Разобрать внешние ссылки по бесплатным данным и решить про disavow
Выгрузил «Ссылки» из GSC и внешние ссылки из Вебмастера в ./links/. Нужен ли нам disavow?
I exported Links from Search Console and Bing Webmaster into ./links/. Do we need a disavow file?
- Что сделает скил
- Модуль backlinks: сведение источников, профиль доноров по каждому источнику отдельно, анкоры, цели ссылок (http_safe.py по топу, до 20), вердикт по disavow.
- Что получите
- Строка полноты данных, таблица доноров, распределение анкоров с размером выборки, цели со статусами и планом 301, вердикт по disavow с основанием.
- Подводный камень
- Disavow — только при ручной мере или её реальной угрозе. Покупку ссылок и PBN скил не предлагает.
fix
Сгенерировать JSON-LD только из данных страницы
сгенерируй разметку Organization и BreadcrumbList для https://example.ru/kontakty/ — только то, что есть на странице
generate Organization and BreadcrumbList markup for https://example.com/contacts/ — only from what's on the page
- Что сделает скил
- schema, шаг 9: гейт «разметки ещё нет», JSON-LD одним @graph с устойчивыми @id, значения — со страницы или от вас.
- Что получите
- Черновик JSON-LD, список полей, не заполненных из-за отсутствия данных, способ проверки после правки.
- Подводный камень
- Плейсхолдеров вроде [Company Name] не будет: нет значения — нет поля.
Подготовить патч robots.txt с проверкой до и после
Закрой от обхода внутренний поиск /search?q= и сортировки ?sort=. Дай патч и докажи, что карточки остались открыты. Файл ./public/robots.txt
Block internal search /search?q= and ?sort= from crawling. Give me a patch and prove product pages stay open. File: ./public/robots.txt
- Что сделает скил
- fix + indexing: правка по матрице решений, robots_check.py --urls-file до и после по одному списку URL; policies/actions.md — патч, проверка, откат.
- Что получите
- Дифф robots.txt, таблица доступа до/после, команда отката.
- Подводный камень
- noindex и Disallow на одном URL не сочетаются: закрытую в robots страницу поисковик не прочитает и noindex не увидит.
Исправить дубли title в шаблоне
У 400 карточек одинаковый title, шаблон в resources/views/card.blade.php. Предложи различитель из данных записи. Файлы не меняй, нужен diff.
400 product cards share one title; the template is resources/views/card.blade.php. Suggest a distinguishing field from the record. Don't edit, give me a diff.
- Что сделает скил
- fix + on-page + headlines: группы дублей, какое поле записи различает страницы по смыслу, правка шаблона черновиком.
- Что получите
- Diff шаблона, 3–5 примеров title до и после на реальных записях, как проверить после выкладки.
- Подводный камень
- По умолчанию скил только читает. Diff в рабочей копии — уровень patch и только по вашему запросу; выкладка — после явного «да».
Исправить canonical, который ведёт на редирект
На страницах с ?utm canonical ведёт на адрес без слэша, а он отдаёт 301. Как правильно и где править?
On ?utm pages the canonical points to a URL without a trailing slash, which 301s. What's right and where to fix it?
- Что сделает скил
- tech-audit: http_safe.py по canonical-адресу, цепочка редиректов, финальный URL; правка черновиком.
- Что получите
- Находка canonical.points_to_redirect с доказательством и проверкой: page_facts.py показывает финальный адрес, http_safe.py по нему отдаёт 200.
measure
Сравнить два периода в Search Console
Сравни сентябрь и октябрь по выгрузкам GSC в ./gsc/sep.csv и ./gsc/oct.csv. Что выросло, что упало?
Compare September and October using ./gsc/sep.csv and ./gsc/oct.csv. What went up, what went down?
- Что сделает скил
- measure, режим «Сравнение периодов»: итог → страницы и запросы → топ изменений по абсолютной величине; периоды равной длины с одинаковыми днями недели.
- Что получите
- Вердикт, таблица изменений с абсолютными и относительными значениями, источником и периодом; порог «заметного» изменения назван явно.
- Подводный камень
- Средняя позиция — среднее по показам, а не место в выдаче; свежие неполные дни помечаются.
Найти запросы рядом с топом
найди запросы, где мы на 8–20 позиции и есть показы. Выгрузка ./gsc/queries_28d.csv
find queries where we sit at positions 8–20 with real impressions. Export: ./gsc/queries_28d.csv
- Что сделает скил
- measure, режим «Рядом с топом»: окно позиций и порог показов задаются явно; дальше — кандидаты для edit и links.
- Что получите
- Список запросов и страниц с показами, позицией и действием-исполнителем (edit.md, links.md).
- Подводный камень
- Это кандидаты на доработку, а не обещание первой страницы.
Снять снимок SEO-элементов до релиза и сравнить после
Завтра выкатываем новый шаблон карточки. Сними снимок 10 ключевых URL из key_urls.txt сейчас, а после релиза сравним.
Tomorrow we ship a new product template. Snapshot the 10 key URLs in key_urls.txt now; we'll diff after release.
- Что сделает скил
- measure, режим «Дрейф после релиза»: page_facts.py --out before/<slug>.json, после выкладки то же в after/, сравнение по уровням.
- Что получите
- Таблица CRITICAL / WARNING / INFO по URL: пропавший noindex или H1, смена canonical, изменения title и разметки.
- Подводный камень
- Папки before/ и after/ должны существовать заранее: скрипты не пишут в несуществующую папку и в путь с «..».
Разобрать видимость сайта в Алисе AI по данным Вебмастера
Выгрузил из Вебмастера «Видимость сайта в Алисе AI» за 3 месяца: ./webmaster/alice.csv. Мы растём или падаем?
I exported Alice AI visibility from Yandex Webmaster for 3 months: ./webmaster/alice.csv. Are we growing or dropping?
- Что сделает скил
- measure, режим «Алиса AI»: Share of Voice по неделям, примеры запросов с сайтом и без.
- Что получите
- Тренд за период, а не сравнение соседних недель; при падении — что проверить (индексация, позиции, свежесть).
- Подводный камень
- Падение SoV скил не трактует как санкции. Данные выгружает владелец: в интерфейс Вебмастера агент не ходит.
Логи, миграции, локальное, магазины, метрики текста
Посмотреть по логам, какие боты реально ходят на сайт
Вот access.log nginx за неделю, 1,2 ГБ: ./logs/access.log. Кто из ботов ходит, куда и что получает?
Here's a week of nginx access.log, 1.2 GB: ./logs/access.log. Which bots come, where do they go, what do they get?
- Что сделает скил
- Модуль logs: чтение потоком, классификация по UA (поисковые, AI по уровням, прочие), разрезы по дням, группам URL, статусам и типам ресурсов, сверка с матрицей индексации.
- Что получите
- Окно лога и ограничения, таблица ботов (заявлено / подтверждено, хиты, доли 2xx–5xx), обход по группам URL.
- Подводный камень
- Лог origin не видит ответов из кэша CDN: «не найден в логах» значит «не найден в этом окне». IP в отчёт не печатаются.
Отличить настоящего Googlebot от поддельного
Какой-то Googlebot долбит /search?q= по 20 запросов в секунду. Проверь, настоящий ли, лог Caddy в JSON: ./logs/caddy.json
Some 'Googlebot' hits /search?q= 20 times a second. Check if it's real; Caddy JSON log at ./logs/caddy.json
- Что сделает скил
- bot_verify.py --log --only-claimed: обратный DNS → домен из списка → прямой DNS → тот же IP, для Googlebot, YandexBot и Bingbot.
- Что получите
- Отдельные строки «заявлен Googlebot, подтверждён» и «заявлен, не подтверждён»; меры против подделок черновиком.
- Подводный камень
- Проверка делает DNS-запросы; лимит уникальных IP — флаг --max-ips.
Составить карту 301-редиректов при смене структуры URL
Переносим блог с /blog/2023/05/slug на /blog/slug. Старые URL — old_urls.txt, новые — из новой sitemap. Нужна карта редиректов.
We're moving the blog from /blog/2023/05/slug to /blog/slug. Old URLs in old_urls.txt, new ones from the new sitemap. Need a redirect map.
- Что сделает скил
- migration: инвентарь, приоритет URL с трафиком и ссылками, карта old_url,new_url,type,reason с учётом слэша, регистра и параметров.
- Что получите
- CSV карты редиректов с колонкой status_after, чек-лист выкладки, план наблюдения с датами.
- Подводный камень
- URL без аналога уходит в 404/410, а не на главную. Критерии отката задаёт владелец, скил их не придумывает.
Проверить редиректы после переезда на новый домен
Вчера переехали с old-example.ru на example.ru. Проверь 20 главных старых адресов из priority.txt: один ли шаг 301 и куда ведёт.
We moved from old-example.com to example.com yesterday. Check the 20 priority old URLs in priority.txt: single 301 hop, right target?
- Что сделает скил
- migration, шаг 6: http_safe.py по каждому старому URL последовательно с паузой; сравнение новых страниц со снимком «до».
- Что получите
- Таблица old_url → цепочка → финальный URL → совпадает ли с картой; что пропало на новых страницах.
- Подводный камень
- Переиндексация занимает недели: выводы по первым дням скил не делает. Смену адреса в GSC и переезд в Вебмастере делает владелец.
Сверить название, адрес и телефон на сайте и в картах
У нас две точки в Казани. Сверь NAP на странице https://example.ru/kontakty/ с карточками в Яндекс Картах, Google и 2ГИС — ссылки в maps.txt
We have two locations. Compare NAP on https://example.com/contacts/ with our Google Business Profile and Yandex Maps listings linked in maps.txt
- Что сделает скил
- Модуль local: page_facts.py по странице контактов, сравнение с карточками площадок, проверка дублей.
- Что получите
- Таблица NAP: площадка × название × адрес × телефон × часы × сайт × расхождение; список дублей.
- Подводный камень
- «Нет карточки» — только после поиска на самой площадке. Правила Яндекс Бизнеса и 2ГИС в пакете не разобраны, сверять по их справке.
Сделать страницы филиалов, а не клоны с заменой города
Планируем страницы для 6 филиалов. Данные по каждому в branches.csv. Что должно быть на странице точки и какая разметка?
We're planning pages for 6 branches; data per branch in branches.csv. What belongs on each page and which markup?
- Что сделает скил
- local, шаг 8 + schema: адрес, телефон, часы, проезд, услуги этой точки; LocalBusiness на точку из ваших данных.
- Что получите
- План страниц точек и черновик LocalBusiness для каждой.
- Подводный камень
- Страницы «услуга + город» без точки в городе скил отправит через гейт programmatic: без своих данных это риск дорвея.
Сверить цену и наличие в разметке товара с карточкой
проверь 5 карточек товара из products.txt: совпадают ли цена и наличие в разметке с тем, что видит покупатель
check the 5 product pages in products.txt: do price and availability in the markup match what shoppers see
- Что сделает скил
- ecommerce: тип страницы (merchant listing или product snippet), page_facts.py по каждой карточке с паузой, сверка Product/Offer с видимым текстом.
- Что получите
- Таблица: URL × цена на странице × цена в разметке × наличие × отзывы × вариант; черновик правки шаблона.
- Подводный камень
- Цену, которую вставляет JavaScript, по сырому HTML не видно; без рендера скил пометит это, а не утвердит расхождение.
Решить, какие фильтры каталога индексировать
В каталоге фильтры по цвету, бренду, цене и сортировка, комбинаций тысячи. Выгрузка URL с параметрами — facets.txt. Что открыть, что закрыть?
Our catalog has colour, brand, price filters and sorting — thousands of combinations. Parameter URLs in facets.txt. What to open, what to close?
- Что сделает скил
- ecommerce, шаг 6 + матрица indexing: параметры, число комбинаций, порядок параметров, пустые выдачи, спрос по фасету.
- Что получите
- Таблица фасетов: параметр × комбинаций × спрос × решение; правило для снятых товаров.
- Подводный камень
- Спрос на фасет — только из ваших данных (Вебмастер, GSC, Wordstat); без них решение помечается как предварительное.
Посчитать знаки без пробелов, тошноту и воду
посчитай знаки без пробелов, тошноту и воду в ./drafts/laminat.md, ключи: ламинат для кухни; влагостойкий ламинат
count words, characters and keyword density in ./drafts/laminate.md, keys: laminate for kitchen; waterproof laminate
- Что сделает скил
- text_metrics.py --keys: слова, знаки без пробелов, ритм (CV длины предложений), вхождения ключей по основам, тошнота и вода.
- Что получите
- Короткая сводка, полный JSON по --out, сравнение с требованиями заказчика, если они есть.
- Подводный камень
- Всё, кроме счётчиков, — оценка. Тошнота и плотность ключа не факторы ранжирования; хороший текст ради цифры не переписывают.
Сравнить две версии текста по метрикам
Сравни ./v1.md и ./v2.md: объём, ритм, ключи. Какая ближе к ТЗ ./brief.md?
Compare ./v1.md and ./v2.md: length, rhythm, keys. Which one is closer to the brief in ./brief.md?
- Что сделает скил
- text_metrics.py на обеих версиях с одними ключами; factdiff.py — если нужно знать, какие факты разошлись.
- Что получите
- Таблица метрик v1 против v2 и соответствие требованиям ТЗ «по оценке этого скрипта».
- Подводный камень
- Сравнивать имеет смысл только два прогона одного скрипта с одинаковыми ключами, не с цифрами Advego.
Команды без агента
Проверки можно запускать и руками. Скрипты написаны на Python 3.10+ на одной стандартной библиотеке и отдают JSON. В сеть ходит только http_safe.py: он не пускает запросы на внутренние адреса, проверяет каждый шаг редиректа и ограничивает размер ответа. Команды ниже запускаются из корня клонированного репозитория.
python3 papa-seo/scripts/http_safe.py fetch https://example.ru/ --ua-of GPTBot --text --out gptbot.json
python3 papa-seo/scripts/page_facts.py https://example.ru/uslugi/ --out facts.json
python3 papa-seo/scripts/robots_check.py https://example.ru/robots.txt --urls-file urls.txt --bots Googlebot,YandexBot,YandexAdditional,OAI-SearchBot,GPTBot,ClaudeBot --out robots.json
python3 papa-seo/scripts/sitemap_check.py https://example.ru/sitemap.xml --site https://example.ru --follow-index --max-children 2 --out sitemap.json
python3 papa-seo/scripts/link_graph.py edges.csv --pages sitemap_urls.txt --csv-out nodes.csv --out graph.json
python3 papa-seo/scripts/bot_verify.py --log access.log --only-claimed --max-ips 200 --out verify.json
python3 papa-seo/scripts/text_metrics.py article.md --keys "ламинат для кухни; влагостойкий ламинат" --out metrics.json
python3 papa-seo/scripts/deai_scan.py article.md --genre expert --lang ru --out scan.json
python3 papa-seo/scripts/factdiff.py before.md after.md --out diff.json
Что лежит в пакете
papa-seo/ SKILL.md роутер: запрос → режим → нужные модули policies/ безопасность, правила доказательств, лестница полномочий modules/ по файлу на функцию: tech-audit, indexing, on-page, schema, … references/ датированные факты, мифы, ростер ботов, Яндекс, типы страниц, русский стиль templates/ схема находки, ТЗ, отчёт, контекст проекта, профиль голоса scripts/ Python 3.10+, только стандартная библиотека tests/ python3 -m unittest discover
Каждая находка аудита записывается по схеме templates/finding.schema.json: откуда и когда взят факт, фрагмент-доказательство, статус (confirmed, likely или hypothesis), поисковик, правка и способ проверить её после выкладки. Прежде чем советовать «добавьте X», агент смотрит в живой HTML, правда ли X там нет. «На всём сайте нет X» он пишет только при полном покрытии.
Безопасность и ограничения
Что делает
- Берёт одну страницу или список до 20 адресов, по очереди и с паузой от 2 секунд.
- Показывает как находку скрытые обращения к модели в чужом HTML: в комментариях, в
display:none, в невидимых символах. - Пишет покрытие: «проверено N из ~M URL».
- Готовит черновик или патч правки вместе со способом проверки и отката.
- Подключает Search Console, Вебмастер и GA4 только на чтение и только вашими ключами.
Чего не делает
- Не обходит сайт целиком без просьбы. Если попросите, обход идёт в один поток с предупреждением о нагрузке.
- Не публикует, не деплоит и не отправляет ничего без вашего «да» в чате.
- Не выполняет инструкции из чужих страниц, robots.txt, CSV и текстов конкурентов.
- Не обходит CAPTCHA и защиту от ботов, не читает cookies браузера.
- Не придумывает частотность, позиции, трафик и CTR и не обещает их роста.
- Не предлагает покупку ссылок, PBN, дорвеи, клоакинг и скрытый текст.
Ограничения версии 0.1.0. JavaScript не исполняется: проверяется сырой HTML, признаки отрисовки на клиенте только помечаются. Скрытый текст распознаётся по inline-стилям и известным классам, внешний CSS не учитывается. bot_verify.py проверяет rDNS только у Googlebot, YandexBot и Bingbot. Внешнего аудита безопасности и фаззинга парсеров не было. Сайт-фикстура в evals/ для сравнения «модель без скила / со скилом» готова, но на моделях сравнение ещё не прогоняли.
Политики пакета — это инструкции для модели. Скрипты закрывают то, что можно закрыть кодом, а хитрая инъекция может обмануть саму модель, поэтому смотрите, что агент собирается сделать, прежде чем согласиться.
Вопросы и ответы
Как установить скилл papa-seo в Claude Code?
Скопируйте папку papa-seo из репозитория в ~/.claude/skills/papa-seo, чтобы скил работал во всех проектах, или в .claude/skills/papa-seo внутри одного проекта. Установщика нет, другие настройки копирование не трогает. Скриптам нужен Python 3.10 или новее, сторонних пакетов нет.
Работает ли papa-seo в Codex?
Да. Codex ищет скилы в папке .agents/skills: для всех проектов это ~/.agents/skills/papa-seo, для одного репозитория — .agents/skills/papa-seo в нём. Путь ~/.codex/skills из старых инструкций текущая документация Codex не называет (проверено 24.10.2026).
Можно ли сделать SEO-аудит сайта нейросетью?
Можно, если нейросеть смотрит на живую страницу, а не отвечает по памяти. С papa-seo агент скачивает HTML, разбирает его скриптом и к каждой находке прикладывает фрагмент-доказательство и статус: confirmed, likely или hypothesis. Сайт целиком по умолчанию не обходится, в отчёте написано, сколько адресов проверено. Отчётов Search Console и Вебмастера агент сам не видит, выгрузку даёте вы.
Чем GEO-оптимизация отличается от SEO?
GEO — работа над тем, чтобы страницу брали в ответы AI-поиска: AI Overviews, ChatGPT search, Perplexity, Алисы AI. Основа общая с SEO: страница открыта, проиндексирована, текст есть в HTML без JavaScript. Отличается набор ботов, у поиска и обучения они разные. И фрагмент должен быть понятен без соседних абзацев. Специальной AI-разметки не существует.
Что такое llms.txt и нужен ли он сайту?
Это файл в корне сайта со списком главных страниц и короткими описаниями для языковых моделей. Google Поиск его не использует: по документации Google файл не вредит и не помогает. У Яндекса сведений о том, что его роботы читают llms.txt чужих сайтов, нет. Поэтому papa-seo отсутствие файла ошибкой не считает, а по просьбе соберёт его из вашего списка страниц.
Как разрешить или закрыть AI-ботов в robots.txt?
Для поиска и для обучения у компаний разные боты. Обучение — GPTBot у OpenAI, ClaudeBot у Anthropic, Google-Extended у Google. Поиск — OAI-SearchBot, Claude-SearchBot, Googlebot. Можно закрыть первых и оставить вторых. У Яндекса показ в ответах Алисы AI управляется своей группой YandexAdditional, правило User-agent: * на неё не действует. Скил готовит правку диффом и проверяет доступ до и после.
Как попасть в ответы нейросетей и Яндекс Нейро?
Гарантированного способа нет, и papa-seo его не обещает. Проверить можно условия, без которых страница туда точно не попадёт: открыта для поискового бота нужной системы, есть в индексе, сниппет не закрыт директивами, основной текст виден без JavaScript, ответ стоит в начале раздела. Для Яндекса ещё нужно, чтобы robots.txt не запрещал страницу группе YandexAdditional.
Можно ли написать SEO-текст нейросетью?
Можно, если у нейросети есть факты. В papa-seo текст пишется по ТЗ, где у каждой цифры есть источник. Чего нет в таблице фактов, в текст не попадает, на месте пробела остаётся пометка [NEED: …]. Опыт, истории и мнения, которых нет у автора, скил не добавляет. После текста идут проверка фактов и де-AI вычитка.
Как убрать признаки ИИ из текста?
Напишите агенту «убери ИИ-стиль из файла, смысл и цифры не меняй». deai_scan.py найдёт штампы, остатки чат-бота, невидимые символы и однообразный ритм, агент перепишет эти места, а factdiff.py покажет, не пропала ли цифра или оговорка. Балла «человечности» нет, обхода детекторов ИИ скил не обещает.
Нужны ли платные сервисы: Wordstat, DataForSEO, Ahrefs?
Нет. Хватает публичного URL, ваших файлов и выгрузок из Search Console и Вебмастера. Платные API скил может предложить как опцию и каждый раз пишет, что это платно. Без них там, где нужна частотность или ссылочный индекс, в отчёте будет «нет данных».
Можно ли подключить Google Search Console и Вебмастер?
Да, только на чтение и только вашими ключами. Можно обойтись и без доступа: дать CSV из «Эффективности» Search Console или «Исключённых страниц» Вебмастера. Режим measure сравнит периоды, разложит просадку на спрос, позицию, CTR и индексацию и найдёт запросы рядом с топом.
Исходники на GitHub
Модули, скрипты и тесты лежат в репозитории AffPapa/papa-seo. Ошибки и предложения — в Issues, уязвимости — приватно, через вкладку Security.
На чём собран пакет
Пакет собран после проверки около 94 открытых репозиториев со SEO- и копирайтинг-скилами. Методики и формулировки брали только там, где это разрешает лицензия, и у первоисточников, а не у клонов. Где лицензии нет, взяты одни идеи, пересказанные своими словами. Среди доноров — AgriciDaniel/claude-seo, seo-skills/seo-audit-skill, inhouseseo/superseo-skills, artwist-polyakov/polyakov-claude-skills и Nanako0129/sepia. У каждого заимствованного файла в шапке указаны источник и коммит, заимствования сохраняют свои лицензии.