mcpField
S
seo-ready

seo-ready

github.com/tushaarmehtaaマーケティング・グロース1254 回インストール2 週間前に更新
リポジトリ

seo-ready について

seo-readyは、Webサイト開発者向けのSEO・AEO監査と修正を行うスキルです。フレームワークを特定してページを検査し、承認後にファイルを変更して結果を再確認します。

主な機能

  1. 01フレームワークとページルートの特定
  2. 0215種類のSEO・AEO項目の検査
  3. 03採点と監査レポートの作成
  4. 04フレームワークに応じたファイル修正
  5. 05変更したページの再検査

活用シーン

  1. 01サイトの検索・AI検索への対応状況の評価
  2. 02メタデータや構造化データの不足箇所の特定
  3. 03サイトマップとrobotsルールの追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/tushaarmehtaa/tushar-skills --skill seo-ready

インストール後、Claude Code で/seo-readyを入力して読み込まれたか確認します。

詳細

コードベースを読み込み、すべてのシグナルをスコアリングして修正を適用する、完全な SEO および AEO 監査です。レポートを作成するだけではなく、ファイルを変更します。

フェーズ 1:スタックの検出

最初に、フレームワークとルーティングパターンを特定します。

次の項目を順に確認します:

  1. next.config.* → Next.js(package.json でバージョンを確認します。v13 以降は App Router と generateMetadata を使用し、それより前のバージョンは _document と next/head を使用します)
  2. astro.config.* → Astro(レイアウト内でフロントマターと <head> を使用します)
  3. nuxt.config.* → Nuxt(useHead または useSeoMeta を使用します)
  4. svelte.config.* → SvelteKit(<svelte:head> を使用します)
  5. ルートに index.html → 静的 HTML/Vite SPA
  6. gatsby-config.* → Gatsby(gatsby-plugin-react-helmet を使用します)

すべてのページ/ルートを検索します:

  • Next.js App Router:app/**/page.tsx または page.jsx
  • Next.js Pages Router:pages/**/*.tsx
  • Astro:src/pages/**/*.astro
  • 静的サイト:すべての .html ファイル

ユーザーに次のように伝えます:「[framework] プロジェクトで [N] ページが見つかりました。SEO/AEO の完全な監査を実行します。」

フェーズ 2:すべてのシグナルを監査

すべてのページを対象に、次の項目を確認します。それぞれを PASS/WARN/FAIL で評価します。

2.1 タイトルタグ
  • すべてのページに固有の <title> または同等のメタデータが必要です
  • 長さ:30~60 文字(PASS)、20~70 文字(WARN)、範囲外(FAIL)
  • ページの主要キーワード/トピックを含める必要があります
  • Next.js:metadata.title または generateMetadata() の戻り値を確認します
  • ルートレイアウトにタイトルテンプレート(例:%s | Brand Name)があるか確認します
2.2 メタディスクリプション
  • すべてのページにメタディスクリプションが必要です
  • 長さ:70~160 文字(PASS)、50~180 文字(WARN)、範囲外または未設定(FAIL)
  • ページの直接的な回答または中心的な訴求内容を含める必要があります
  • Next.js:metadata.description を確認します
2.3 見出し階層
  • 各ページの <h1> は必ず 1 つ(PASS)、0 個または複数(FAIL)
  • 大見出しには H2 を使用します
  • レベルの飛ばし(h1 → h2 なしで h3)を確認します
  • AEO:H2 のいずれかが質問形式か(how/what/why/when/who/which/can/does/should)を確認します
    • 質問形式の見出しが 2 つ以上 = PASS、1 つ = WARN、0 個 = FAIL
    • 質問形式の見出しは、音声検索や LLM へのプロンプトに直接合致します
2.4 Open Graph タグ
  • og:title、og:description、og:type、og:url、og:image のすべてが必要です
  • og:image は重要です。設定されていないと、ソーシャルメディアで共有した際にカードが空白になります
  • Next.js:metadata.openGraph オブジェクトを確認します
  • Twitter カードタグ(twitter:card、twitter:title、twitter:description)も確認します
  • 視認性を最大限に高めるには、twitter:card を summary_large_image に設定します
2.5 canonical URL
  • すべてのページに canonical URL が必要です
  • Next.js:metadata.alternates.canonical を確認します
  • HTML:<link rel="canonical"> を確認します
  • 相対 URL ではなく、絶対 URL である必要があります
