NanoSkill
Добавить навык

Навык агента для SEO-аудита

отJeffLi1993382звезды GitHubGitHub

Легковесный навык агента для SEO-аудита для Claude Code, OpenClaw и Codex. Запускайте быстрые SEO-аудиты отдельных страниц, проверяйте основные проблемы на уровне страницы и сайта и генерируйте структурированный SEO-отчёт с практическими исправлениями.

seo-аудитseoонпейдж-сеоаудит-сайтаПроверка безопасности пройдена
Превью результата

Полное демо

Посмотрите реальный результат SEO-аудита, сгенерированный этим навыком агента.

Начало работы

Запустите первую задачу

  1. seo-audit-step-1
    01

    Шаг 1:Установка

    Добавьте навык в вашего агента

  2. seo-audit-step-2
    02

    Шаг 2:Задача аудита

    Используйте один URL и запросите приоритизированный аудит.

  3. seo-audit-step-3
    03

    Шаг 3:Просмотр результата

    Получите приоритизированные SEO-исправления, которые можно сразу начать использовать.

Команда установки

$ npx skills add JeffLi1993/seo-audit-skill

Описание

SEO Аудит — это легковесный навык агента для SEO-аудита для AI-кодинг-агентов, таких как Claude Code, OpenClaw и Codex. Он помогает агенту проинспектировать один URL, проверить основные проблемы SEO и сгенерировать структурированный отчёт об аудите с доказательствами, влиянием и рекомендованными исправлениями.

Навык фокусируется на первичных проверках SEO, включая теги заголовков, мета-описания, теги H1, канонические теги, альтернативный текст изображений, размещение ключевых слов, robots.txt, sitemap.xml, обработку 404 ошибок, канонизацию URL, страницы доверия E-E-A-T и валидацию JSON-LD схем.

Используйте его, когда вам нужна быстрая проверка здоровья SEO перед публикацией страницы, ревью лендинга, диагностика основных проблем ранжирования или принятие решения о необходимости более глубокого технического SEO-аудита.

Ключевые функции

Почему это мощно

  • Быстрый SEO-аудит одной страницы

    Быстрый SEO-аудит любого URL и получение первичной оценки SEO-здоровья страницы без настройки полноценного краулера или аналитического рабочего процесса.

  • Основные проверки on-page SEO

    Проверка тегов title, мета-описаний, заголовков H1, канонических тегов, атрибутов alt изображений, структуры заголовков, размещения ключевых слов, внутренних ссылок и количества слов.

  • Основы SEO на уровне сайта

    Проверка базовых SEO-сигналов, таких как robots.txt, sitemap.xml, обработка ошибок 404, канонические URL, i18n / hreflang и страницы доверия E-E-A-T.

  • Валидация разметки JSON-LD

    Определение наличия правильных структурированных данных на странице, проверка распространённых типов разметки и выявление отсутствующих или неполных полей JSON-LD.

  • Структурированный отчёт об SEO-аудите

    Создание чистого отчёта об SEO-аудите со статусами «пройдено», «предупреждение» и «не пройдено», а также доказательствами, влиянием и конкретными исправлениями для каждой важной проблемы.

Сценарии

Когда использовать

  • Аудит целевой страницы перед публикацией

    Используйте этот навык перед запуском главной страницы, страницы продукта, страницы инструмента или SEO-целевой страницы, чтобы выявить базовые проблемы SEO на раннем этапе.

  • Выполнить быструю проверку SEO-здоровья

    Проверьте, имеет ли страница правильные теги title, мета-описание, заголовок H1, канонический тег, разметку, внутренние ссылки и другие базовые SEO-сигналы.

  • Проверка существующих страниц с проблемами ранжирования

    Используйте его, когда страница проиндексирована, но плохо ранжируется, или когда вы хотите быстро выявить очевидные проблемы на уровне страницы и сайта.

SKILL.md

seo-audit — Базовый SEO-аудит

Легкий навык SEO-агента для быстрых одностраничных SEO-аудитов по умолчанию. Работает на OpenClaw. Подходит для первичных проверок страниц или когда нужна быстрая оценка без полной технической глубины.


Когда использовать этот навык

