---
title: フロントマター
description: >-
  ページが受け付けるフロントマターフィールドをすべて解説します。すべて任意項目で、title、description、sidebar、SEO、search などが何を制御するのかをまとめています。
---

各ページでは以下のフロントマターを使用できます。すべてのフィールドは任意です。

| Prop | Type | Default | Description |
| - | - | - | - |
| `title?` | `string` | - | ページのタイトル。 |
| `description?` | `string` | - | ページの概要。 |
| `type?` | `string` | `doc` | コンテンツの種類。blog / changelog はフィードを生成します。 |
| `date?` | `string` | - | blog / changelog フィード用の公開日（ISO 形式または YAML の日付）。 |
| `authors?` | `string \| string[] \| object[]` | - | blog / changelog コンテンツの投稿者。名前、または name と任意の avatar / url、その他の追加フィールドを持つオブジェクトを指定します。値はそのまま保持されます。 |
| `slug?` | `string` | - | 生成されるスラッグを上書きします。 |
| `draft?` | `boolean` | `false` | 本番ビルドから除外します。 |
| `lastModified?` | `string` | - | ページの「最終更新日」を固定します（ISO 形式または YAML の日付）。git から取得した日付を上書きします。 |

## サイドバー [#sidebar]

```yaml lineNumbers
sidebar:
  label: Install
  order: 2
  icon: download
  badge: New
  hidden: false
  display: page
```

`hidden` はそのページをサイドバーと前後ページのページネーションから取り除きます。フォルダーの `index` ページで指定した場合は、そのページ自身の行だけが取り除かれます。グループの行は引き続きそのページへリンクし、前後ページのリンクもそのページを経由したままです。

`display` はそのページが属するフォルダーグループの表示モードを設定し（[グループ単位の上書き](/docs/content/navigation#per-group-overrides)）、生成されるサイドバーにおけるフォルダーの `index` ページでのみ意味を持ちます。それ以外の場所（index 以外のページ、コンテンツルート自身の `index` ページ、明示的な `navigation.sidebar` 配下のページ）では設定対象となるグループが存在しないため、Blume は `BLUME_SIDEBAR_DISPLAY_IGNORED` の警告を出します。

## SEO

```yaml lineNumbers
seo:
  title: Install Blume
  description: Install Blume and scaffold your first project.
  image: /og/install.png
  canonical: https://acme.com/install
  noindex: false
```

## 検索 [#search]

```yaml lineNumbers
search:
  exclude: false
  tags: [api]
```

## 変更履歴 [#changelog]

変更履歴のエントリー（`type: changelog`）では、フィードや表示のメタデータをより充実させるために、任意の `changelog` オブジェクトを指定できます。

```yaml lineNumbers
type: changelog
changelog:
  version: 1.2.0
  date: 2026-06-20
  category: Features
```

`date` はここに書いてもトップレベルに書いても構いません。どちらも[変更履歴の RSS フィード](/docs/content#feeds)に反映されます。生成されるタイムラインページとフィードについては、[変更履歴](/docs/advanced/changelog)を参照してください。

## カスタムキー [#custom-keys]

このリファレンスに記載されていないキーはビルドを失敗させるため、タイプミスを早期に検出できます。独自のメタデータを扱うプロジェクトでは、`blume.config.ts` の [`frontmatter.extend`](/docs/configuration#frontmatter) で追加のキーを許可できます。各キーはプロジェクト側が用意したスキーマで検証されます。

```ts blume.config.ts lineNumbers
import { defineConfig } from "blume";
import { z } from "zod";

export default defineConfig({
  frontmatter: {
    extend: {
      owner: z.string(),
      reviewedAt: z.coerce.date().optional(),
    },
  },
});
```

```yaml page.mdx
---
title: Install
owner: "@sam"
reviewedAt: 2026-06-20
---
```

スキーマは [Standard Schema](https://standardschema.dev) インターフェース経由で受け付けられるため、Zod（プロジェクトがインストールしているバージョンを問わず）、Valibot、ArkType のいずれも利用できます。宣言されたキーはすべてのページで検証されます。存在しない場合も含めて検証されるため、必須スキーマにするとサイト全体でそのキーが強制されます。存在するページでのみ検証したい場合は `.optional()` を付けてください。それ以外のキーは引き続き厳密に検証され、組み込みフィールドを再宣言することはできません。

### タイプ別のキー [#per-type-keys]

RFC の `status` やインシデントレポートの `severity` のように、特定のコンテンツタイプでのみキーを必須にしたい場合は、代わりに [`content.types`](/docs/configuration#content) の下で、適用対象となるフロントマターの `type` をキーとして宣言します。

```ts blume.config.ts lineNumbers
import { defineConfig } from "blume";
import { z } from "zod";

export default defineConfig({
  content: {
    types: {
      rfc: {
        frontmatter: {
          domain: z.string(),
          status: z.enum(["draft", "review", "enforced"]),
        },
      },
    },
  },
});
```

```yaml rfcs/openapi-request-schemas.mdx
---
title: OpenAPI request schemas
type: rfc
domain: architecture
status: enforced
---
```

タイプ別のキーは `extend` と同じ検証ルールに従い、解決された `type` が一致するページに限定して適用されます。宣言が [`content.defaultType`](/docs/configuration#content) に対するものであれば、`type` を指定していないページも対象に含まれます。1 つのキーはサイト全体の宣言かタイプ別の宣言のどちらか一方にのみ属し、両方に属することはできません。また、別のタイプでのみ宣言されたキーはそれ以外の場所では未知のキーのままなので、通常のドキュメントページに紛れ込んだ `status` は依然としてビルドを失敗させます。

検証に失敗したページがあると `blume build` は失敗し、該当するファイルとキーを示す診断メッセージが表示されます。[`--no-strict`](/docs/reference/cli#common-flags) を指定した場合はビルドが成功し、失敗したページは出力から除外されます。除外された件数はビルドのサマリーに報告されます。

スキーマはエディターや移行ツール向けに `blume/schema` からエクスポートされています。
