AI検索
「Xとは」「Xの料金」「Yに最適なツール」に答えるアシスタントは、いくつかのページを取得し、文章や表の行を抜き出して引用します。事実がページにプレーンテキストとして存在しない場合、アシスタントは推測するか、それを記述した誰かを引用します。目標は、製品を一度の取得で正確に説明できるようにすることです。
すべてのステップに通じる原則は一つです。各事実を一度だけ書き、あらゆる場所でそれを表示する。 定義、ステータス(ベータ、サインアップ受付中、一般提供)、料金、サポートプラットフォーム、主要URLは一つのソースファイルに保存し、ページ、llms.txt、構造化データはそこから読み込みます。手作業でコピーされた事実は徐々に食い違っていきます。
ワークフロー
1. ファクトシートを作成する
content/facts.ts(またはJSON/YAML)に次の項目を作成します。名前と別名、一文の定義、対象者、ステータス、プランと価格、プラットフォームまたは統合、主要ページURL、公式プロフィール(GitHub、X、LinkedIn、Product Hunt)。各項目を実際の製品と照らし合わせてから記述します。
2. /llms.txt を公開する
llmstxt.orgに従ってください。H1で名前、blockquoteで要約、いくつかのプレーンな事実、次にH2セクションとしてリンクを- [タイトル](url): 内容の説明の形式で記述します。Optionalというセクションは、アシスタントがスキップしてもよいリンクを示します。
# Acme AI
> Acme AIは、小規模な財務チーム向けにStripeの支払いと銀行入金を照合する請求書照合ツールです。ブラウザで動作し、StripeとPlaidに接続します。
- 対象者: 1〜50人の企業で手動で支払いを照合している財務リーダー。
- ステータス: サインアップ受付中(2026年11月以降)。
- 料金(https://acme.example/pricing): Free, 0ドル、月50件の請求書まで; Pro, 29ドル/月、無制限の請求書; Team, 79ドル/月、最大10シート。価格はUSD。
- 混同しないでください: Acme Anvil(無関係なハードウェア企業)。
## 主要ページ
- [料金](https://acme.example/pricing): プラン、制限、含まれるもの。
- [Acme AI vs Rival](https://acme.example/vs/rival): 機能と価格の比較、2026年11月6日確認。
## FAQ
- Acme AIは無料ですか? はい、月50件の請求書まで無料です。ProとTeamは有料です。
## Optional
- [ブログ](https://acme.example/blog): 製品アップデートとガイド。
ファクトシートとページメタデータから生成します(ルートハンドラーまたはビルドスクリプト)。新しいページを手作業で編集せずに表示できるようにします。ステータスコード200、text/plainまたはtext/markdown; charset=utf-8で提供し、ログイン、リダイレクト、JavaScriptは不要です。確認:
curl -sI https://acme.example/llms.txt | head -5 # 200かつテキストコンテンツタイプ
curl -s https://acme.example/llms.txt | head -30
3. オプションで /llms-full.txt を追加する
最も引用させたいページ(製品、料金、比較、ドキュメント)の全文Markdownを、それぞれ独自の# タイトルとSource: <url>行の下に配置します。ビルド時に生成します。ブログのアーカイブや古いものは含めないでください。
4. リンクを設置する
フッターにプレーンなllms.txtリンクを配置し、オプションで<link rel="alternate" type="text/markdown" href="/llms.txt">を<head>に追加します。リンクがないファイルは、パスを推測するクローラーのみが見つけます。
5. AIクローラーを許可する(robots.txtとCDN)
| ユーザーエージェント | 所有者 | 用途 |
|---|---|---|
| OAI-SearchBot | OpenAI | ChatGPT検索インデックス |
| ChatGPT-User | OpenAI | ユーザーが質問したページの取得 |
| GPTBot | OpenAI | モデルトレーニング |
| Claude-SearchBot / Claude-User / ClaudeBot | Anthropic | 検索インデックス / ユーザー取得 / トレーニング |
| PerplexityBot / Perplexity-User | Perplexity | 検索インデックス / ユーザー取得 |
| Google-Extended | Geminiトレーニングとグラウンディングのトークン。Google検索やAI Overviewsには影響しません | |
| Bingbot | Microsoft | Bingインデックス。Copilotはこれに基づいて回答します |
検索およびユーザー取得エージェントは、あなたが引用されるかどうかを決定します。トレーニングエージェントはビジネス上の選択であり、推薦されたい製品は通常これらも許可します。
User-agent: *
Allow: /
Disallow: /api/
Disallow: /app/
User-agent: OAI-SearchBot
User-agent: ChatGPT-User
User-agent: GPTBot
User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: ClaudeBot
User-agent: PerplexityBot
User-agent: Perplexity-User
User-agent: Google-Extended
Allow: /
Disallow: /api/
Disallow: /app/
Sitemap: https://acme.example/sitemap.xml
クローラーは自分を指定したグループのみに従うため、名前付きグループはすべてのDisallowを繰り返さなければ、プライベートパスが公開されます。robots.txtはCDNを上書きできません。一部のCDNは「AIボットをブロック」スイッチを提供し、robots.txtに関係なく403を返します。スポットチェックし、CDNのボットレポートまたはサーバーログで実際のクローラーヒットを確認します(CDNはボットIPを検証するため、偽装されたUser-Agentを異なる扱いにする場合があります):
curl -s -o /dev/null -w '%{http_code}\n' -A 'Mozilla/5.0 (compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot)' https://acme.example/pricing
6. 各主要ページの先頭に一文の定義を配置する
H1のすぐ下、サーバーサイドレンダリングされたHTMLに、「<名前> は、<誰> のために <何をする> <カテゴリ> です。」と記述します。2文目で差別化要因を示します。同じ文をホームページ、llms.txt、Organization.description、ディレクトリ一覧、SNSバイオでも再利用します。キャッチフレーズ(「金融、再定義」)はアシスタントに引用するものを与えません。多くのAIフェッチャーはJavaScriptを実行しないため、生のHTMLを確認します:
curl -s https://acme.example/ | grep -c "is an invoice-matching tool" # 1以上を期待
7. 比較表とFAQ
- 表: 実際のHTML
<table>で、製品ごとに1行、購入者が尋ねる列(価格、プラットフォーム、オープンソース、主な制限)を用意します。日付を記入します(「2026年11月6日確認」)。各事実はベンダー自身のサイト、ドキュメント、料金ページ、またはGitHub APIから取得します。ベンダーが公開していないものには「未公開」と書き、決して推測しないでください。 - FAQ: 質問を見出しとして、検索者の言葉で記述します。2〜4文の回答で、単独で成立し、最初の文が質問に答えるものとします。アシスタントが間違えやすい質問(価格、「無料か」、「Xで動作するか」、「<同名の製品>と同じか」)をカバーします。FAQPageマークアップはオプションです。引用されるのは表示されているQ&Aです。
8. 価格を公開する
/pricingページに、プラン名、価格、通貨、請求期間、制限をテキストで表示します(画像や計算機のみではありません)。llms.txtとSoftwareApplication.offersにも反映します。回答やディレクトリ一覧には価格または価格モデル(無料、フリーミアム、有料)が必要です。これがないと推測されたり、スキップされたりします。有料プランがまだ稼働していない場合は、そのように明記します(「Pro: 近日公開; それまではすべて無料」)。
{ "@context": "https://schema.org", "@type": "SoftwareApplication", "name": "Acme AI",
"applicationCategory": "BusinessApplication", "operatingSystem": "Web",
"offers": [ { "@type": "Offer", "name": "Free", "price": "0", "priceCurrency": "USD" },
{ "@type": "Offer", "name": "Pro", "price": "29", "priceCurrency": "USD" } ] }
9. 名前が衝突する場合のOrganizationとWebSiteデータ
ブランド名だけで検索したときに別の製品が最初に表示される場合は、識別しやすい形式(「Acme AI」)を選び、それをあらゆる場所で使用し、バリアントを一つのエンティティに結び付ける構造化データを用意します:
{ "@context": "https://schema.org", "@type": "Organization",
"name": "Acme AI", "alternateName": ["Acme", "acme.example"],
"url": "https://acme.example/", "logo": "https://acme.example/logo.png",
"description": "Acme AIは、小規模な財務チーム向けにStripeの支払いと銀行入金を照合する請求書照合ツールです。",
"sameAs": ["https://github.com/acme-ai", "https://x.com/acmeai", "https://www.linkedin.com/company/acme-ai"] }
同じnameとalternateNameを持つWebSiteオブジェクトを追加します。Googleは検索結果のサイト名にこれを使用します。sameAsには、あなたが管理していてサイトにリンクを戻しているプロフィールのみをリストします。
10. ブランドサフィックスを統一する
タイトルでは1つのサフィックスを一貫して使用します。| Acme AI、og:site_nameでも同じ文字列、llms.txtのH1、SNSバイオ、GitHub組織でも同様です。タイトルは60文字以内(中国語、日本語、韓国語の場合は約30文字)に収め、キーワードを先頭に置き、サフィックスは収まる場合のみ追加します。
11. アシスタントが実際に何を言うか確認する
毎月、および大きな変更の後、ChatGPT(検索オン)、Perplexity、Claude、Gemini、Copilotで手動で5〜10のプロンプトを試します。「Acme AIとは?」「Acme AIの料金」「<カテゴリ>に最適な<対象者>」「<競合>の代替」「Acme AI vs <競合>」。通常のインターフェースで一度に1つのプロンプト。チャットUIをスクリプト化しないでください。日付、アシスタント、プロンプト、言及されたかどうか、引用されたURL、誤った事実をdocs/seo/ai-answers.mdに記録します。誤った事実の背後にあるソースページを修正し、再確認します。トラフィックについては、リファラー(chatgpt.com、perplexity.ai、claude.ai、gemini.google.com、copilot.microsoft.com)でセグメント化します。
チェックリスト
- ファクトシートが存在し、ページ、llms.txt、JSON-LDがそこから読み込まれている
- /llms.txtが200でテキストとして返され、生成されており、フッターからリンクされている
- robots.txtがAIエージェントを許可し、Disallowを繰り返している。CDNがそれらをブロックしていない
- 各主要ページが生のHTML内で一文の定義で始まっている
- 比較表に日付と出典が明記され、不明な点は「未公開」と記載されている
- FAQの回答が単独で成立し、価格、「無料か」、名前の混同をカバーしている
- /pricingが公開されており、llms.txtと
offersが一致している - OrganizationとWebSiteがname、alternateName、description、sameAsを保持している
- 1つのブランドサフィックスがすべての場所で使用され、タイトルは60文字以内
- アシスタントの回答が記録され、誤った事実がページまで追跡されて修正されている
遭遇した落とし穴
- 公開価格がない。 /pricingが404を返し、llms.txtと
SoftwareApplicationにオファーがなく、自身の比較表でも「未公開」と書かざるを得ませんでした。3つのプランをテキストで記載した/pricingページを作成し、llms.txtとoffersに反映することで修正しました。有料ティアは「近日公開」とマークされています。 - ステータスのずれ。 サインアップ受付開始後、9言語の約300ファイル(llms.txtを含む)がまだ「早期アクセス」と表示していました。現在はステータスを1つの定数から取得しています。
- リンクがないファイル。 監査の結果、llms.txtへのリンク、llms-full.txt、サイトマップの
lastmodが存在しないページが見つかりました。 - robots.txtグループの上書き。 AIクローラーに独自のグループを与え、Disallowを繰り返さなかった場合、APIやログインパスが公開されていたでしょう。
- ブランドの衝突。 ブランド名だけで検索すると、同名のクルースケジューリングアプリが最初に表示されました。「<名前> AI」をタイトル、alternateName、sameAsで使用するよう変更しました。
- 切り詰められ、一貫性のないタイトル。 49の英語タイトルが57〜88文字で、サフィックスが混在していました。60文字以下にカットし、キーワードを先頭に、サフィックスは収まる場合のみとしました。
- 競合ページの信頼性の低い取得。 調査サブエージェントが競合の価格ページを取得したところ、改ざんされたように見える結果が返ってきました。公開前に実際のブラウザで確認しました。別のベンダーの価格ページはフェッチャーに403を返したため、ドキュメントから価格を取得し、出典を明記しました。
- 「無料」と早まって書いた。 価格が公開されるまでは「未公開」と書き、「無料」とは書きませんでした。アシスタントはページに書かれていることを繰り返します。
関連スキル
- seo-page: 定義、表、FAQが配置されるページテンプレート。
- competitor-pages: 比較ページと代替ページ。アシスタントが頻繁に引用します。
- programmatic-pages: llms.txtセクションと構造化データの大規模生成。
- multilingual-seo: 言語ごとのローカライズされた定義、タイトル、サフィックス長。
- keyword-research, trend-keywords: 回答すべき質問とテストすべきプロンプト。
- index-push: ページをクロールさせる。BingのインデックスがCopilotに供給されます。
- seo-daily-report: AI経由のアクセスをレポートの独自行として表示。