improve-aeo-geo について
ウェブサイトのコードベースを監査し、AI システムによるページの発見、解析、引用を改善するための変更を行うスキルです。クローラーのアクセス、メタデータ、構造化データ、コンテンツ構成を扱い、変更後の再監査も行います。
主な機能
- 01基準値の取得とコード監査
- 02AI クローラーのアクセス確認
- 03メタデータと構造化データの修正
- 04コンテンツ構成の改善案
- 05変更後の再監査
活用シーン
- 01AI クローラーを妨げる要因の特定
- 02サイトのメタデータと JSON-LD の改善
- 03AI システムが引用しやすいページ作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ onvoyage-ai/ gtm-engineer-skills --skill improve-aeo-geoインストール後、Claude Code で/improve-aeo-geoを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdexamples/nextjs-blog-before-after.mdwordpress-business-before-after.md詳細
ウェブサイトのAEO/GEOを改善するスキル
AIエンジン最適化(AEO)と生成エンジン最適化(GEO)の専門家です。このスキルを呼び出すと、ユーザーのウェブサイトのコードベースを分析し、AI エージェント(ChatGPT、Claude、Perplexity、Google AI Overviews など)がサイトをより効果的に発見、解析、引用できるよう、具体的で実行可能なコード変更を行います。
ウェブは、人間を最優先する検索からAIを最優先する検索へと移行しています。AI エージェントは人間のようには閲覧しません。構造化データを抽出し、直接的な回答を探し、コンテンツを引用する価値があるかを数ミリ秒で判断します。このスキルは、新たな読者にウェブサイトを見つけてもらうためのものです。
ワークフロー
コードベースに対して呼び出された場合は、次の手順を順番どおりに実行します。
Step 1: ベースライン
- ユーザーが公開URLを提供している場合、まずベースラインスコアを取得します。ローカルクロールとスコア付きレポートには
audit-website-aeoスキルを実行するか、ホスト型の aeo-audit.sh を使用します。aeo_audit_report.mdがすでに存在する場合は、その内容を確認します。優先順位付きの修正案と、評価が最も低いページから、修正すべき箇所が正確にわかります。 - URLを利用できない場合は、コードレベルの監査に進みます。
Step 2: 技術スタックを特定する
- フレームワークを特定します(Next.js、Nuxt、Astro、SvelteKit、Remix、WordPress、Hugo、Jekyll、11ty、プレーンHTML)。
<head>の管理場所を探します(レイアウトファイル、ドキュメントコンポーネント、プラグイン、テーマファイル)。- コンテンツの保存場所を探します(ページ、MDX/MDファイル、CMSテンプレート、コンポーネント、PHPテンプレート)。
- 既存のSEOプラグインやパッケージを確認します(next-seo、@astrojs/sitemap、Yoast など)。
- サイトがSSR、SSG、クライアントサイドレンダリングのどれを使用しているか確認します。
Step 3: 現状を監査する
以下のすべてのチェックを実施します。不合格となったチェックごとに、変更するファイルと具体的な修正内容を記録します。
Step 4: 優先順位に従って修正する
優先度1(重大な問題)から変更を適用し、その後、順に進めます。必要最小限で、対象を絞った変更を行います。
Step 5: 検証する
- 監査を再実行し(
audit-website-aeoスキル、または aeo-audit.sh)、Step 1のベースラインと比較してスコアが向上したことを確認します。 - 目標:総合スコア80以上(B+以上)
スコアリングモデル
AEO監査スコアは、次の2つの要素で構成されます。
- 基盤スコア(50%) — 16項目の決定論的なチェック。各ページを合否判定し、サイト全体で集計します(ページの80%以上が合格する必要があります)。
- インテリジェンススコア(50%) — LLMが評価する、コンテンツ品質の6つの評価軸(0~5点)。
最終スコア = 基盤スコアの50% + インテリジェンススコアの50% → レターグレード(A+ = 95~100、A = 90~94、B+ = 80~84、…、F = 40未満)。
優先度1:重大な問題(最初に修正する)
AIボットのアクセス(12点)
robots.txtで、次の9つのAIクローラーをブロックしてはいけません。GPTBot、ClaudeBot、PerplexityBot、Google-Extended、OAI-SearchBot、anthropic-ai、ChatGPT-User、Bytespider、CCBot。
修正方法:robots.txt(プロジェクトルート、public/robots.txt、またはフレームワークに相当する場所)を開きます。これらのボットに対する Disallow ルールを削除します。robots.txt が存在しない場合は、作成します。
User-agent: *
Allow: /
User-agent: GPTBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Google-Extended
Allow: /
User-agent: OAI-SearchBot
Allow: /
User-agent: anthropic-ai
Allow: /
User-agent: ChatGPT-User
Allow: /
User-agent: Bytespider
Allow: /
User-agent: CCBot
Allow: /
Sitemap: https://YOURDOMAIN.com/sitemap.xml
AIボットがブロックされている場合、ほかの対策をしても意味がありません。これは最も重要な前提条件です。
AIがアクセスできるメタタグ(6点)
ページのrobotsメタタグまたは X-Robots-Tag ヘッダーに、nosnippet、noai、noimageai を含めてはいけません。これらを検索し、公開コンテンツのページから削除します。
インデックス登録の可否(10点)
公開ページに <meta name="robots" content="noindex"> を設定してはいけません。コードベースから noindex を検索し、不適切な箇所から削除します。
優先度2:影響の大きい構造
構造化データ/JSON-LD(8点)
すべてのページに、少なくとも1つの <script type="application/ld+json"> ブロックが必要です。認識される @type の値(追加で8点):Organization、WebSite、WebPage、Article、Product、FAQPage、BreadcrumbList、LocalBusiness、Person、Event、HowTo、Recipe、VideoObject、SoftwareApplication。
最低限の設定:
- サイト全体:ルートレイアウトに Organization スキーマを設定
- ホームページ:SearchAction を含む WebSite スキーマを設定
- ブログ記事:author、datePublished、dateModified を含む Article スキーマを設定
- 製品ページ:Product スキーマを設定
- FAQ セクション:FAQPage スキーマを設定
ページタイトル(10点)
すべての <title> は10文字以上にしてください。ページごとに、固有で内容がわかるタイトルが必要です。形式:[ページのトピック] | [ブランド]。50~60文字を目安にしてください。
メタディスクリプション(10点)
すべてのページに、50文字以上の <meta name="description"> が必要です。ページごとに固有の説明文を作成してください(理想は120~160文字)。余計な前置きではなく、答えや価値から始めてください。
テキストの分量(12点)
各ページに、読みやすい本文テキストが250語以上必要です(ナビゲーション、フッター、定型文を除く)。重要なページでは500~2,000語を目指してください。2,900語を超える記事は、800語未満の記事と比べて平均5.1件対3.2件のAI 引用を獲得しています(SE Ranking、2025年 — 230万ページを分析)。
SPA/コンポーネントベースのサイトでは、コンテンツがサーバーサイドでレンダリングされるか、静的に生成されるようにしてください。
llms.txt(10点)
見出し、リンク、100文字以上を含む /.well-known/llms.txt を作成してください。
# [Your Site Name]
> Brief description of what your site/product does.
## Documentation
- [Getting Started](https://yourdomain.com/docs/getting-started)
- [API Reference](https://yourdomain.com/docs/api)
## Key Pages
- [About](https://yourdomain.com/about)
- [Pricing](https://yourdomain.com/pricing)
- [Blog](https://yourdomain.com/blog)
## Policies
- [Terms of Service](https://yourdomain.com/terms)
- [Privacy Policy](https://yourdomain.com/privacy)
主要ページの全文をインラインで含め、LLM が直接利用できる llms-full.txt の作成も検討してください。
優先度 3:コンテンツの品質
見出しの階層(6点)
H1 → H2 → H3 の順に適切に階層化してください。各ページの <h1> は必ず1つにしてください(8点)。見出しレベルを2段階以上使ってください。レベルを飛ばしてはいけません(H1 → H2 を挟まず H3 に進むのは誤りです)。見出し間の文章は120~180語を目安にしてください。この範囲は、短いセクションよりも ChatGPT の引用が70%多くなります(SE Ranking、2025年)。
内部リンク(10点)
各ページに内部リンクを5つ以上設置してください。内容がわかるアンカーテキストを使ってください。パンくずリスト、関連記事、「こちらも参照」セクション、文脈に沿ったインラインリンクを追加してください。
正規 URL(8点)
各ページに、絶対 URL を含む <link rel="canonical" href="..."> が必要です。末尾のスラッシュは一貫した方法で処理してください。
Open Graph(8点)
各ページに og:title と og:description が必要です。さらに og:image、og:url、og:type も追加してください。
画像の代替テキスト網羅率(8点)
<img> タグの80%以上に alt 属性を設定してください。装飾画像の場合は alt="" とします。
代替テキストには、視覚的な形ではなく結論を記述してください。AI エンジンとスクリーンリーダーのどちらにも、重要なポイントを伝える必要があります。
- 悪い例:
alt="bar chart"またはalt="graph showing results" - 良い例:
alt="GEO-optimized pages earn 41% more AI citations (KDD 2024, N=10K queries)"
チャートやデータビジュアルの場合:画像だけでは LLM から認識できません。すべてのチャートにテキストの要約と HTML データテーブルを併記してください。AI が実際に引用するのは、この情報です。GEO のテキストレイヤーを完全に含める必要があるデータビジュアルには、create-geo-charts スキルを使用してください。
RSS/Atom フィード(8点)
フィードを公開し、検出用リンクを追加してください。
<link rel="alternate" type="application/rss+xml" title="RSS Feed" href="/feed.xml" />
lastmod を含むサイトマップ
直接の採点対象ではありませんが、情報の鮮度を示す重要なシグナルです。<lastmod> の日付を含む sitemap.xml を生成してください。robots.txt から参照してください。
優先度 4:GEO コンテンツの最適化
これらの戦略は、GEO 論文(Aggarwal ほか、KDD 2024 — Princeton、Georgia Tech、IIT Delhi、Allen AI)による査読済み研究と、大規模な業界調査に裏付けられています。
信頼できる情報源からの引用を追加(可視性+41%)
GEO 戦略の中で最も効果的な方法です。専門家、研究、公式情報源からの直接引用を含めてください。GEO 論文で最も有効とされた最適化手法です。
WEAK: "Experts say this approach works well."
STRONG: "As Dr. Jane Smith, Harvard's head of AI research, noted: 'This approach reduces error rates by 40% in production systems.'"
統計とデータポイントを追加(可視性+33%)
GEO 戦略の第2位です。具体的な数値、割合、日付、測定値を含めてください。150~200語ごとに、少なくとも1つのデータポイントを含めてください。
WEAK: "Our platform is significantly faster."
STRONG: "Our platform processes 10,000 requests per second with a median latency of 12ms, based on benchmarks run in January 2025."
インライン参照で出典を引用する(可視性 +28%)
GEO 戦略の第 3 位です。出典をインラインで明記します。研究、レポート、公式ドキュメントにリンクします。
WEAK: "Studies show this is effective."
STRONG: "According to a 2024 McKinsey report, companies adopting this approach saw 35% higher revenue growth."
主な調査結果:順位の低いサイトほど、最も大きな効果が得られます。もともと 4~5 位だったサイトは、出典を引用することで可視性が最大 +115% 向上しました(GEO 論文、KDD 2024)。
回答を先に示すコンテンツ構成
ChatGPT の引用の 44.2% は、ページコンテンツの最初の 30% から生まれています(Kevin Indig、Growth Memo、2026 — AI の回答 120 万件を分析)。各セクションの冒頭に、直接的な回答を示します。
[H2: Question-format heading]
[1-2 sentence direct answer]
[Supporting detail with evidence]
[Statistic or source citation]
[Internal link to related content]
変更前:「当社は、変革を目指すというビジョンのもと、2015 年に設立されました……」 変更後:「[Product] は、[primary function] を実行する [category] ツールです。[audience] が [specific outcome] を達成できるよう支援し、[metric] を [X]% 削減します。」
FAQ セクション
FAQ セクションがあるページは、ないページと比べて、AI に平均 4.9 回引用されます(なしの場合は 4.4 回)(SE Ranking、2025 — 230 万ページ)。FAQ の コンテンツ は、FAQ のスキーママークアップよりも重要です。両方を追加します。
<section>
<h2>Frequently Asked Questions</h2>
<h3>What is [topic]?</h3>
<p>[Direct answer]. [Supporting detail with evidence].</p>
<h3>How does [topic] work?</h3>
<p>[Step-by-step explanation].</p>
</section>
さらに、このセクションに FAQPage の JSON-LD スキーマを追加します。
引用しやすいブロック
単独で抜き出しても意味が通じる、自己完結した段落を書きます。
- 1 ブロックあたり 40~60 語
- 前の文脈を指す代名詞(「it」「this」)を使わない
- 主題を明示する
- 具体的な事実または数値で締めくくる
- 比較表、番号付きリスト、定義ブロックを使う
鮮度を示すシグナル
AI エージェントは、より新しいコンテンツを引用します。3 か月以内に更新されたコンテンツは平均 6 回引用される一方、2 年以上前のコンテンツでは平均 3.9 回です(SE Ranking、2025)。AI アシスタントが引用するコンテンツは、従来のオーガニック検索結果より 25.7% 新しいものです(Ahrefs、2025 — 1,700 万件の引用を分析)。
すべてのコンテンツページに追加します。
<meta property="article:published_time" content="2025-01-15T00:00:00Z" />
<meta property="article:modified_time" content="2025-06-01T00:00:00Z" />
ページ上に「最終更新日:[日付]」を見えるように表示します。ブログまたは変更履歴を維持し、定期的に更新します。
構造を明確にする
セマンティック HTML を使います:<main>、<article>、<section>、<nav>、<aside>。H2/H3 の階層が明確なコンテンツは、引用を獲得する可能性が 2.8 倍高くなります(AirOps、2025)。重要なコンテンツはクライアント側の JS で読み込むのではなく、HTML に含めます(SSR/SSG)。
フレームワーク別のパターン
Next.js(App Router)
メタデータ(app/page.tsx または app/layout.tsx):
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Page Title | Brand',
description: 'Descriptive meta description of 120-160 characters.',
alternates: { canonical: 'https://yourdomain.com/page' },
openGraph: {
title: 'Page Title',
description: 'Social sharing description.',
url: 'https://yourdomain.com/page',
images: [{ url: 'https://yourdomain.com/og-image.jpg' }],
},
robots: { index: true, follow: true },
}
JSON-LD:
export default function Page() {
const jsonLd = {
'@context': 'https://schema.org',
'@type': 'Article',
headline: 'Article Title',
datePublished: '2025-01-15',
dateModified: '2025-06-01',
author: { '@type': 'Person', name: 'Author Name' },
}
return (
<>
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />
<article><h1>Article Title</h1>{/* Content */}</article>
</>
)
}
robots.txt(app/robots.ts):
import type { MetadataRoute } from 'next'
export default function robots(): MetadataRoute.Robots {
return {
rules: [
{ userAgent: '*', allow: '/' },
{ userAgent: 'GPTBot', allow: '/' },
{ userAgent: 'ClaudeBot', allow: '/' },
{ userAgent: 'PerplexityBot', allow: '/' },
{ userAgent: 'Google-Extended', allow: '/' },
{ userAgent: 'OAI-SearchBot', allow: '/' },
{ userAgent: 'anthropic-ai', allow: '/' },
{ userAgent: 'ChatGPT-User', allow: '/' },
{ userAgent: 'Bytespider', allow: '/' },
{ userAgent: 'CCBot', allow: '/' },
],
sitemap: 'https://yourdomain.com/sitemap.xml',
}
}
サイトマップ(app/sitemap.ts):
import type { MetadataRoute } from 'next'
export default function sitemap(): MetadataRoute.Sitemap {
return [
{ url: 'https://yourdomain.com', lastModified: new Date(), changeFrequency: 'weekly', priority: 1 },
{ url: 'https://yourdomain.com/about', lastModified: new Date(), changeFrequency: 'monthly', priority: 0.8 },
]
}
Nuxt 3
メタデータ(app.vue またはページコンポーネント内):
<script setup>
useSeoMeta({
title: 'Page Title | Brand',
description: 'Descriptive meta description.',
ogTitle: 'Page Title',
ogDescription: 'Social sharing description.',
ogImage: 'https://yourdomain.com/og-image.jpg',
})
useHead({
link: [{ rel: 'canonical', href: 'https://yourdomain.com/page' }],
})
</script>
JSON-LD(nuxt-schema-org の useSchemaOrg を使用):
<script setup>
useSchemaOrg([
defineArticle({
headline: 'Article Title',
datePublished: '2025-01-15',
dateModified: '2025-06-01',
author: { name: 'Author Name' },
}),
])
</script>
SvelteKit
メタデータ(+page.svelte または +layout.svelte 内):
<svelte:head>
<title>Page Title | Brand</title>
<meta name="description" content="Descriptive meta description." />
<link rel="canonical" href="https://yourdomain.com/page" />
<meta property="og:title" content="Page Title" />
<meta property="og:description" content="Social sharing description." />
</svelte:head>
JSON-LD:
<svelte:head>
{@html `<script type="application/ld+json">${JSON.stringify({
"@context": "https://schema.org",
"@type": "Article",
"headline": "Article Title",
"datePublished": "2025-01-15"
})}</script>`}
</svelte:head>
Astro
レイアウト(src/layouts/Base.astro):
---
const { title, description, canonical, publishedDate } = Astro.props
---
<head>
<title>{title}</title>
<meta name="description" content={description} />
<link rel="canonical" href={canonical} />
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
{publishedDate && <meta property="article:published_time" content={publishedDate} />}
<link rel="alternate" type="application/rss+xml" title="RSS Feed" href="/feed.xml" />
</head>
@astrojs/sitemap を使うと、lastmod を含むサイトマップを自動生成できます。
WordPress
functions.php — JSON-LD を追加します。
function add_json_ld_schema() {
if (is_singular('post')) {
$schema = [
'@context' => 'https://schema.org',
'@type' => 'Article',
'headline' => get_the_title(),
'datePublished' => get_the_date('c'),
'dateModified' => get_the_modified_date('c'),
'author' => ['@type' => 'Person', 'name' => get_the_author()],
];
echo '<script type="application/ld+json">' . json_encode($schema) . '</script>';
}
}
add_action('wp_head', 'add_json_ld_schema');
robots.txt — WordPress では「設定」>「表示設定」から管理します。プラグイン(Yoast、Rank Math)またはウェブのルートにあるカスタムの robots.txt を使って、AI ボットのルールを追加します。
llms.txt — WordPress のルートディレクトリに .well-known/llms.txt を作成するか、プラグインまたはリライトルールを使います。
Hugo
メタデータ(layouts/partials/head.html 内):
<title>{{ .Title }} | {{ .Site.Title }}</title>
<meta name="description" content="{{ .Description }}" />
<link rel="canonical" href="{{ .Permalink }}" />
<meta property="og:title" content="{{ .Title }}" />
<meta property="og:description" content="{{ .Description }}" />
{{ if .Date }}<meta property="article:published_time" content="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}" />{{ end }}
{{ if .Lastmod }}<meta property="article:modified_time" content="{{ .Lastmod.Format "2006-01-02T15:04:05Z07:00" }}" />{{ end }}
JSON-LD(layouts/partials/schema.html 内):
{{ if .IsPage }}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "{{ .Title }}",
"datePublished": "{{ .Date.Format "2006-01-02" }}",
"dateModified": "{{ .Lastmod.Format "2006-01-02" }}",
"author": { "@type": "Person", "name": "{{ .Params.author | default .Site.Params.author }}" }
}
</script>
{{ end }}
Hugo はデフォルトで /index.xml に RSS を生成します。クリーンな HTML 出力には hugo --minify を使います。
Jekyll / 11ty
Jekyll — jekyll-seo-tag と jekyll-sitemap の gem を使います。_includes/head.html に JSON-LD を追加します。RSS には jekyll-feed の gem を使います。
11ty — フィードには @11ty/eleventy-plugin-rss を使います。_includes/base.njk の Nunjucks/Liquid テンプレートでメタデータを追加します。カスタムテンプレートまたは eleventy-plugin-sitemap でサイトマップを生成します。
Remix
メタデータ(ルートの meta 関数内):
export const meta: MetaFunction = () => [
{ title: 'Page Title | Brand' },
{ name: 'description', content: 'Descriptive meta description.' },
{ property: 'og:title', content: 'Page Title' },
{ property: 'og:description', content: 'Social sharing description.' },
{ tagName: 'link', rel: 'canonical', href: 'https://yourdomain.com/page' },
]
検証チェックリスト
変更を加えた後、次の項目を確認してください。
- robots.txt ですべての 9 つの AI ボットが許可されている
- 公開ページに noindex、nosnippet、noai がない
- すべてのページに次の項目がある:タイトル(10 文字以上)、メタディスクリプション(50 文字以上)、canonical URL
- すべてのページに次の項目がある:H1 がちょうど 1 つ、適切な見出し階層(H1 → H2 → H3)
- すべてのページに次の項目がある:認識可能な @type を含む JSON-LD
- すべてのページに次の項目がある:og:title + og:description
- すべてのページに次の項目がある:本文が 250 語以上
- すべてのページに次の項目がある:内部リンクが 5 つ以上
- 画像の 80% 以上に alt テキストがある
-
/.well-known/llms.txtが存在し、有効である - RSS/Atom フィードが存在し、
<link>タグから検出できる - Sitemap.xml が
<lastmod>の日付とともに存在する - コンテンツページに公開日/更新日がある(メタデータと表示箇所の両方)
- コンテンツは前置きではなく、直接的な回答から始まる
- 主要なページに FAQ セクションがあり、FAQPage スキーマがある
- 統計と出典名が本文中で引用されている
- 関連する箇所に権威ある引用が含まれている
目標:AEO スコア 80 以上(B+ 評価以上)。aeo-audit.sh で検証してください。
調査資料
このスキルで扱うすべての統計は、検証可能な査読済み研究または大規模な一次調査に基づいています。
| 主張 | 出典 |
|---|---|
| 引用 = 可視性 +41%;統計 = +33%;出典の引用 = +28% | Aggarwal et al., "GEO: Generative Engine Optimization," KDD 2024 (arXiv) |
| 検索順位の低いサイトは、GEO 最適化によって最大 +115% の効果を得られる | 同じ GEO 論文 — 4〜5 位のサイトで最大の向上が見られた |
| ChatGPT の引用の 44.2% はコンテンツの最初の 30% から | Kevin Indig, Growth Memo, Feb 2026 — 120 万件の AI 回答、18,000 件の引用 |
| 2,900 語以上の記事は 5.1 件引用されるのに対し、800 語未満の記事は 3.2 件 | SE Ranking, Nov 2025 — 230 万ページ、29 万 5,000 ドメイン |
| セクションあたり 120〜180 語で ChatGPT の引用が 70% 増加 | 同じ SE Ranking の調査 |
| FAQ セクションがあると引用は 4.9 件、ない場合は 4.4 件 | 同じ SE Ranking の調査 |
| 3 か月以内に更新されたコンテンツは 6 件引用されるのに対し、2 年以上前のコンテンツは 3.9 件 | 同じ SE Ranking の調査 |
| AI が引用するコンテンツは、オーガニック検索より 25.7% 新しい | Ahrefs, 2025 — 7 つの AI プラットフォームで 1,700 万件の引用 |
| H2/H3 の階層があると、引用を獲得する可能性が 2.8 倍 | AirOps, 2025 |
| AI Overview の引用の 85% は過去 2 年以内の情報 | Seer Interactive, 2025 |
| AI 経由の参照トラフィックの 87.4% は ChatGPT が生み出している | Conductor, Nov 2025 — 13,700 ドメイン、33 億セッション |