Используйте seo-audit, когда:

  • Пользователь говорит: «проаудируй эту страницу», «проверь SEO», «проанализируй мой URL», «быстрая проверка SEO», «что не так с моей страницей»
  • Не запрошена конкретная глубина — это точка входа по умолчанию
  • Пользователю нужно быстрое читаемое резюме, а не исчерпывающий технический разбор

Если пользователь хочет большей глубины, переключитесь на seo-audit-full:

Совет: Для глубокого технического аудита, продвинутого внутреннего SEO или полных отчетов используйте навык seo-audit-full.


Ожидаемые входные данные

ВводОбязательноПримечания
URL страницыДаСтраница для аудита
Исходный HTML или содержимое страницыОпциональноПозволяет более точный анализ на странице
GSC / данные аналитикиОпциональноДля базового аудита не требуются

Если предоставлен только URL, а исходный код или данные краулера недоступны, четко укажите:

Ограничение: Этот аудит основан только на видимом содержимом страницы и общедоступных сигналах. Исходный код, данные GSC, журналы обхода и метрики производительности для этого аудита недоступны.


Вывод

Создайте Отчет о базовом SEO-аудите, заполнив шаблон по адресу assets/report-template.html, затем сохраните его в файл — никогда не выводите необработанный HTML в терминал.

Именование файла: reports/<hostname>-<slug>-audit.html

https://example.com/blog/best-tools → reports/example-com-blog-best-tools-audit.html
https://example.com/                → reports/example-com-audit.html

После сохранения сообщите пользователю:

✅ Отчет сохранен → reports/example-com-audit.html
   Открыть сейчас? (да / нет)

Если да → выполните: open reports/example-com-audit.html


Заполнители шаблона — заполняйте каждый независимо:

ЗаполнительСодержимое
{{summary_verdict}}Одно предложение: общее количество проверок, сколько провалено/предупреждено/пройдено
{{summary_critical_html}}<li> для каждого критического элемента (провал) или <li class="summary-empty">Нет</li>
{{summary_warnings_html}}<li> для каждого предупреждения или <li class="summary-empty">Нет</li>
{{summary_passing_html}}<li> для каждой пройденной проверки или <li class="summary-empty">Нет</li>

Скрипты

Запустите эти скрипты перед тем, как писать какие-либо выводы. Они выводят структурированный JSON — используйте JSON непосредственно в качестве доказательства; не загружайте те же URL вручную повторно.

Зависимости: pip install requests (для разбора HTML используется стандартная библиотека Python)

# Шаг 1: проверки уровня сайта (robots.txt + sitemap.xml)
python scripts/check-site.py https://example.com

# Шаг 2: проверки уровня страницы (H1, title, meta description, canonical)
python scripts/check-page.py https://example.com
# С основным ключевым словом (рекомендуется — включает проверку наличия ключевого слова в H1)
python scripts/check-page.py https://example.com --keyword "running shoes"

# Опционально: получить необработанный HTML страницы для дальнейшего анализа
python scripts/fetch-page.py https://example.com --output page.html

# Шаг 3: валидация JSON-LD схемы
python scripts/check-schema.py https://example.com
# Или из ранее полученного HTML (избегает избыточной загрузки):
python scripts/check-schema.py --file page.html

Каждый скрипт завершается с кодом 0 (все пройдено/предупреждения) или 1 (есть провалы/ошибки).

СТРОГИЙ ОБЪЕМ — не добавляйте никаких проверок, не перечисленных ниже. Без исключений.

Допустимые проверки уровня сайта (в {{site_checks_html}}):

  • robots.txt · sitemap.xml · Обработка 404 · Каноникализация URL · i18n / hreflang

Допустимые проверки E-E-A-T (в {{eeat_checks_html}}):

  • О нас · Контакты · Политика конфиденциальности · Условия использования · Медиа/Партнеры (только при наличии)

Допустимые проверки уровня страницы (в {{page_checks_html}}), выводятся строго в этом порядке: URL Slug · Title Tag · Meta Description · H1 Tag · Canonical Tag · Image Alt Text · Word Count · Keyword Placement · Heading Structure · Internal Links · Schema (JSON-LD)

Логика для Image Alt Text:

  • Разберите теги <img> из статического HTML
  • Пройдено: все изображения имеют непустой alt (декоративные изображения с alt="" допустимы)
  • Предупреждение: любое контентное изображение без атрибута alt
  • Не проверено (статус-info): в статическом HTML найдено 0 изображений → вероятно, рендеринг через JS, проверить невозможно