2.6 構造化データ(JSON-LD)
  • <script type="application/ld+json"> ブロックがあるか確認します
  • 次の価値の高いスキーマタイプを確認します:
    • FAQPage — AI の回答で、ロングテールの質問を獲得します(影響大)
    • HowTo — 「方法」に関する強調スニペットの獲得に役立ちます
    • Article/BlogPosting — コンテンツページ向け
    • WebApplication — SaaS 製品向け
    • Product + Review — EC 向け
    • Organization — ブランドの識別情報
    • BreadcrumbList — ナビゲーションのコンテキスト
  • Next.js:スキーマはページコンポーネント内の <script> タグまたはメタデータに含まれている場合があります
  • 関連するスキーマタイプがあれば PASS、なければ FAIL
2.7 サイトマップ
  • sitemap.xml、sitemap.ts(Next.js)、または sitemap-index.xml があるか確認します
  • 適切な lastmod、changefreq、priority を含め、すべての公開ページを網羅する必要があります
  • 動的ページ(例:すべての /blog/[slug] ページ)も含める必要があります
  • 存在し、すべてのページを網羅していれば PASS、存在するが不完全なら WARN、なければ FAIL
2.8 Robots.txt
  • robots.txt または robots.ts(Next.js)があるか確認します
  • 公開ページのクロールを許可する必要があります
  • 非公開ルート(/api/、/admin/、/auth/、/dashboard/)をブロックする必要があります
  • サイトマップ URL を参照する必要があります
  • 完全に欠落している場合は FAIL
2.9 AI クローラーのルール(AEO 固有)
  • robots.txtで、AI クローラーに対する明示的なルールを確認します。
    • GPTBot(OpenAI / ChatGPT)
    • ChatGPT-User(ChatGPT のブラウジング)
    • Claude-Web(Anthropic)
    • PerplexityBot(Perplexity)
    • Applebot-Extended(Apple Intelligence)
    • Google-Extended(Gemini)
  • 公開コンテンツページでは、これらを明示的に許可する必要があります。
  • 言及がない場合は警告(デフォルトの動作は異なります)、明示的にブロックされている場合は不合格とします。
2.10 llms.txt
  • 公開ディレクトリにllms.txtがあるか確認します。
  • このファイルは、AI ツールが製品/サイトの構造を理解するのに役立ちます。
  • 次の内容を含める必要があります:製品名、説明、主な機能、料金、重要な URL
  • 存在し、内容があれば合格、ない場合は不合格とします。
2.11 冒頭の要約/回答ブロック(AEO 固有)
  • コンテンツページでは、最初の段落が簡潔な要約(35~90 語)になっているか確認します。
  • これは、回答エンジンが回答ボックスに引用する内容です。
  • 「回答を先に示す」書き方のパターンになっているか確認します。重要な情報は埋もれさせず、ページ上部に配置する必要があります。
  • 見つかった場合は合格、長すぎる/短すぎる場合は警告、明確な要約がない場合は不合格とします。
2.12 内部リンク
  • ページごとの内部リンク数を数えます。
  • 内部リンクが6件以上なら合格、2~5件なら警告、0~1件なら不合格とします。
  • 内部リンクは、検索エンジンや LLM のリトリーバーがトピックの深さを把握するのに役立ちます。
2.13 FAQ セクション
  • FAQ の見出し、または FAQ のような Q&A コンテンツがあるか確認します。
  • これらは、AI 検索におけるロングテールのプロンプトを捉えるのに役立ちます。
  • FAQ コンテンツがある場合は、構造化データ(FAQPage スキーマ)を設定する必要があります。
  • FAQ セクションとスキーマの両方があれば合格、FAQ はあるがスキーマがない場合は警告、どちらもない場合は不合格とします。
2.14 画像の代替テキスト
  • すべての<img>タグと Next.js の<Image>コンポーネントに代替テキストが設定されているか確認します。
  • すべての画像に説明的な代替テキストを設定する必要があります。
  • すべてに設定されていれば合格、一部にない場合は警告、大半にない場合は不合格とします。
2.15 パフォーマンスの指標
  • Next.js プロジェクトで、(生の<img>ではなく)next/imageが使われているか確認します。
  • フォントの最適化(next/font、font-display: swap)を確認します。
  • 過剰なクライアントサイド JavaScript(サーバーでレンダリング可能なページでの"use client")がないか確認します。

フェーズ3:スコアを算出してレポートする

