Skip to content

ページ head#

View Markdown

Ox Content は <title>metalink、JSON-LD を ビルド時 に解決します。 Unhead ランタイムも、クライアントの head マネージャも、追加のブラウザ JS もありません。

テーマ付きページ、bare、ssg.renderssg: false は同じ型付きリゾルバを使います。 文書を自分で持つときは、こう呼びます。

import { renderHead } from "@ox-content/vite-plugin";

const { html, diagnostics } = renderHead({
  site: { name: "Docs", url: "https://example.com" },
  title: "Guide",
  description: "How it works",
  canonical: "https://example.com/guide/",
});

html はすでにエスケープ済みです。<head> に差し込みます。独自の ssg.render レイアウトなら raw() が使えます。 @ox-content/vite-plugin-svelte も同じ renderHead を再エクスポートします。

ホスト head タグの出し方
既定テーマ 組み込みリゾルバ。従来どおりの OG / Twitter。
bare: true 同じリゾルバ。説明、siteUrl、サイト名、OG 画像があるときだけソーシャルタグを出す。
ssg.render / ssg: false 何も注入しない。renderHead を呼んで自分で書く。

既存サイトのタグは、SEOssg.siteUrlrobots、ロケール alternate) や JSON-LD をオプトインしない限り変わりません。

デスクリプタ#

renderHead は Unhead 形の入力を受けます。同じ identity の後勝ちで、位置は最初のままです。

フィールド Identity
title title は一つ
metas key、なければ name / property / httpEquiv
links key、なければ rel、または alternate + hreflang
jsonLd key
renderHead({
  title: "Guide",
  titleTemplate: "%s · %siteName",
  site: { name: "Docs" },
  metas: [{ name: "theme-color", content: "#111" }],
  links: [{ rel: "icon", href: "https://example.com/favicon.ico" }],
  jsonLd: [{ key: "blog", json: JSON.stringify({ "@type": "BlogPosting" }) }],
});

twitter.imggg のような未知キーは TypeScript エラーです。追加タグは metas / links に入れてください。

安全性#

属性値は HTML エスケープします。JSON-LD の script 本文は <>&、 U+2028 / U+2029 を \uXXXX にします。

javascript:data:vbscript:、プロトコル相対の // は落とします。 独自ホストは既定で検証します。組み込みの themed / bare は、これまで計算していた OG 画像と canonical の文字列をそのまま出します。

ssg.headValidationSEO を見てください。

関連#

Last updated: