AI のクローラーには User-Agent を見て Markdown 版のページを返す
User-Agent が AI ボットなら index.html の代わりに index.md を返し、ページ内のリンクも .md に向ける。作者の観察では、狙いどおり .md をたどってクロールしていった。
どんな問題を解決する?
- HTML は装飾やスクリプトが多く、LLM が読むとトークンの無駄が多い
- エージェントに自分のサイトやドキュメントを正確に読んでほしい(SEO ではなく、AI 向けの最適化)
やり方
- 各ページの Markdown 版を用意する(静的サイトなら元の Markdown をそのまま公開するのが簡単)
- Web サーバーかエッジ(Cloudflare Workers など)で User-Agent を判定し、AI ボットなら同じパスの
.mdを返す - Markdown 内のリンクも
.md版に向けて、たどった先も Markdown になるようにする - 人間向けには HTML を返し続ける
ts
// 例: Cloudflare Workers(静的アセット付き)のイメージ
const AI_BOTS = /GPTBot|ClaudeBot|PerplexityBot|Google-Extended/i;
if (AI_BOTS.test(request.headers.get("user-agent") ?? "")) {
const mdUrl = new URL(request.url);
mdUrl.pathname = mdUrl.pathname.replace(/\/$/, "/index").replace(/(\.html)?$/, ".md");
return env.ASSETS.fetch(new Request(mdUrl, request)); // 自分自身を再帰呼び出ししないよう ASSETS から返す
}注意点
- ボットの User-Agent 名は変わるし、偽装もされる。判定リストは各社の公開情報で確かめて更新する
- 人とボットで中身を変えすぎると、検索エンジンからクローキングと見なされるおそれがある。内容は同じにし、形式だけ変える
llms.txtを置く方法や、Accept: text/markdownを見て返す方法と併用できる- 関連: AIコーディング: Webページは HTML ではなく Markdown にしてエージェントに渡す(curl.md / ax)