総合スコアを算出します。

  • 各チェックの重みは同じです。
  • 合格=1ポイント、警告=0.5ポイント、不合格=0ポイント
  • スコア=(合計ポイント数 / チェック総数)* 100

レポートを表示します。

SEO/AEO Readiness: [SCORE]/100 ([VERDICT])
Framework: [detected framework]
Pages scanned: [N]

On-site checks:
[PASS] Title tags             All pages have titles (30-60 chars)
[WARN] Meta descriptions      2/5 pages missing descriptions
[FAIL] Structured data        No JSON-LD schema detected
[PASS] Sitemap                sitemap.ts found, covers all pages
...

AEO checks:
[FAIL] AI crawler rules       No AI bot rules in robots.txt
[FAIL] llms.txt               Not found
[WARN] Question headings      1 question heading found (need 2+)
[FAIL] FAQ schema              No FAQPage schema
...

Top issues to fix (by impact):
1. (HIGH) Add FAQPage JSON-LD schema — captures AI answer citations
2. (HIGH) Create llms.txt — makes your site readable by AI tools
3. (HIGH) Add AI crawler allow rules — GPTBot, Claude-Web, PerplexityBot
4. (MEDIUM) Add meta descriptions to 2 pages
5. (LOW) Add alt text to 3 images

次に、**「[N]件の問題をすべて修正しますか、それとも特定の問題を選びますか?」**と尋ねます。

フェーズ4:すべて修正する

検出されたフレームワークに応じて修正を適用します。変更を加える前に確認してください。

修正:メタタグの不足/不備

Next.js App Router:

  • ページファイルにmetadataエクスポートを追加または更新するか、動的ページ用にgenerateMetadata()を追加します。
  • ルートのlayout.tsxでタイトルテンプレートを設定します:title: { template: '%s | Brand', default: 'Brand — tagline' }
  • 説明、キーワード、作成者、クリエイターを追加します。

静的 HTML:

  • <head>セクションに<meta>タグを追加します。
修正:Open Graph/Twitter Cards の不足

Next.js:

openGraph: {
  title: 'Page Title',
  description: 'Page description',
  type: 'website', // or 'article' for content pages
  url: 'https://yoursite.com/page',
  siteName: 'Brand Name',
  locale: 'en_US',
},
twitter: {
  card: 'summary_large_image',
  title: 'Page Title',
  description: 'Page description',
}
修正:OG 画像の不足

Next.js App Router: アプリディレクトリにopengraph-image.tsx(または.jsx)を作成し、OG 画像を自動生成します。

import { ImageResponse } from 'next/og'

export const runtime = 'edge'
export const alt = 'Page Title'
export const size = { width: 1200, height: 630 }
export const contentType = 'image/png'

export default async function Image() {
  return new ImageResponse(
    (
      <div style={{
        fontSize: 64,
        background: '#000',
        color: '#fff',
        width: '100%',
        height: '100%',
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
      }}>
        Page Title
      </div>
    ),
    { ...size }
  )
}

静的サイトの場合は、1200x630 の画像を作成して参照するようユーザーに案内します。

修正:サイトマップの不足

Next.js App Router — app/sitemap.tsを作成します。

import type { MetadataRoute } from 'next'

export default function sitemap(): MetadataRoute.Sitemap {
  const baseUrl = 'https://yoursite.com'
  return [
    { url: baseUrl, lastModified: new Date(), changeFrequency: 'daily', priority: 1 },
    // Add all public pages here
  ]
}

プロジェクトのページ/ルートを読み取り、適切な優先度を設定してすべてのエントリーを自動生成します。

  • ホームページ:優先度1、毎日
  • 主要な機能ページ:優先度0.8、毎週
  • コンテンツ/ブログページ:優先度0.7、毎週
  • 法務/会社概要ページ:優先度0.3、毎月

動的ルートの場合は、利用可能であればgenerateStaticParamsのデータを使用して、すべてのスラッグを含めます。

修正:robots.txt の不足/不備

Next.js App Router — app/robots.tsを作成します。

import type { MetadataRoute } from 'next'

