mcpField
A
ai-content-discovery

ai-content-discovery

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

ai-content-discovery について

ai-content-discovery は、IsAgentReady.com の AI Content Discovery の検査項目を修正するスキルです。AI システムがサイトを発見、クロール、閲覧できるようにし、検証と再スキャンの手順も提供します。

主な機能

  1. 01robots.txt とクローラー規則の設定
  2. 02XML サイトマップの作成
  3. 03llms.txt と AGENTS.md の追加
  4. 04Markdown のコンテンツネゴシエーション対応
  5. 05HTTP アクセスとソフト 404 の確認

活用シーン

  1. 01AI Content Discovery のスキャン失敗への対応
  2. 02特定の AI クローラーのアクセス許可または制限
  3. 03エージェント向けサイトガイドとコンテンツ入口の提供

インストール

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

$npx skills add https://github.com/bartwaardenburg/isagentready-skills --skill ai-content-discovery

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
checkpoints.md
gotchas.md
llms-txt-guide.md
robots-txt-guide.md

詳細

AI コンテンツの発見可能性

IsAgentReady.com の AI コンテンツの発見可能性カテゴリを改善します。これらのチェックポイントでは、AI システムがサイトを見つけ、クロールし、読み取れるかをテストします。

使用する場合

  • スキャンで 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 を使用してください。

手順

  1. スキャンから失敗したチェックポイントを取得します。各結果には、旧 ID(1.4)と安定 ID(ia.llms-txt)があります。
  2. 安定 ID と同じアンカーを使って、修正ワークフローに移動します。
  3. 例をサイトに合わせて調整します。example.com をサイトのドメインに置き換えてください。
  4. 検証コマンドを実行します。検証コマンドはすべて読み取り専用です。
  5. isagentready results <domain> --checkpoint <stable-id> を使って再スキャンするか、isagentready.com で再スキャンします。

$ARGUMENTS が指定されている場合は、修正する URL またはチェックポイントとして使用してください。

チェックポイント

強度は agentready.org 仕様のレベル(MUST、SHOULD、MAY)です。強度によってスコアは変わりません。

旧 ID安定 ID名前AR ID強度
1.1ia.robots-txtrobots.txt の存在AR-FIND-01MUST
1.2ia.ai-crawler-directivesAI クローラーの指示AR-FIND-01MUST
1.3ia.xml-sitemapXML サイトマップAR-FIND-03SHOULD
1.4ia.llms-txtllms.txtAR-READ-07SHOULD
1.5ia.meta-robotsMeta robots / X-Robots-TagAR-FIND-01MUST
1.6ia.content-freshnessコンテンツの鮮度シグナルなしMAY
1.7ia.markdown-negotiationコンテンツネゴシエーション(text/markdown)AR-READ-09MAY
1.8ia.bot-accessibilityHTTP によるボットのアクセス可能性AR-FIND-01MUST
1.9ia.link-headersLink レスポンスヘッダーAR-FIND-04, AR-READ-06MAY
1.10ia.content-usageContent-Usage の設定なしMAY
1.11ia.agents-mdAGENTS.md エージェントガイドなしMAY
1.12ia.agent-content-contractsエージェント向けコンテンツ契約AR-READ-11, AR-ACT-01MAY
1.13ia.soft-404ソフト 404 の適切な処理AR-READ-02MUST
1.14ia.dns-aidDNS-AID エージェントレコードなしMAY
1.15ia.pricing-pageファーストパーティの料金ページAR-READ-11SHOULD

トレーニング露出チェック(te.1~te.5)は参考情報であり、スコアには含まれません。references/checkpoints.md を参照してください。

修正ワークフロー

1.1 robots.txt の存在

