9月28日、Nicholas Khami氏が「Use the Accept Header to serve Markdown instead of HTML to LLMs」と題したブログ記事を公開し、話題を呼んでいる。
この記事では、WebサイトがLLM(大規模言語モデル)のクローラーに対してHTMLではなくMarkdownを返す仕組みを導入する方法と、その効果について詳しく紹介されている。とりわけ重要なのは、Markdownを返すことでトークン消費を約10分の1に削減できるという点である。これはコスト削減だけでなく、クローラーがより多くのページを処理しやすくなるため、AI経由での露出増加にも直結する。以下に、その内容を紹介する。
LLMクローラーとAccept
ヘッダー
著者は、エージェントやLLMにとってHTMLは不要な装飾を多く含み、無駄にトークンを消費させると指摘する。Markdownを返すことでトークン数は約1/10になり、Bunチームの実測でも同様の効果が報告されている。
一部のLLMクローラーは、Accept: text/plain
や Accept: text/markdown
をリクエストヘッダーに含めてアクセスしており、対応していれば自動的にMarkdownを取得する。すべてのクローラーが対応済みではないが、こうした設定を行うことで対応クローラーに効率的なコンテンツを提供できる。
試すには以下のようにcurl
コマンドを利用すればよい。
curl -H "Accept: text/markdown" https://www.skeptrune.com
curl -H "Accept: text/plain" https://www.skeptrune.com
サイト運営者にとっての利点
この仕組みは一見、「LLMプラットフォーマーにとっての(処理トークン減少による)」コスト削減メリット」にしか見えないかも知れないが、サイト運営者にも以下の利点がある。
AI検索での露出増加
軽量なMarkdownを返すことでクロール効率が上がり、より多くのページが学習対象になりやすい。結果としてAIアシスタントや検索エンジンに引用されやすくなる。GEO(Generative Engine Optimization)の効果
SEOが検索エンジン最適化だったのに対し、今後は生成AIに向けた最適化が重要になる。Markdown対応はその具体例である。インデックス網羅性の向上
LLMクローラーが効率的にサイト全体を処理できるため、部分的にしか収集されないリスクを軽減できる。自分自身の効率化
運営者が自サイトをLLMに取り込む際にも、余計なトークンを使わずに済み、内部活用やAI連携に有利になる。
実装方法とサンプルコード
AstroやGatsbyのような静的サイトジェネレーターでは、生成済みのHTMLをMarkdownに変換するだけでよい。著者は@wcj/html-to-markdown-cli
を利用し、以下のスクリプトを紹介している。
# convert-to-markdown.sh
mkdir -p dist/markdown
find dist/html -type f -name "*.html" | while read -r file; do
relative_path="${file#dist/html/}"
dest_path="dist/markdown/${relative_path%.html}.md"
mkdir -p "$(dirname "$dest_path")"
# マークダウンへの変換
npx @wcj/html-to-markdown-cli "$file" --stdout > "$dest_path"
done
これをpackage.json
に組み込むことで、自動的に変換が走るように設定できる。
Cloudflare WorkersとCaddyでの実装
Cloudflare Workersでは、Accept
ヘッダーを確認し、Markdownを優先的に返すスクリプトを用意する。
export default {
async fetch(request, env) {
const acceptHeader = request.headers.get("accept") || "";
// Acceptヘッダの解析
const prefersMarkdown =
acceptHeader.includes("text/markdown") || acceptHeader.includes("text/plain");
if (prefersMarkdown) {
// Markdownを返す処理
} else {
// HTMLを返す処理
}
},
};
一方、Caddyのようなリバースプロキシを使えば、以下のように設定ファイルだけで同様の仕組みを構築できる。
@markdown {
header Accept *text/markdown*
header Accept *text/plain*
not header Accept *text/html*
}
handle @markdown {
rewrite * /markdown{path}/index.md
try_files {path} {path}.md /markdown/index.md
file_server
}
結論:トークン削減と新時代の最適化
Markdownを返す仕組みは、トークン数を1/10に削減できるという経済的な利点に加え、GEO(Generative Engine Optimization)の観点からも有効である。AIクローラーに効率的に収集され、アシスタントや生成検索の文脈で引用される確率が高まる。
著者は、この機能を自身のブログとPatron.comに実装し、わずか数時間で運用可能になったと述べている。今後の解析結果に期待を寄せつつ、他の開発者にも導入を推奨している。
詳細はUse the Accept Header to serve Markdown instead of HTML to LLMsを参照していただきたい。