export default function robots(): MetadataRoute.Robots {
  const baseUrl = 'https://yoursite.com'
  return {
    rules: [
      {
        userAgent: '*',
        allow: '/',
        disallow: ['/api/', '/admin/', '/auth/', '/dashboard/'],
      },
      {
        userAgent: 'GPTBot',
        allow: ['/', '/docs/', '/blog/'],
      },
      {
        userAgent: 'ChatGPT-User',
        allow: ['/', '/docs/', '/blog/'],
      },
      {
        userAgent: 'Claude-Web',
        allow: ['/', '/docs/', '/blog/'],
      },
      {
        userAgent: 'PerplexityBot',
        allow: ['/', '/docs/', '/blog/'],
      },
      {
        userAgent: 'Applebot-Extended',
        allow: ['/', '/docs/', '/blog/'],
      },
    ],
    sitemap: `${baseUrl}/sitemap.xml`,
  }
}

プロジェクトの実際の公開ルートに合わせて許可するパスを調整します。

修正:llms.txt の不足

次の内容でpublic/llms.txtを作成します。

# [Product Name]

## What is [Product Name]?
[One paragraph description — what it does, who it's for]

## Key Features
- [Feature 1]
- [Feature 2]
- [Feature 3]

## Pricing
[Pricing model — free, freemium, paid, per-credit, etc.]

## Links
- Website: [URL]
- Documentation: [URL]
- GitHub: [URL if open source]

プロジェクトの README、ランディングページのコピー、package.json を読み取り、自動で内容を補完します。

修正:構造化データの不足

FAQ コンテンツがある場所に FAQPage スキーマを追加します。

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Question text here?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Answer text here."
      }
    }
  ]
}
</script>

SaaS 製品に WebApplication スキーマを追加します。

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebApplication",
  "name": "Product Name",
  "description": "Description",
  "url": "https://yoursite.com",
  "applicationCategory": "Category",
  "operatingSystem": "Web",
  "offers": {
    "@type": "Offer",
    "price": "0",
    "priceCurrency": "USD"
  }
}
</script>

コンテンツ/ブログページに Article スキーマを追加します。

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Article Title",
  "description": "Description",
  "author": { "@type": "Organization", "name": "Brand" },
  "publisher": { "@type": "Organization", "name": "Brand" },
  "mainEntityOfPage": { "@type": "WebPage", "@id": "https://yoursite.com/page" }
}
</script>
修正:正規 URL の欠落

Next.js:

alternates: {
  canonical: 'https://yoursite.com/this-page',
}
修正:見出し階層の問題
  • H1 が複数ある場合:最も関連性の高いものを残し、ほかは H2 に下げます
  • H1 がない場合:最も目立つ見出しを H1 にします
  • AEO に適している場合は、H2 を疑問形に言い換えることを提案します
修正:代替テキストの欠落
  • 代替テキストがない画像をすべて見つけます
  • 画像ファイル名と周囲の文脈に基づいて、内容が伝わる代替テキストを作成します
  • Next.js では、すべての <Image> コンポーネントに alt プロパティが設定されていることを確認します

フェーズ 5:検証

修正を適用した後、変更したファイルのみを対象に監査を再実行します。修正前と修正後のスコアを表示します。

SEO/AEO Readiness: 34/100 -> 89/100

Fixed:
+ Added meta descriptions to 3 pages
+ Created sitemap.ts with 8 pages
+ Created robots.ts with AI crawler rules
+ Created llms.txt
+ Added FAQPage schema to /guides page
+ Added OG image generator
+ Fixed heading hierarchy on 2 pages

Remaining (manual):
- Add real OG image assets (currently using generated fallback)
- Write FAQ content for /pricing page
- Add alt text to 2 product screenshots (need human description)

モード修飾子

ユーザーはモードを指定して、ドメイン固有のチェックを追加できます。

モード:b2b — 次のチェックを追加します。

  • サブドメインではなく、サブディレクトリにドキュメント/ヘルプセンターがあること
  • 技術コンテンツの充実度(コード例、API リファレンス)
  • 比較/代替製品のページ
  • インテグレーションのページ

モード:commerce — 次のチェックを追加します。

  • 価格、在庫状況、レビューを含む商品スキーマ
  • レビュー/評価の構造化データ
  • カテゴリページの最適化
  • 商品写真の画像最適化

モード:local — 次のチェックを追加します。

  • LocalBusiness スキーマ
  • NAP(名称、住所、電話番号)の一貫性
  • Google ビジネス プロフィールへのリンク
  • 地域固有のコンテンツ

モード:saas — 次のチェックを追加します。

  • WebApplication スキーマ
  • 価格ページの構造化データ
  • 機能比較表
  • 鮮度を示すシグナルとなる変更履歴/更新ページ

コメント