ai-content-discovery について
ai-content-discovery は、IsAgentReady.com の AI Content Discovery の検査項目を修正するスキルです。AI システムがサイトを発見、クロール、閲覧できるようにし、検証と再スキャンの手順も提供します。
主な機能
- 01robots.txt とクローラー規則の設定
- 02XML サイトマップの作成
- 03llms.txt と AGENTS.md の追加
- 04Markdown のコンテンツネゴシエーション対応
- 05HTTP アクセスとソフト 404 の確認
活用シーン
- 01AI Content Discovery のスキャン失敗への対応
- 02特定の AI クローラーのアクセス許可または制限
- 03エージェント向けサイトガイドとコンテンツ入口の提供
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bartwaardenburg/ isagentready-skills --skill ai-content-discoveryインストール後、Claude Code で/ai-content-discoveryを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/checkpoints.mdgotchas.mdllms-txt-guide.mdrobots-txt-guide.md詳細
AI コンテンツの発見可能性
IsAgentReady.com の AI コンテンツの発見可能性カテゴリを改善します。これらのチェックポイントでは、AI システムがサイトを見つけ、クロールし、読み取れるかをテストします。
- 方法論のバージョン:
2026-10-22。方法論:https://isagentready.com/en/methodology - スコアリング(重みとポイント):https://isagentready.com/api/v2/methodology/2026-10-22/scoring
- チェックポイントの全データ(ステージ、証拠の種類、検証コマンド、再スキャンコマンド):references/checkpoints.md
使用する場合
- スキャンで AI コンテンツの発見可能性(旧 ID 1.x)に失敗が表示された場合。
- robots.txt が存在しない、HTML を返す、または AI クローラーをブロックしている場合。
- サイトにサイトマップ、llms.txt、または AGENTS.md がない場合。
- エージェントが Markdown、Link ヘッダー、または Content-Signal の設定を必要としている場合。
- ユーザーが「サイトを AI がクロールできるようにする」または「AI による発見可能性を改善する」と依頼した場合。
使用しない場合
- JSON-LD または Schema.org マークアップ:
structured-dataを使用してください。 - セマンティック HTML、見出し、または SSR:
content-semanticsを使用してください。 - MCP、A2A、OpenAPI、または WebMCP:
agent-protocolsを使用してください。 - セキュリティヘッダーまたは OAuth メタデータ:
security-trustを使用してください。
手順
- スキャンから失敗したチェックポイントを取得します。各結果には、旧 ID(
1.4)と安定 ID(ia.llms-txt)があります。 - 安定 ID と同じアンカーを使って、修正ワークフローに移動します。
- 例をサイトに合わせて調整します。
example.comをサイトのドメインに置き換えてください。 - 検証コマンドを実行します。検証コマンドはすべて読み取り専用です。
isagentready results <domain> --checkpoint <stable-id>を使って再スキャンするか、isagentready.com で再スキャンします。
$ARGUMENTS が指定されている場合は、修正する URL またはチェックポイントとして使用してください。
チェックポイント
強度は agentready.org 仕様のレベル(MUST、SHOULD、MAY)です。強度によってスコアは変わりません。
| 旧 ID | 安定 ID | 名前 | AR ID | 強度 |
|---|---|---|---|---|
| 1.1 | ia.robots-txt | robots.txt の存在 | AR-FIND-01 | MUST |
| 1.2 | ia.ai-crawler-directives | AI クローラーの指示 | AR-FIND-01 | MUST |
| 1.3 | ia.xml-sitemap | XML サイトマップ | AR-FIND-03 | SHOULD |
| 1.4 | ia.llms-txt | llms.txt | AR-READ-07 | SHOULD |
| 1.5 | ia.meta-robots | Meta robots / X-Robots-Tag | AR-FIND-01 | MUST |
| 1.6 | ia.content-freshness | コンテンツの鮮度シグナル | なし | MAY |
| 1.7 | ia.markdown-negotiation | コンテンツネゴシエーション(text/markdown) | AR-READ-09 | MAY |
| 1.8 | ia.bot-accessibility | HTTP によるボットのアクセス可能性 | AR-FIND-01 | MUST |
| 1.9 | ia.link-headers | Link レスポンスヘッダー | AR-FIND-04, AR-READ-06 | MAY |
| 1.10 | ia.content-usage | Content-Usage の設定 | なし | MAY |
| 1.11 | ia.agents-md | AGENTS.md エージェントガイド | なし | MAY |
| 1.12 | ia.agent-content-contracts | エージェント向けコンテンツ契約 | AR-READ-11, AR-ACT-01 | MAY |
| 1.13 | ia.soft-404 | ソフト 404 の適切な処理 | AR-READ-02 | MUST |
| 1.14 | ia.dns-aid | DNS-AID エージェントレコード | なし | MAY |
| 1.15 | ia.pricing-page | ファーストパーティの料金ページ | AR-READ-11 | SHOULD |
トレーニング露出チェック(te.1~te.5)は参考情報であり、スコアには含まれません。references/checkpoints.md を参照してください。
修正ワークフロー
1.1 robots.txt の存在
/robots.txt が Content-Type: text/plain とともに 200 を返し、HTML ページではない場合に合格します。
- Web ルートに
robots.txtファイルを配置します:User-agent: * Allow: / Sitemap: https://example.com/sitemap.xml text/plainとして配信します。Nginx の場合:location = /robots.txt { default_type text/plain; }。
検証:curl -sfI https://example.com/robots.txt | grep -i '^content-type: text/plain'
1.2 AI クローラーの指示
robots.txt で AI ユーザーエージェントを明示的に許可している場合に合格します。記載がない場合は部分点となります。すべての AI エージェントを対象とする Disallow は不合格です。
- AI ユーザーエージェントごとにグループを追加します。完全な一覧はreferences/robots-txt-guide.mdにあります。
User-agent: GPTBot User-agent: OAI-SearchBot User-agent: ChatGPT-User User-agent: ClaudeBot User-agent: Claude-User User-agent: Claude-SearchBot User-agent: PerplexityBot User-agent: Google-Extended Allow: / - トレーニングをブロックしながら検索を許可するには、トレーニング用エージェントにのみ
Disallow: /を使用します。
確認: curl -sf https://example.com/robots.txt | grep -iE '^user-agent: *(GPTBot|OAI-SearchBot|ClaudeBot|Claude-User|PerplexityBot)'
1.3 XML サイトマップ
robots.txt の Sitemap: 行、/sitemap.xml または /sitemap_index.xml が、<urlset> または <sitemapindex> を含む XML を返す場合に合格します。
- フレームワークを使ってサイトマップを生成します(Next.js
sitemap.ts、WordPress/wp-sitemap.xml、Djangodjango.contrib.sitemaps)。<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url><loc>https://example.com/</loc><lastmod>2026-10-01</lastmod></url> </urlset> - robots.txt に
Sitemap: https://example.com/sitemap.xmlを追加します。
確認: curl -sf https://example.com/sitemap.xml | grep -qE '<(urlset|sitemapindex)'
1.4 llms.txt
/llms.txt が text/plain または text/markdown を返し、# 見出しで始まり、1 つ以上の URL を含む場合に合格します。/llms-full.txt ファイルがある場合はボーナス点となります。
/llms.txtを作成します。# Example Inc > Example Inc sells project planning software for small teams. ## Docs - [Getting started](https://example.com/docs/start): Set up a first project - [API reference](https://example.com/docs/api): REST endpointstext/markdownまたはtext/plainとして配信します。references/llms-txt-guide.mdを参照してください。
確認: curl -sf https://example.com/llms.txt | head -1 | grep -q '^# '
1.5 Meta robots/X-Robots-Tag
制限的なディレクティブがない場合に合格します。nofollow、nosnippet、noai または noimageai がある場合は部分点となります。noindex がある場合は不合格です。
<meta name="robots">からnoindexとnoaiを削除します。<meta name="robots" content="index, follow">を使用するか、タグを指定しません。- サーバーまたは CDN の設定から、制限的な
X-Robots-Tagヘッダーを削除します。
確認: curl -sfI https://example.com/ | grep -i '^x-robots-tag'(行がない、または noindex が含まれていないこと)
1.6 コンテンツの鮮度を示すシグナル
JSON-LD に dateModified があるか、ページに article:modified_time がある場合に合格します。datePublished または <time datetime> がある場合は部分点となります。Last-Modified ヘッダーのみの場合は、それより低い点数となります。
- ページの JSON-LD に日付を追加します。
{ "@context": "https://schema.org", "@type": "Article", "datePublished": "2026-09-01T09:00:00Z", "dateModified": "2026-10-15T14:30:00Z" } - または、
<meta property="article:modified_time" content="2026-10-15T14:30:00Z">を追加します。
確認: curl -sf https://example.com/ | grep -qE 'dateModified|article:modified_time'
1.7 コンテンツネゴシエーション(text/markdown)
Accept: text/markdown を指定したリクエストに対し、Content-Type: text/markdown と Vary: Accept ヘッダーが返され、見出しを含む 200 バイトを超えるコンテンツが返される場合に合格します。
Acceptヘッダーで要求された場合、ページの Markdown 版を返します。app.get("/", (req, res) => { res.vary("Accept"); if (req.accepts(["text/html", "text/markdown"]) === "text/markdown") { return res.type("text/markdown; charset=utf-8").send(renderMarkdown("/")); } res.send(renderHtml("/")); });- CDN が
Vary: Acceptを保持し、すべてのクライアントに同じバージョンをキャッシュしないようにします。
確認: curl -sfI -H 'Accept: text/markdown' https://example.com/ | grep -iE '^(content-type: text/markdown|vary:.*accept)'
1.8 HTTP によるボットのアクセス可能性
ホームページが 2xx を返す場合に合格します。WAF または CDN による 401 または 403 は不合格です。
- ブロックしている箇所を特定します。ブラウザーのユーザーエージェントと AI ユーザーエージェントのステータスコードを比較します。
- 検証済みの AI クローラーに対する WAF の例外を追加します。Cloudflare の場合は、Security、WAF、Custom rules の順に開き、「User Agent contains GPTBot」を設定し、アクションに Skip を指定します。
- robots.txt を尊重するクローラーに対して、ホームページにレート制限を設けないでください。
確認: curl -s -o /dev/null -w '%{http_code}' -A 'Mozilla/5.0 (compatible; GPTBot/1.0)' https://example.com/
1.9 リンクレスポンスヘッダー
ホームページが Link ヘッダー(RFC 8288)を送信し、api-catalog、service-desc、service-doc、sitemap、describedby、related のうち 2 つ以上を含む場合に合格します。1 つの rel の場合は部分点となります。
- ホームページのレスポンスにヘッダーを追加します。
add_header Link '</.well-known/api-catalog>; rel="api-catalog", </sitemap.xml>; rel="sitemap"' always; - 各ターゲット URL が 200 を返すことを確認します。
確認: curl -sfI https://example.com/ | grep -i '^link:'
1.10 コンテンツ利用設定
robots.txt に既知のキー(search、ai-input、ai-train)を含む Content-Signal: 行がある場合に合格します。既知のキーを含まない行は部分点となります。
- 設定を robots.txt の
User-agent: *グループに追加します。User-agent: * Content-Signal: search=yes, ai-input=yes, ai-train=no Allow: /
確認:curl -sf https://example.com/robots.txt | grep -i '^content-signal:'
1.11 AGENTS.md エージェントガイド
/AGENTS.md がテキストを返し、# 見出しで始まり、50 文字以上ある場合に合格します。HTML のソフト 404 ページは不合格です。
/AGENTS.mdを作成します。# Example Inc for agents - API: https://example.com/openapi.json (no key for read endpoints) - MCP: https://example.com/mcp (Streamable HTTP) - Docs: https://example.com/docs - Rate limit: 60 requests per minutetext/markdownとして配信します。
確認:curl -sf https://example.com/AGENTS.md | head -1 | grep -q '^# '
1.12 エージェント向けコンテンツの契約事項
HTML にログイン、料金、またはアプリの兆候がある場合に適用されます。該当する場合に /auth.md と /pricing.md が # 見出しを含むテキストを返し、80 文字以上あると合格します。
- プランと料金をテキストで記載した
/pricing.mdを作成します。サインイン方法、スコープ、エージェント向けルールを記載した/auth.mdを作成します。# Pricing - Free: 0 USD per month, 3 projects - Team: 12 USD per user per month, unlimited projects - 両方のファイルを
text/markdownとして配信します。
確認:curl -sfI https://example.com/pricing.md | grep -iE '^content-type: text/(markdown|plain)'
1.13 ソフト 404 対策
不明なパスが 404 または 410 を返す場合に合格します。それ以外のステータスやクロスオリジンリダイレクトは部分点となります。不明なパスに対して 2xx ページを返す場合は不合格です。
- 200 を返す、またはホームページにリダイレクトするキャッチオールルールを削除します。SPA の場合、不明なルートに対してサーバーが 404 を返すようにします。
location / { try_files $uri $uri/ =404; } - フレームワークでは、見つからないページとともに 404 ステータスを返します。200 ステータスでそのページをレンダリングしないでください。
確認:curl -s -o /dev/null -w '%{http_code}' https://example.com/.well-known/isagentready-missing-check
1.14 DNS-AID エージェントレコード
ドメイン配下の _index._agents、_mcp._agents、または _a2a._agents に SVCB レコードまたは HTTPS レコードがある場合に合格します。TXT レコードのみの場合は部分点となります。
- DNS プロバイダーで SVCB レコードを追加します。
_mcp._agents.example.com. 3600 IN SVCB 1 mcp.example.com. alpn="h2" port=443
確認:curl -s 'https://dns.google/resolve?name=_mcp._agents.example.com&type=SVCB' | jq -e '.Answer | length > 0'
1.15 ファーストパーティの料金ページ
サイトに料金の兆候がある場合に適用されます。/pricing(またはリンク先の料金ページ)が 200 を返し、サーバーでレンダリングされたテキストとして料金を表示する場合に合格します。Offer JSON-LD は任意です。
- プランと料金をサーバーの HTML にレンダリングします。JavaScript のみで読み込まないでください。
<section id="plans"> <h2>Team</h2> <p><data value="12">$12</data> per user per month</p> </section> - ホームページのナビゲーションからそのページにリンクします。
確認:curl -sf https://example.com/pricing | grep -qE '[$€£] ?[0-9]'
注意すべき主な点
- robots.txt がステータス 200 で HTML の 404 ページを返す。
- robots.txt または llms.txt の
Content-Typeがtext/htmlになっている。 User-agent: *のDisallow: /がすべての AI クローラーをブロックする。- CDN が
Vary: Acceptを破棄し、Markdown と HTML がキャッシュ内で混在する。 - キャッチオールルートがすべてのパスに対して 200 を返す(ソフト 404)。
正しい例と誤った例については、references/gotchas.md を参照してください。
参考資料
- references/checkpoints.md:各チェックポイントの生成済みチェックポイントデータ
- references/robots-txt-guide.md:robots.txt の構文、AI ユーザーエージェント、テスト
- references/llms-txt-guide.md:llms.txt の構造と、サイトの種類ごとの例
- references/gotchas.md:よくあるエラーと正しい例・誤った例