/robots.txt が Content-Type: text/plain とともに 200 を返し、HTML ページではない場合に合格します。

  1. Web ルートに robots.txt ファイルを配置します:
    User-agent: *
    Allow: /
    
    Sitemap: https://example.com/sitemap.xml
    
  2. 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 は不合格です。

  1. 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: /
    
  2. トレーニングをブロックしながら検索を許可するには、トレーニング用エージェントにのみ 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 を返す場合に合格します。

  1. フレームワークを使ってサイトマップを生成します(Next.js sitemap.ts、WordPress /wp-sitemap.xml、Django django.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>
    
  2. 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 ファイルがある場合はボーナス点となります。

  1. /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 endpoints
    
  2. text/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 がある場合は不合格です。

  1. <meta name="robots"> から noindex と noai を削除します。<meta name="robots" content="index, follow"> を使用するか、タグを指定しません。
  2. サーバーまたは 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 ヘッダーのみの場合は、それより低い点数となります。

  1. ページの JSON-LD に日付を追加します。
    { "@context": "https://schema.org", "@type": "Article",
      "datePublished": "2026-09-01T09:00:00Z", "dateModified": "2026-10-15T14:30:00Z" }
    
  2. または、<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 バイトを超えるコンテンツが返される場合に合格します。

  1. 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("/"));
    });
    
  2. 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 は不合格です。

  1. ブロックしている箇所を特定します。ブラウザーのユーザーエージェントと AI ユーザーエージェントのステータスコードを比較します。
  2. 検証済みの AI クローラーに対する WAF の例外を追加します。Cloudflare の場合は、Security、WAF、Custom rules の順に開き、「User Agent contains GPTBot」を設定し、アクションに Skip を指定します。
  3. 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 の場合は部分点となります。

  1. ホームページのレスポンスにヘッダーを追加します。
    add_header Link '</.well-known/api-catalog>; rel="api-catalog", </sitemap.xml>; rel="sitemap"' always;
    
  2. 各ターゲット URL が 200 を返すことを確認します。

確認: curl -sfI https://example.com/ | grep -i '^link:'

1.10 コンテンツ利用設定

robots.txt に既知のキー(search、ai-input、ai-train)を含む Content-Signal: 行がある場合に合格します。既知のキーを含まない行は部分点となります。

  1. 設定を 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 ページは不合格です。

  1. /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 minute
    
  2. text/markdown として配信します。

確認:curl -sf https://example.com/AGENTS.md | head -1 | grep -q '^# '

1.12 エージェント向けコンテンツの契約事項

HTML にログイン、料金、またはアプリの兆候がある場合に適用されます。該当する場合に /auth.md と /pricing.md が # 見出しを含むテキストを返し、80 文字以上あると合格します。

  1. プランと料金をテキストで記載した /pricing.md を作成します。サインイン方法、スコープ、エージェント向けルールを記載した /auth.md を作成します。
    # Pricing
    
    - Free: 0 USD per month, 3 projects
    - Team: 12 USD per user per month, unlimited projects
    
  2. 両方のファイルを text/markdown として配信します。

確認:curl -sfI https://example.com/pricing.md | grep -iE '^content-type: text/(markdown|plain)'

1.13 ソフト 404 対策

不明なパスが 404 または 410 を返す場合に合格します。それ以外のステータスやクロスオリジンリダイレクトは部分点となります。不明なパスに対して 2xx ページを返す場合は不合格です。

  1. 200 を返す、またはホームページにリダイレクトするキャッチオールルールを削除します。SPA の場合、不明なルートに対してサーバーが 404 を返すようにします。
    location / { try_files $uri $uri/ =404; }
    
  2. フレームワークでは、見つからないページとともに 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 レコードのみの場合は部分点となります。

  1. 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 は任意です。

  1. プランと料金をサーバーの HTML にレンダリングします。JavaScript のみで読み込まないでください。
    <section id="plans">
      <h2>Team</h2>
      <p><data value="12">$12</data> per user per month</p>
    </section>
    
  2. ホームページのナビゲーションからそのページにリンクします。

確認:curl -sf https://example.com/pricing | grep -qE '[$€£] ?[0-9]'

注意すべき主な点

  1. robots.txt がステータス 200 で HTML の 404 ページを返す。
  2. robots.txt または llms.txt の Content-Type が text/html になっている。
  3. User-agent: * の Disallow: / がすべての AI クローラーをブロックする。
  4. CDN が Vary: Accept を破棄し、Markdown と HTML がキャッシュ内で混在する。
  5. キャッチオールルートがすべてのパスに対して 200 を返す(ソフト 404)。

正しい例と誤った例については、references/gotchas.md を参照してください。

参考資料

コメント