Astro v5 のプリレンダリングされたエンドポイントでは、カスタム Response ヘッダーが本番ビルド時に無視される仕様がある。開発環境では以下のコードで正常に動作するが、本番ビルドでは charset=utf-8 が削除され、日本語が文字化けする。
const headers = new Headers({
'Content-Type': 'text/markdown; charset=utf-8',
});
return new Response(body, {
status: 200,
headers, // 開発環境では有効、本番ビルドでは無視される
});Copied!
デプロイ先が Cloudflare の場合、_headers ファイル機能を使用して解決できる。public/_headers に以下を追加することで、本番環境でも charset=utf-8 を保持できる。
# Markdownエンドポイント: charset=utf-8を明示
/blog/*.md
Content-Type: text/markdown; charset=utf-8Copied!