⛔ ЖЕСТКОЕ ПРАВИЛО — Выводите ТОЛЬКО строки проверок, определенные в report-template.html. Если проверка не входит в разрешенные списки выше, НЕ выводите её — даже если обнаружите проблемы. Без исключений. Никаких «бонусных» проверок. Никакой импровизации. Шаблон — единственный источник истины. Рассматривайте его как строгий белый список.

По-прежнему ЗАПРЕЩЕНО (относится к seo-audit-full): OG-теги · Twitter Card · Социальные теги · Вес страницы · Core Web Vitals · Robots Meta

Как использовать вывод JSON:

  • Сопоставьте status каждого поля → pass / warn / fail / error непосредственно с таблицей проверок отчета
  • Используйте строку detail каждого поля как отправную точку для строки «Доказательство» в выводах
  • Не противоречьте выводу скрипта, если у вас нет дополнительных наблюдаемых доказательств
  • Разделяйте группы проверок с помощью <div class="subsection-label">Метка</div> внутри {{site_checks_html}}: Crawlability · URL Canonicalization · i18n / hreflang · Schema (JSON-LD) и <div class="subsection-label">E-E-A-T Trust Pages</div> перед {{eeat_checks_html}}

Проверка LLM — обязательна, когда llm_review_required: true:

Скрипт помечает поля, требующие семантической или качественной оценки, которую он не может выполнить. Никогда не оставляйте llm_review_required: true неразрешенным — всегда принимайте явное оценочное решение.

H1 — срабатывает, когда keyword_match == "partial":

h1_text : (из h1.values[0])
keyword : (переданный --keyword скрипту)

Оценка: Охватывает ли этот H1 семантически поисковое намерение ключевого слова?
  - Учитывайте синонимы, естественные варианты, охват тематики
  - да → понизьте до "pass", отметьте вариант
  - нет → оставьте "warn" или повысьте до "fail", объясните пробел

Title — срабатывает, когда keyword_match == "partial" ИЛИ keyword_position != "start":

title   : (из title.value)
keyword : (переданный --keyword)

Оценка:
  1. Охватывает ли заголовок семантически поисковое намерение ключевого слова?
  2. Является ли заголовок грамматически правильным и естественно читаемым?
  3. Позиция ключевого слова — применяйте разные стандарты в зависимости от типа страницы:
     - Домашняя страница: Бренд + основное ключевое слово — правильно (например, "Acme | AI Workflow Automation")
                    Не отмечайте размещение бренда на первом месте как проблему.
     - Внутренние страницы: Основное ключевое слово должно быть в начале (например, "AI Workflow Automation for Teams — Acme")
                    Отмечайте, если ключевое слово зарыто в середине заголовка без уважительной причины.

ВАЖНО — не отмечайте как негатив:
  - Годы (например, "2026") → сигнализируют о свежести, повышают CTR — расценивайте как плюс, если только
    страница не является явно вечнозеленым контентом, где датировка вредит долговечности.
  - Числа (например, "5 best", "Top 10", "3 steps") → создают четкие ожидания,
    стабильно превосходят нечисловые заголовки по CTR — всегда расценивайте как плюс.
  - Специфические определители ("Open-Source", "Self-Hosted", "Free") → сужают намерение
    и привлекают более качественные клики — не наказывайте.

URL Slug — срабатывает, когда keyword_match != "full" или is_homepage == false:

slug    : (из url_slug.slug)
keyword : (переданный --keyword)

Оценка:
  1. Содержит ли slug основное ключевое слово или естественный вариант?
  2. Логична ли иерархия пути? (/category/keyword — идеал)
  3. Лаконичен и хорошо читаем?
  Домашняя страница (is_homepage: true): пропустите — оценка не требуется.

Meta Description — всегда срабатывает, когда содержимое присутствует:

meta_description : (из meta_description.value)
keyword          : (переданный --keyword)

Оцените все четыре:
  1. Законченные предложения? (1-2 предложения, без фрагментов)
  2. Упоминается конкретный результат — не расплывчатая чепуха?
     Хорошо: "Сократите время дизайна на 60% с помощью шаблонов на базе ИИ"
     Плохо:  "Лучший инструмент для всех ваших дизайнерских нужд"
  3. Ключевое слово или естественный синоним использован один раз — не переспамлен?
  4. Более конкретно, чем то, что написал бы типичный конкурент?

ВАЖНО — не отмечайте как негатив:
  - Годы (например, "2026") → сигнализируют о свежести, улучшают CTR для запросов, чувствительных ко времени.
    Только отметьте год, если страница — явно вечнозеленый контент, где датировка вредит.
  - Числа (например, "5 best", "3 steps") → конкретная специфичность, сильный сигнал CTR.
  - Завершающее "and more." → в крайнем случае незначительное замечание по стилю, никогда не Warning или Fail.

Рекомендуемый процесс работы

Выполняйте шаги в указанном порядке:

  1. Подтвердите объем — подтвердите, что это базовый аудит; отметьте отсутствующие данные

  2. Определите основное ключевое слово — загрузите страницу с помощью fetch-page.py, затем определите основное ключевое слово:

    • Если пользователь явно указал ключевое слово → используйте его напрямую
    • Если нет → прочитайте H1 страницы, заголовок и первый абзац, затем определите наиболее вероятную целевую ключевую фразу (что бы набрал ищущий, чтобы найти эту страницу?)
    • Укажите определенное ключевое слово явно перед запуском проверок:

      "Определено основное ключевое слово: open source claude alternatives"

  3. Запустите check-site.py — разберите вывод JSON на предмет robots, sitemap, обработки 404 и каноникализации URL

    Проверка 404: загрузите <origin>/this-page-definitely-does-not-exist-seo-audit-check

    • Возвращает 404 → Пройдено · Возвращает 200 (мягкий 404) → Провал · Возвращает 301 на главную → Предупреждение

    Проверки каноникализации URL (каждая — отдельная подпроверка):

    • HTTP→HTTPS: загрузите http://<host> — должен быть 301 на https://. Возвращает 200 → Провал.
    • Согласованность www: загрузите оба https://www.<host> и https://<host> — один должен перенаправлять на другой. Оба возвращают 200 → Предупреждение.
    • Завершающий слеш: сравните фактически обслуживаемый URL с каноническим тегом на странице. Несоответствие → Предупреждение.
    • Совпадение canonical: href канонического тега должен точно совпадать с итоговым URL после всех редиректов. Несоответствие → Предупреждение.
  4. Проверка инфраструктуры E-E-A-T — для каждой страницы доверия ниже проверьте два уровня:

    • Уровень 1 — Существует: загрузите URL, проверьте HTTP статус (200 = существует, 404/редирект = отсутствует)
    • Уровень 2 — Достижима: загрузите HTML главной страницы, проверьте, содержит ли футер или навигация ссылку на эту страницу
    СтраницаОбязательна
    О насДа
    КонтактыДа
    Политика конфиденциальностиДа
    Условия использованияДа
    Медиа / ПартнерыНет — включать только при наличии

    Правила статусов:

    • Страница отсутствует (не 200) → Провал
    • Страница существует, но не связана в футере/навигации → Предупреждение
    • Страница существует и связана в футере/навигации → Пройдено
    • Опциональная страница отсутствует → пропустите, не включайте строку
  5. Запустите check-page.py --keyword "<определенное_ключевое_слово>" — разберите вывод JSON на предмет H1, title, meta description, canonical и URL slug

  6. Проверка i18n / hreflang — выполняйте только если страница содержит теги hreflang или <html lang> предполагает мультиязычность:

    • Полностью пропустить (N/A), если не найдено тегов hreflang и сайт кажется одноязычным
    • Если теги hreflang присутствуют, проверьте:
      • Взаимная симметрия: каждый указанный URL должен ссылаться обратно на все остальные варианты — любая сломанная ссылка = Провал
      • Языковые коды: должны быть валидными BCP 47 (например, zh-CN не zh, en-US не en-us) — неправильный код = Предупреждение
      • x-default: должен присутствовать для страниц выбора языка или запасных — отсутствует = Предупреждение
      • Атрибут html[lang]: должен совпадать с основным hreflang страницы — несовпадение = Предупреждение
      • Структура URL: рекомендуемый шаблон — язык по умолчанию (обычно en) в корне без префикса, другие языки в подпутях (/zh/, /es/).
        • /page (en) + /zh/page + /es/page → Пройдено
        • /en/page + /zh/page → Предупреждение (префикс en избыточен, тратит глубину обхода)
        • Отмечайте только если шаблон явно неконсистентен или en имеет ненужный префикс
  7. Запустите check-schema.py — разберите вывод JSON на предмет типов схем и проверки полей

    python scripts/check-schema.py https://example.com
    # Или из ранее полученного HTML:
    python scripts/check-schema.py --file page.html
    

    Скрипт извлекает блоки JSON-LD, проверяет @type и обязательные поля в соответствии со спецификацией Schema.org. llm_review_required: true всегда устанавливается — подтвердите, что inferred_page_type соответствует фактическому содержимому страницы.

    Тип страницы → ожидаемый @type справочно:

    Тип страницыОжидаемый @typeМин. обязательные поля
    ДомашняяWebSite + Organizationname, url, logo
    Блог / СтатьяArticle или BlogPostingheadline, datePublished, author, image
    ПродуктProductname, image, offers (price, priceCurrency)
    FAQFAQPagemainEntity[].name, acceptedAnswer.text
    How-toHowToname, step[].text
    Местный бизнесLocalBusinessname, address, telephone
    Общий лендингN/A — пропустите, нет широко поддерживаемого типа
    • Пройдено: правильный @type присутствует, все обязательные поля валидны, нет конфликтов
    • Предупреждение: @type присутствует, но отсутствуют рекомендуемые поля
    • Провал: ожидаемый @type полностью отсутствует
    • N/A: общая лендинговая страница — не наказывайте
  8. Резюмируйте выводы — каждый вывод должен следовать формату Доказательство / Влияние / Исправление

  9. Приоритетные действия — перечислите топ-3 наиболее эффективных исправлений

  10. Отрисуйте отчет — сохраните в reports/<hostname>-<slug>-audit.html, затем спросите пользователя, открыть ли

  11. Предложение обновления — если обнаружены проблемы, выходящие за рамки базового, предложите seo-audit-full


