`linkValidation` 機能は、デプロイ前に壊れた参照を検出するため、ビルド時に内部リンクとアンカーフラグメントを検査します。`<a href>` と `<img src>` 要素を調べ、内部リンクとアンカーフラグメントが正しく解決されることを検証します。

:::note[標準プリセットに含まれます — warn モード]

`zudoDoc()` は `linkValidation: { failOnBroken: false }` として Link Validation を有効にします — **warn モード**です。このデフォルトに個別の設定フィールドは不要です。warn モードではビルドを失敗させることはなく、壊れた参照はビルド診断としてのみ報告されます。

:::

## 設定

このデフォルトを得るのに設定は不要です。

```ts title="zfb.config.ts"
import { defineConfig } from "zfb/config";
import { zudoDoc } from "@takazudo/zudo-doc/config";

export default defineConfig(
  zudoDoc({
    siteName: "My Docs",
  }),
);
```

代わりに壊れたリンクでビルドを失敗させる場合（zudo-doc では未使用 — CI を壊すため）は、プリセットの `markdown.features` をスプレッドして `linkValidation` を上書きします — 素の `defineConfig({ markdown: { features } })` はプリセットの残りの部分を破棄してしまいます。

```ts title="zfb.config.ts"
const base = zudoDoc({
  // ...your project settings
});

export default defineConfig({
  ...base,
  markdown: {
    ...base.markdown,
    features: {
      ...base.markdown.features,
      linkValidation: { failOnBroken: true },
    },
  },
});
```

## オプション

| オプション | デフォルト | 説明 |
| --- | --- | --- |
| `failOnBroken` | `false` | `true` の場合、壊れたリンクは `Error` 診断を生成しビルドを失敗させます。`false` の場合は警告のみです。 |

以前の zfb リリースには `allowExternal` オプションが存在しましたが、一度も効果を持ったことがなく、zfb `0.1.0-next.38` で削除されました。設定に残っている場合は削除してください。

## 検証対象

- 素のアンカーフラグメント（`#section-id`）— 現在のファイル内の見出し ID と照合。
- アンカーなしのファイルリンク（`./other.md`）— 対象ファイルが存在する必要があります。
- アンカー付きのファイルリンク（`./other.md#section-id`）— ファイルと見出し ID の両方が解決される必要があります。zfb `0.1.0-next.38` 以降、アンカーはファイルの存在だけでなく対象ファイルの実際の見出し（トランスクルードされた見出しを含む）と照合されます。バンドラーが走査するディレクトリの外にある対象は、存在チェックのみにフォールバックします。

外部 URL（`http://`、`https://`、`mailto:`、`tel:`）は常にスキップされます。

## `resolveMarkdownLinks` との関係

zudo-doc はすでに zfb の `resolveMarkdownLinks` を `onBrokenLinks: "warn"` で実行しており、相対パスの `.mdx`/`.md` リンクをクリーンなルート URL に解決し、壊れたファイルリンクに警告を出します。このコーパスでは、warn モードの `linkValidation` はそれを超える区別可能な出力を生成しません — 壊れたファイルリンクは `resolveMarkdownLinks` を通じて表面化し、どちらの設定もビルドを失敗させません。両者は補完的なビルド時リンクチェックであり、いずれも warn モードに保たれているため、紛れ込んだ壊れた参照がデプロイを妨げることはありません。