# Siteon ドキュメント(全文) > Siteon は、AI で作ったサイトのためのインフラです。Claude Code・Codex・Cursor などで作った(手で書いたものも)静的サイト(HTML)をそのまま使い、置く(ホスティング: コマンド1つで公開・前の版に戻す)、直す(CMS: お客さん(お店の人)が管理画面から直せる箇所。表示回数のグラフつき)、受ける(お問い合わせフォーム: 保存・自動返信・メール/Slack 通知)、任せる(CLI・MCP サーバー・API キーで AI エージェントから操作)を1つのサービスで提供します。組み込みは script 1行と HTML の属性だけで、サイト側に JavaScript は書きません。 - 読み込むスクリプト: `https://cdn.siteon.dev/sitekit.js`(`data-site` にサイト ID) - フォームは `
`、入力の name は forms[].fields の key と一致させる。ボット対策の `_hp` 入力(隠す)は必須 - 直せる箇所は `data-cms="."` などの属性で印を付ける。何を直せるかは schema.json で宣言する - CMS が止まっても、HTML に書いた静的な文言がそのまま表示される(サイトは止まらない) - ホスティング込み(Free プランでも公開でき、小さな「Made with Siteon」バッジが付く。有料プランはバッジなし・容量が多い): `siteon deploy ` で `https://<サブドメイン>.siteun.com/` に公開し、配信の前に CMS の値を埋め込む。`siteon rollback` で前の版に戻せる。独自ドメイン(`domains`)は準備中(近日) - CLI(`siteon`)・MCP サーバー・API キーで、サイトの作成・schema の反映・テスト送信・お問い合わせの確認・公開ができる。登録・支払い・書き出し・退会もセルフサービス(人の手続きは無い) --- # はじめに > サイトを動かし続ける土台の4つの柱(置く・直す・受ける・任せる)と、5分で動かす手順(登録 → script を1行 → 属性を付ける → 公開 → 管理画面で確かめる)。 URL: https://siteon.dev/ja/docs Siteon は、AI で作ったサイトのためのインフラです。AI や手で作った静的サイト(HTML)に、ホスティング・お客さん(お店の人)が直せる CMS・お問い合わせフォーム・アクセス解析・AI エージェントからの操作(CLI・MCP)を足し、そのまま納品できる状態にします。 ## Siteon でできること Siteon は、できあがった静的サイト(HTML)を公開し、動かし続けるための土台です。AI が作れるのはサイトの見た目までで、その後に残る公開・更新・問い合わせ・運用を引き受けます。サイトをどう作ったかは問いません。AI に作らせた HTML でも、手で書いた HTML でも同じように使えます。 土台は4つの柱でできています。必要なものから使えます。 - **置く — ホスティング** — ビルドしたフォルダを `siteon deploy` で公開し、配信の前に CMS の値を埋め込みます。`siteon rollback` で前の版に戻せます。いまのホスティングに置いたままでも使えます。Free プラン でも `<名前>.siteun.com` で公開でき(「Made with Siteon」のバッジつき)、独自ドメインとバッジの非表示は有料プラン(月500円から)です。独自ドメインでの公開は準備中です (近日) - **直す — お店の人が直せる箇所(CMS)** — 営業時間・お知らせ・写真など、HTML に印を付けた箇所を、お店の人が管理画面から直せます - **受ける — お問い合わせフォーム** — 送信の受付・保存、お店へのメールと Slack の通知、お客様へのお礼メール(自動返信)。広告から来た人の流入元(`utm_*` など)の記録、GTM の読み込み、送信をコンバージョンとして数えるイベント、Zapier・Make・CRM へ送る [Webhook](https://siteon.dev/ja/docs/webhooks)(有料プラン)もここに含みます - **任せる — AI エージェントからの操作** — CLI・MCP サーバー・API キーで、サイトの作成・schema の反映・テスト送信・公開・お問い合わせの確認まで、エージェントに任せられます([CLI と MCP](https://siteon.dev/ja/docs/cli-mcp)) 登録・支払い・API キーの発行・書き出し・退会まで、管理画面とコマンドでご自身で進められます。困ったときは、このドキュメントの [よくあるエラーと対処](https://siteon.dev/ja/docs/troubleshooting) で症状から引けます。 サイト側で JavaScript は書きません。hidden 項目を足す必要もありません。script を1行入れて、HTML に属性を付けるだけです。 **CMS が止まってもサイトは止まりません。** 値が届かないときは、HTML に書いた静的な文言がそのまま表示されます。だから HTML の文言は、それだけ読んで意味が通る内容にしておきます。 ## 5分で動かす ### 1. サイトを登録して、サイト ID を受け取る メールアドレスを入れると、ログイン用のリンクが届きます。開くとFree プランでサイトが1つ作られ、サイト ID(例: `hanaya`)が決まります。開発用・プレビュー用のドメイン(`localhost` や `*.pages.dev` など)と、Siteon のホスティングのサブドメイン(`<名前>.siteun.com`)で動かせます。詳しくは [プランと上限](https://siteon.dev/ja/docs/plans)。 ### 2. script を1行入れる `` の直前か、`` に `defer` 付きで入れます。`data-site` にサイト ID を書きます。 ```html ``` ### 3. 属性を付ける フォームは、`` に `data-sitekit-form` を付けるだけです。送信処理は script が行います。 ```html ``` お店の人に直してもらう箇所には `data-cms` を付けます。中の文言は、値が届かないときにそのまま出る既定の文言です。 ```html
営業日
月〜土
時間
10:00 - 18:00
``` ### 4. schema.json で「何を直せるか」「どんなフォームか」を決める 上の HTML に合わせると、こう書きます。`forms[].key` がフォームの `data-sitekit-form` の値と、`fields[].key` が入力の `name` と一致している必要があります。 ```json { "locales": ["ja"], "groups": [ { "key": "hours", "label": "営業時間", "fields": [ { "key": "days", "label": "営業日", "type": "text" }, { "key": "time", "label": "時間", "type": "text" } ] } ], "forms": [ { "key": "contact", "label": "お問い合わせ", "fields": [ { "key": "name", "label": "お名前", "type": "text", "required": true }, { "key": "email", "label": "メールアドレス", "type": "email", "required": true }, { "key": "message", "label": "お問い合わせ内容", "type": "textarea" } ] } ] } ``` 書き方の全体は [schema.json の書き方](https://siteon.dev/ja/docs/schema)。schema.json の反映は、CLI の `siteon schema push` か MCP の `update_schema` で行えます([CLI・MCP・API キー](https://siteon.dev/ja/docs/cli-mcp))。2つ目からのサイトは、管理画面の「サイトを追加」か `siteon sites create` で作ります。 ### 5. 公開する ビルドしたフォルダをそのまま公開できます。 ```sh siteon hosting enable --site hanaya # 初回だけ siteon deploy ./dist --site hanaya # https://hanaya.siteun.com/ に公開 ``` いまのホスティング(Cloudflare Pages など)に置いたまま使うこともできます。違いは [ホスティングと配信](https://siteon.dev/ja/docs/hosting) にあります。 ### 6. 管理画面で確かめる [管理画面](https://app.siteon.dev) にログインすると、schema.json に書いた項目が入力欄として並びます。値を直して公開すると、Siteon のホスティングなら 15 秒以内、中継や `data-embed` なら最長1分でサイトに反映されます(サイトの再デプロイは要りません)。フォームから送ったお問い合わせも、管理画面の一覧に届きます。 ## 用語 | 用語 | 意味 | |---|---| | サイト ID | サイトごとの識別子。script の `data-site`、API の URL に入る | | schema.json | お店の人が直せる項目と、フォームの項目を宣言するファイル | | 公開 JSON | 公開中の内容をまとめた JSON。中継や `data-embed` がこれを読んで HTML に埋める | | 中継 | Cloudflare Pages の Pages Functions。配信前に公開 JSON の値を HTML に埋め込む | | deploy | ビルドしたフォルダを Siteon のホスティングに公開すること。公開した1回分を「版」と呼ぶ | | 主言語 | schema.json の `locales` の先頭。お店の人が入力する言語で、翻訳が無いときの表示にも使う | ## 次に読む - [script タグ](https://siteon.dev/ja/docs/script) — 属性の一覧と、script だけで動くもの - [直せる箇所の印(CMS)](https://siteon.dev/ja/docs/cms) — テキスト・写真・お知らせの一覧・多言語 - [フォーム](https://siteon.dev/ja/docs/forms) — 表示・通知・自動返信・コンバージョンの計測・テスト送信 - [Webhook](https://siteon.dev/ja/docs/webhooks) — お問い合わせを Zapier・Make・CRM へ署名付きで送る - [日程調整](https://siteon.dev/ja/docs/scheduling) (近日)— 商談・面談の 1 対 1 の予約。Google カレンダー・Meet と連携 - [AI エージェントに渡す](https://siteon.dev/ja/docs/agents) — Claude Code や Cursor にそのまま貼れる指示文 --- # script タグ > 1行の script で動くもの(流入元の記録・フォーム送信・GTM)と、属性の一覧。 URL: https://siteon.dev/ja/docs/script Siteon は、AI で作ったサイトのためのインフラです。AI や手で作った静的サイト(HTML)に、ホスティング・お客さん(お店の人)が直せる CMS・お問い合わせフォーム・アクセス解析・AI エージェントからの操作(CLI・MCP)を足し、そのまま納品できる状態にします。 ## 書き方 `` の直前、または `` に `defer` 付きで1行入れます。 ```html ``` これだけで次の3つが動きます。 - **流入元(UTM)の記録** — 広告などから来た人の `utm_*` / `gclid` / `fbclid` をブラウザに覚えておき、フォーム送信のときに自動で添える - **フォーム送信** — `data-sitekit-form` を付けた `
` を、ページを移動せずに送る - **GTM の読み込み** — `data-gtm` を書いたときだけ ## 属性の一覧 | 属性 | 必須 | 説明 | |---|---|---| | `data-site` | 必須 | サイト ID。無いときは**何もせず黙って終わる**(エラーも出さない) | | `data-locale` | | 取得する言語。省略すると ``、それも無ければ `ja` | | `data-gtm` | | GTM のコンテナ ID(`GTM-XXXXXXX` の形)。形が違えば無視する | | `data-embed` | | 表示時に CMS の値を埋め込む。中継を使えないホスティング向けで、**ふだんは付けない**([ホスティングと配信](https://siteon.dev/ja/docs/hosting)) | - **接続先は属性で指定しません。** script 自身の `src` のオリジン(`https://cdn.siteon.dev`)に接続します。`src` が `http(s)` でない場合(ファイルを直接開いたときなど)は何もしません - **`integrity`(SRI)は付けません。** サイトの HTML を触らずに script を更新できるようにしているためです - 1ページに script を2つ置く使い方には対応していません ## 流入元(UTM)の記録 広告のリンクなどから来たときの次の値を、ブラウザの `localStorage` に記録します。 | 記録する値 | 内容 | |---|---| | `utm_source` / `utm_medium` / `utm_campaign` / `utm_term` / `utm_content` | URL の UTM パラメータ | | `gclid` / `fbclid` | Google 広告 / Meta 広告のクリック ID | | `landing` / `referrer` / `at` | 着地したページ・参照元・日時 | - 「最初に来たとき(first)」と「最後に来たとき(last)」の2つを覚えます。保存期間は 90 日です - フォームを送ると、お問い合わせと一緒に保存されます。サイト側で hidden 項目を足す必要はありません - 1つの値が 500 文字を超える場合は切り詰めて記録します - ブラウザが `localStorage` を使わせない設定のときは記録しません(フォームの送信は動きます) ## GTM の読み込み `data-gtm` に書いたコンテナを読み込みます。 ```html ``` 管理画面の「設定 → 詳細」でも GTM ID を入れられます。こちらは中継(Cloudflare Pages)が `` にタグを差し込む経路で、反映は公開 JSON のキャッシュ(60秒)が切れたあとです。**両方に書くと、差し込まれたタグと `data-gtm` のコンテナが食い違います。** 中継を使うサイトでは `data-gtm` は書かず、管理画面で設定してください。 フォーム送信を GTM で拾う方法は [フォーム](https://siteon.dev/ja/docs/forms#送信を-gtm-で拾う) にあります。 ## window.SiteKit 読み込み後に `window.SiteKit` ができます。ふだんは触らなくてかまいません。 | メンバー | 説明 | |---|---| | `SiteKit.version` | ビルドのバージョン文字列 | | `SiteKit.attribution()` | 記録中の流入元。無ければ `null` | | `SiteKit.bindForms()` | フォームを結び付け直す。あとから JavaScript でフォームを足したときに呼ぶ | | `SiteKit.refresh()` | `localStorage` から流入元を読み直す | ## キャッシュ script(`https://cdn.siteon.dev/sitekit.js`)は5分キャッシュされます。不具合の修正は、サイトの HTML を触らずにおおむね5分で全訪問者へ行き渡ります。逆に、バージョンを固定する使い方には向きません。 ## CSP を設定している場合 script タグ(と `data-gtm`)だけの場合、許可するオリジンは次の2つです。 ```text script-src 'self' https://cdn.siteon.dev https://www.googletagmanager.com; connect-src 'self' https://cdn.siteon.dev; ``` 中継で GTM を差し込む場合は、インラインの GTM スニペットが `` に入るため、`'unsafe-inline'` か nonce が要ります。`'unsafe-inline'` を許せないサイトでは `data-gtm` を使うほうが素直です。GTM が読み込むタグの分は、GTM の要件に従って別に追加してください。 --- # 直せる箇所の印(CMS) > data-cms 系の属性で、テキスト・写真・お知らせの一覧・記事ページ・多言語を、お店の人が直せるようにする。 URL: https://siteon.dev/ja/docs/cms Siteon は、AI で作ったサイトのためのインフラです。AI や手で作った静的サイト(HTML)に、ホスティング・お客さん(お店の人)が直せる CMS・お問い合わせフォーム・アクセス解析・AI エージェントからの操作(CLI・MCP)を足し、そのまま納品できる状態にします。 ## 考え方 HTML の要素に `data-cms` 系の属性を付けると、その箇所が管理画面から直せるようになります。何を直せるかは [schema.json](https://siteon.dev/ja/docs/schema) で宣言します。 - 要素の中に書いた文言は**既定の文言**です。値が無いとき(未入力、または CMS に届かないとき)は、HTML がそのまま残ります - 値は文字としてエスケープされて入ります。お店の人の入力で HTML やスクリプトが差し込まれることはありません - 値の埋め込みは、Siteon のホスティングか Cloudflare Pages の中継(配信前)、または `data-embed`(表示時)が行います([ホスティングと配信](https://siteon.dev/ja/docs/hosting)) ## 印の一覧 | 属性 | 働き | |---|---| | `data-cms="key"` | 要素の中の文字を置き換える | | `data-cms-html="key"` | 同じく置き換え、改行を `
` にする | | `data-cms-src="key"` | `img` / `video` / `source` の `src` を置き換える | | `data-cms-attr="属性:key"` | 任意の属性を置き換える(例: `content:title`、`href:url`) | | `data-cms-blocks="key"` | 記事本文(ブロックの並び)を中に描く | | `data-cms-hide-empty` | 値が空文字のとき要素ごと消す(`data-cms` / `data-cms-html` だけに効く) | | `