ブログを AI エージェントが読みやすい形にしてみた

約6分で読めます3,032文字

AI エージェントがこのブログを読みに来たときに、本文を Markdown で返すようにしてみた。あわせて、Link ヘッダーと Content Signals も入れた。Cloudflare と Vercel のスキャナーで測ると、点数はそれぞれ 20 点から 40 点、75 点から 97 点に上がった。何をしたのかと、やってみて思ったことを記録しておく。

きっかけ

「WebサイトをAgent Readyにしよう(新しいタブで開きます)」という記事を読んだのがきっかけだ。自分のサイトを Agent Ready にした記録で、AI エージェントが読みやすいサイトにするために何をしたか、スキャナーの点数がどう変わったかが書かれている。

Agent Ready は、AI エージェントがサイトを読んだり使ったりしやすい状態を指す。記事によると、Claude Code や Cursor などは、ページを取りに行くときに「Markdown があれば欲しい」と伝えている(Accept: text/markdown というヘッダーを送る)。サイトがそれに応えて Markdown を返せば、エージェントはヘッダーやサイドバーを含む HTML ではなく、本文だけを受け取れる。

記事を読んで、自分のブログも Agent Ready にしたいと思った。AIO(AI 検索最適化)の施策として有用なのではないか、このブログの訪問者も増えるのではないか、と考えたからだ。AIO は、AI が生成する検索結果に引用・評価されやすいようにサイトを整える取り組みを指す(マーケティングのコラム(新しいタブで開きます)による)。このブログも記事のサイトと同じく Cloudflare Workers で動いているので、同じことができそうだった。

記事ではどこまでやっているのかを確かめたうえで、同じ範囲まで自分のブログでもやってみることにした。

まず測ってみた

記事では 2 つのスキャナーで点数を測っていた。

スキャナー

運営

主に見ているもの

isitagentready.com(新しいタブで開きます)

Cloudflare

Markdown の返却、Link ヘッダー、robots.txt など

is-agentic.com(新しいタブで開きます)

Vercel

JavaScript なしで本文が読めるか、404 の返し方、構造化データなど

2 つは見ているところが違い、結果も違う。記事でも「検証する際は両方を使うとよい」と書かれていたので、両方で測った。あとで記事にするつもりだったので、対応前の結果は画面のスクリーンショットごと残しておくことにした。

対応前の結果は、isitagentready.com が 20 点(Level 1: Basic Web Presence)、is-agentic.com が 75 点(Ready with a few material gaps)だった。

対応前の isitagentready.com の結果。20 点、Level 1(Basic Web Presence)。項目別は Discoverability 2/4、Content 0/1、Bot Access Control 1/2、API, Auth, MCP & Skill Discovery 0/8
対応前の is-agentic.com の結果。75 点(Ready with a few material gaps)。Essential checks 60/80、Recommended 13.1/20、Bonus +1.4

robots.txt とサイトマップのチェックには合格していた。不合格だったのは、Markdown を返していないこと、Link ヘッダーがないこと、robots.txt に Content Signals がないことだった。実際に Accept: text/markdown を付けてトップページを取得すると、ふつうの HTML がそのまま返ってきた。

やったこと

Markdown を返す

ビルドのあとに、各ページの HTML から本文の部分だけを取り出して Markdown に変換し、index.md として隣に置くようにした。先頭にはタイトル、URL、公開日、タグを書いている。記事を増やしてもビルドのたびに作られるので、手で書く必要はない。

次に、リクエストを受ける Worker で Accept ヘッダーを見て、Markdown を望んでいればこの index.md を返すようにした。ブラウザは Markdown を求めないので、人がブラウザで開いたときはこれまでどおり HTML が返る。URL は HTML 版と同じだ。

これまでこのブログでは、ページのリクエストは Worker を通らず、静的なファイルがそのまま返っていた。Worker を通っていたのは、アクセスカウンターなどの API だけだ。Accept を見るにはページも Worker を通す必要があるので、設定を変えた。JavaScript や CSS、画像は対象から外している。

Link ヘッダーと Vary

HTML を返すときに、Link ヘッダーで Markdown 版、RSS、サイトマップの場所を伝えるようにした。エージェントにとっての案内板のようなものだ。

あわせて Vary: Accept も付けた。同じ URL でも Accept によって中身が変わることを、途中のキャッシュに伝えるためのヘッダーだ。参考記事では、フレームワークのキャッシュ処理でこのヘッダーが上書きされていて、付け直したと書かれていた。

存在しないページ

存在しないページに Markdown を求められたときは、ステータスは 404 のまま、Markdown で「ページがない」ことと、トップやサイトマップへのリンクを返すようにした。is-agentic.com が見ている項目で、参考記事でも対応していた。

Content Signals

robots.txt に次の 1 行を足した。

Content-Signal: search=yes, ai-input=yes, ai-train=no

検索結果に出すことと、AI の回答に引用することは許可し、AI の学習に使うことは断る、という意思表示だ。宣言なので、守るかどうかは読み取る側しだいになる。参考記事では Cloudflare の Bot Preference Sync という機能で自動で入れていたが、今回は robots.txt に直接書いた。

このブログは、自分が考えたことや思ったこと、やったことを発信するために作った。その中身を AI の学習には使ってほしくなかったので、学習だけは断った。

構造化データ

is-agentic.com の指摘に合わせて、構造化データ(JSON-LD)の著者情報に紹介文を足した。中身はサイドバーのプロフィールと同じ文章だ。

測り直した

デプロイしてから、同じ 2 つのスキャナーで測り直した。

スキャナー

対応前

対応後

isitagentready.com

20(Level 1)

40(Level 4: Agent-Integrated)

is-agentic.com

75

97(Strong technical baseline)

対応後の isitagentready.com の結果。40 点、Level 4(Agent-Integrated)。項目別は Discoverability 3/4、Content 1/1、Bot Access Control 2/2、API, Auth, MCP & Skill Discovery 0/8
対応後の is-agentic.com の結果。97 点(Strong technical baseline)。Essential checks 80/80、Recommended 14.4/20、Bonus +2.6

isitagentready.com では、Markdown の返却、Link ヘッダー、Content Signals の 3 つのチェックに合格した。is-agentic.com では、必須のチェック 6 つにすべて合格した。

isitagentready.com で残っているのは、DNS-AID と、API ・認証・ MCP などに関する 8 項目だ。DNS-AID は DNS の設定が必要で、このブログは独自ドメインを持っていないので対応できない。API などの 8 項目は API やログインのないブログには関係しないので、参考記事と同じく対象外にした。is-agentic.com で残っているのは、お問い合わせのページ(/contact)がないことだけだ。

やってみて思ったこと

ブラウザで開いたときの見た目は、何も変わっていない。変わったのは、エージェントが同じ URL を読みに来たときに返すものだけだ。

点数はスキャナーによってかなり違った。同じ対応をしても、isitagentready.com は 40 点、is-agentic.com は 97 点になる。2 つのスキャナーは確認する観点がそれぞれ違うので、両方で高い点数を出せれば、本当に Agent Ready なサイトになるのだろうと思った。