FAQ JSON-LD生成
承認済みの質問と回答の一覧を、入れ子のJSONを手作業で書かずにschema.orgのFAQPageマークアップへ変換できます。各組を検証し、指定された順序を保ったまま、構造化オブジェクトと対象ページへ貼り付けられる完全なscriptブロックを返します。内容を創作したり書き換えたりしないため、構造化データを閲覧者に実際に表示される回答と一致させられます。
無料で実行
最初に表示用の質問と回答を準備します
ページ上で閲覧者が実際に確認できるFAQ内容から始めてください。各行には完全な質問と対応する回答が必要であり、空欄や空白だけの値は使用できません。この機能は文章の作成、補足、事実確認を行いません。構造化データはページを説明するものであり、非表示の別版を作るものではないためです。生成前に、主張、規約、価格、日付、条件を担当者が確認してください。ナビゲーションや宣伝文がなくても理解できる、明確で具体的な表現が適切です。重複する質問は表示中のFAQ側で整理し、希望する順に並べてください。mainEntityはその順序を正確に維持します。回答を変更した場合は、表示内容と構造化データを同時に更新してください。
安全で標準に沿ったマークアップを生成します
入力された各組についてschema.orgのQuestionを作り、質問をnameに保存します。さらにacceptedAnswerの下へAnswerを配置し、回答をtextへ格納します。これらがFAQPageオブジェクトのmainEntity配列になります。結果には自動処理向けのオブジェクトと、HTMLへ直接配置できる整形済みapplication/ld+jsonブロックが含まれます。前後の空白は除去されますが、句読点や本文はそのまま管理できます。同じ入力は常に同じ出力となり、ネットワーク、乱数、モデル、時刻には依存しません。HTMLのscript要素を妨げる可能性がある文字は安全に符号化されます。JSONとしては元の文章へ戻りますが、貼り付けた内容がscript要素を途中で閉じることはありません。
公開後も検査して更新します
返されたscriptブロックは、同じ質問と回答を表示するページのHTMLへ配置してください。JSON-LDは通常headまたはbodyに置けますが、CMSに構造化データ専用欄がある場合もあります。無関係なページへ共通テンプレートで配布しないでください。このマークアップは特定ページの内容を説明します。公開後はレンダリング済み文書を確認し、application/ld+json要素が存在して通常の文字として表示されていないことを確かめます。続いて対象検索サービスの検証ツールで公開URLを確認してください。構文が有効でも特別な検索表示は保証されず、適格性は各サービスの規則で決まります。表示回答を変更、削除、並べ替えた際はJSON-LDを再生成し、両方を同時に公開してください。
活用例
サポートFAQを公開する
確認済みのヘルプ質問を、同じ公開記事向けの一貫したFAQPageマークアップに変換します。
ランディングページを自動化する
CMSのFAQレコードから、ビルドごとに決定的なJSON-LDを生成します。
手書きのスキーマを置き換える
承認済み文章を変えずに、編集工程から壊れやすい入れ子構造をなくします。
よくある質問
生成結果には何が含まれますか?
同一のFAQPageデータを持つスキーマオブジェクトと、完全なapplication/ld+json scriptブロックです。
質問や回答も作成しますか?
いいえ。入力文を検証して構造化するだけで、生成、書き換え、事実確認は行いません。
質問または回答が空の場合はどうなりますか?
空欄の位置を示す無効入力エラーとなり、リクエストは失敗します。
scriptブロックをHTMLへ安全に貼れますか?
はい。JSONの直列化時にHTMLで問題となる文字をエスケープし、scriptの早期終了を防ぎます。
有効なFAQPageならリッチリザルトが保証されますか?
いいえ。構造は有効でも、表示資格と形式は各検索サービスの規則で決まります。
APIリクエストの料金はいくらですか?
APIリクエストは1回$0.002です。Webツールでは同じ決定的処理をローカル実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/web/faq-schema-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pairs":[{"question":"How long does delivery take?","answer":"Standard delivery takes three to five business days."},{"question":"Can I change my order?","answer":"Yes. Contact support before the order is dispatched."}]}'const res = await fetch("https://api.kit.forhosting.com/web/faq-schema-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pairs": [
{
"question": "How long does delivery take?",
"answer": "Standard delivery takes three to five business days."
},
{
"question": "Can I change my order?",
"answer": "Yes. Contact support before the order is dispatched."
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/faq-schema-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pairs": [
{
"question": "How long does delivery take?",
"answer": "Standard delivery takes three to five business days."
},
{
"question": "Can I change my order?",
"answer": "Yes. Contact support before the order is dispatched."
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/faq-schema-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pairs":[{"question":"How long does delivery take?","answer":"Standard delivery takes three to five business days."},{"question":"Can I change my order?","answer":"Yes. Contact support before the order is dispatched."}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pairs":[{"question":"How long does delivery take?","answer":"Standard delivery takes three to five business days."},{"question":"Can I change my order?","answer":"Yes. Contact support before the order is dispatched."}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/faq-schema-generate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"pairs": [
{
"question": "How long does delivery take?",
"answer": "Standard delivery takes three to five business days."
},
{
"question": "Can I change my order?",
"answer": "Yes. Contact support before the order is dispatched."
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.faq_schema_generate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
timeout_sec | 30 |
max_crawl_pages | 25 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |