Read in:
Русский

Заметки с произвольным Content-Type

Поле content_type во frontmatter позволяет отдавать заметку как любой MIME-тип вместо обычной HTML-страницы. Тело заметки отдаётся как есть, frontmatter вырезается. Никакой HTML-обёртки, никакого шаблона.

Пример

---
slug: /data.csv
content_type: text/csv; charset=utf-8
free: true
---
name,value
alpha,1
beta,2

Запрос к /data.csv вернёт Content-Type: text/csv и строки CSV.

Что происходит

Когда content_type задан, путь рендеринга пропускает HTML-обёртку:

  1. Устанавливает заголовок Content-Type из значения поля.
  2. Вырезает frontmatter (блок между ---).
  3. Возвращает оставшийся текст дословно.
  4. Пропускает кэш страниц (кэш хранит только text/html).

Правила доступа работают как обычно: free: true делает заметку публичной, платные заметки требуют токена.

Поддерживаемые значения

Подходит любой корректный MIME-тип:

Значение Применение
text/plain; charset=utf-8 robots.txt, llms.txt, любой текстовый файл
text/csv; charset=utf-8 Экспорт данных в CSV
application/json Простые JSON-эндпоинты
application/xml XML-фиды или дополнительные sitemap

Совместно с шаблоном

Если у заметки есть и content_type, и layout, тело формирует Jet-шаблон, а content_type из frontmatter задаёт заголовок. Это удобно, когда тело нужно сформировать динамически.

Для статического контента без шаблонной логики лучше просто написать тело прямо в заметке, без layout.

Примечания

  • search: false исключает заметку из поиска по сайту — для машиночитаемых файлов это обычно нужно.
  • Markdown не рендерится в HTML. Тело отдаётся как сырой текст — заголовки, списки и ссылки остаются в виде markdown-символов.
  • Практический пример двух популярных текстовых файлов — robots.txt и llms.txt.