エージェントサポート
エージェントが OpenTelemetry ウェブサイトのコンテンツを利用しやすくするための設計メモ。
より広範なエージェントフレンドリーなコンテンツ配信機能の設計メモです。
Markdown コンテンツネゴシエーション
リクエストが明示的に text/markdown を要求または優先する場合、Netlify Edge Function を使用して Hugo のビルド済み index.md 出力を配信します。
根拠
- すべての HTML ページに Markdown 版が必要なわけではありません。
- HTTP ネゴシエーションは配信レイヤーに属します。
- Markdown の成果物が存在しない場合、この関数は通常の HTML にフォールバックできます。
ルール
GETとHEADのみが対象です。.mdやその他のページ以外のリソースへのリクエストはネゴシエーションをバイパスします。- ページ的なリクエストには以下が含まれます:
- スラッシュで終わるパス
- 拡張子なしのパス
.../index.htmlパス
text/markdownがqがゼロより大きい値で受け入れられ、かつそのqがtext/html/application/xhtml+xmlの最も高いq以上の場合に Markdown が配信されます(同じ重みの場合は Markdown が選択されます)。*/*のようなワイルドカードは意図的に無視されます。 明示的な markdown/html メディアタイプのみが q 値に寄与します。 これは保守的な選択であり、後で見直される可能性があります。- Markdown が見つからない場合は通常の HTML レスポンスにフォールバックします。
- ネゴシエーションされたレスポンスは
Vary: Acceptを設定します。 /search/は HTML のみを出力するため、常に HTML にフォールバックします。
パスマッピングに関する注意事項:
/docs/のようなきれいな URL は、Hugo の/docs/index.md出力にマッピングされます。index.htmlは隣接する.mdファイルにマッピングされます(例:/docs/index.html→/docs/index.md)。- その他の
.htmlパスは Netlify の通常のリダイレクトとルーティングに委ねられます。 たとえば、Netlify は/docs.htmlを/docs/にリダイレクトします。
関連する実装
config/_default/hugo.yamlがこのサイトの Markdown 出力を有効にしています。content/en/search.mdがoutputs: [HTML]で検索ページを除外しています。netlify.tomlが他のルートハンドリングより前に Edge Function を配置します。netlify/edge-functions/markdown-negotiation/index.tsがネゴシエーションを実装しています。netlify/edge-functions/markdown-negotiation.tsはそれを再エクスポートする Netlify のエントリスタブです。