Правила написания деталей отчета

Ячейка Detail в таблицах проверок должна следовать этим правилам — без исключений:

Пройдено → одна короткая фраза. Без списков, без развернутых пояснений.

Хорошо: "Valid XML urlset · 104 URLs · referenced in robots.txt."
Плохо:  "Valid XML urlset with 104 URLs. Correctly referenced in robots.txt.
        Blog posts are likely indexed through this sitemap."

Предупреждение → один <div class="detail-issue"> с ≤2 маркированными пунктами. Один <div class="detail-fix"> с исправлением.

Хорошо:
  <div class="detail-issue">· Title 48 chars — 2 below minimum. · Year "2026" will date the page.</div>
  <div class="detail-fix">Expand to 50–60 chars; remove year if evergreen.</div>

Плохо: развернутое описание в три предложения, объясняющее, что такое title tag и почему длина важна.

Провал → так же, как Предупреждение. Начинайте с точного описания провала. Без фоновых объяснений.

НЕ объясняйте, что такое проверка, НЕ повторяйте информацию, уже видимую в значке статуса, НЕ обращайтесь с читателем как с незнакомым с основами SEO.


Обязательный формат выводов

Каждый важный вывод обязан следовать этой структуре:

**Вывод: [Название вывода]**

- **Доказательство:** [Что наблюдалось — прямая цитата, ссылка на скриншот или измеримые данные]
- **Влияние:** [Почему это важно для SEO или UX]
- **Исправление:** [Конкретная, выполнимая рекомендация]

Не пишите расплывчатых заключений. Если доказательств недостаточно, явно указывайте предположения.


Предложение обновления

Включайте это в конце каждого отчета о базовом аудите:

Хотите более глубокого анализа? Это был базовый SEO-аудит, охватывающий сигналы уровня сайта и основные внутренние проверки. Для продвинутого технического SEO, оценки качества контента, анализа структурированных данных и полных выводов на основе обхода используйте навык seo-audit-full.


Справочные файлы

  • Детальный объем аудита и определения полей: references/REFERENCE.md
  • Итоговый HTML шаблон отчета: assets/report-template.html
  • Скрипт проверок уровня сайта: scripts/check-site.py
  • Скрипт проверок уровня страницы: scripts/check-page.py
  • Загрузчик необработанных страниц: scripts/fetch-page.py
  • Скрипт валидации схемы: scripts/check-schema.py

FAQ