URLリストからサイトマップXMLを生成
クローラーやCMSプラグイン、XMLの手書きに頼らず、構造化されたページ一覧から完全なsitemap.xml文書を作成できます。各レコードにはHTTPまたはHTTPSの絶対URLが必要で、最終更新日、更新頻度、相対的な優先度も任意で指定できます。入力値を検証し、XMLで特別な意味を持つ文字を安全にエスケープしたうえで、保存、公開、テスト、デプロイ工程への組み込みに使える決定論的な文書を返します。
無料で実行
正確なURL一覧をご用意ください
検索エンジンに発見させる正規の公開URLから始めてください。各レコードにはHTTPまたはHTTPSで始まり、ホスト名と目的のパスを含む完全なアドレスが必要です。<code>/products</code>のような相対パスは、サイトマップを読む側が所属するオリジンを判断できないため受け付けません。クエリ文字列は、パラメーター付きページ自体が正規かつ有用な検索結果である場合だけ含めてください。トラッキング用の派生URLは通常サイトマップに適しません。生成処理は入力されたURL文字列を維持し、アンパサンドなどXMLで特別な意味を持つ文字だけをエスケープするため、文書を壊さずクエリの意味を保てます。1つのサイトマップにはプロトコルの上限である50,000件まで収録できます。本ツールはドメインのクロール、応答確認、canonicalリンクの推測、重複削除を行いません。そのため、入力一覧が唯一の基準となり、結果を予測できます。ルーター、データベース、静的サイトの出力、コンテンツ台帳などから一覧を作り、非公開、リダイレクト、重複、ブロック済み、非正規のページを事前に除外してください。
任意のメタデータは正確に指定してください
<code>lastmod</code>は、ページ内容が最後に変更された日付を把握している場合だけ追加してください。YYYY-MM-DD形式の日付、またはタイムゾーンを明示したISO 8601タイムスタンプを指定できます。生成を実行した時刻ではなく、ページ自体の更新を表す値である必要があります。<code>changefreq</code>には、サイトマップ標準のalways、hourly、daily、weekly、monthly、yearly、neverを使用できます。検索エンジンはこの値を予定表ではなく参考情報として扱うため、実際の公開頻度に合うものをお選びください。<code>priority</code>も任意の参考情報で、ゼロから1までの有限数として指定します。これは同じサイト内のURLを比較するものであり、他のドメインより重要にしたり、順位やクロールを保証したりするものではありません。不確かなメタデータに架空の既定値を入れるより、省略するほうが適切です。生成処理は各レコードで指定された任意要素だけを出力し、簡潔なXMLを保ちながら、結果を返す前にすべての値を検証します。
生成した文書を公開し、適切に更新してください
結果にはXML宣言、公式のサイトマップ名前空間、入力レコードごとのURL要素、そして自動処理のログに便利な件数が含まれます。返されたXMLをUTF-8の<code>sitemap.xml</code>として保存し、対象サイトのルートなど、安定した公開場所から配信してください。その場所をrobots.txtに記載し、ご利用の検索エンジン向けツールから送信することもできます。生成は決定論的です。同じ入力からは常に同じ出力が得られ、ネットワーク要求、現在時刻の参照、ランダムな並べ替え、隠れた正規化はありません。そのためビルドやデプロイパイプラインに適しており、バージョン管理の差分は入力した一覧の変更を正確に反映します。公開済みの正規URLまたは信頼できるメタデータが変わったときに再生成し、配信後の応答が有効で認証に保護されていないことをご確認ください。非常に大規模なサイトでは、レコードをプロトコル準拠の複数ファイルに分け、適切な手順でインデックスを作成してください。ブラウザーでは無料で実行でき、自動APIリクエストの基本料金は$0.002です。
活用例
デプロイ時にサイトマップを生成
ビルドで作成された正規ルートを、新しいリリースの公開前に決定論的なXMLへ変換します。
コンテンツデータベースからページを出力
公開済みレコードと信頼できる更新日を、検索エンジン向けのサイトマップへ変換します。
壊れやすい手書きXMLを置き換え
構造化URL一覧を管理し、検証、順序、XMLエスケープは生成処理に任せられます。
よくある質問
どのような入力が必要ですか?
空ではないレコード配列をご用意ください。各レコードにはHTTPまたはHTTPSの絶対URLが必要で、lastmod、changefreq、priorityも指定できます。
Webサイトをクロールしますか?
いいえ。ご提供のレコードだけからXMLを生成し、ネットワーク要求やページの自動検出は行いません。
アンパサンドなどの特殊文字はどう処理されますか?
URL内のXMLで特別な意味を持つ文字を出力時にエスケープし、有効なクエリ文字列が不正なXMLになることを防ぎます。
lastmodではどの形式を使用できますか?
YYYY-MM-DD、またはZか明示的な数値タイムゾーンオフセットを含む完全なISO 8601タイムスタンプをご使用ください。
priorityでページ順位を改善できますか?
いいえ。サイトマップ内での相対的な参考情報であり、順位の保証や他サイトとの比較ではありません。
APIでの生成料金はいくらですか?
APIの基本料金は1リクエストあたり$0.002です。同じ決定論的な生成機能をブラウザーでは無料でご利用いただけます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/web/sitemap-xml-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"urls":[{"url":"https://example.com/","lastmod":"2026-07-25","changefreq":"weekly","priority":1},{"url":"https://example.com/about?from=site&lang=en","changefreq":"monthly","priority":0.6}]}'const res = await fetch("https://api.kit.forhosting.com/web/sitemap-xml-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"urls": [
{
"url": "https://example.com/",
"lastmod": "2026-07-25",
"changefreq": "weekly",
"priority": 1
},
{
"url": "https://example.com/about?from=site&lang=en",
"changefreq": "monthly",
"priority": 0.6
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/sitemap-xml-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"urls": [
{
"url": "https://example.com/",
"lastmod": "2026-07-25",
"changefreq": "weekly",
"priority": 1
},
{
"url": "https://example.com/about?from=site&lang=en",
"changefreq": "monthly",
"priority": 0.6
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/sitemap-xml-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"urls":[{"url":"https://example.com/","lastmod":"2026-07-25","changefreq":"weekly","priority":1},{"url":"https://example.com/about?from=site&lang=en","changefreq":"monthly","priority":0.6}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"urls":[{"url":"https://example.com/","lastmod":"2026-07-25","changefreq":"weekly","priority":1},{"url":"https://example.com/about?from=site&lang=en","changefreq":"monthly","priority":0.6}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/sitemap-xml-generate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"urls": [
{
"url": "https://example.com/",
"lastmod": "2026-07-25",
"changefreq": "weekly",
"priority": 1
},
{
"url": "https://example.com/about?from=site&lang=en",
"changefreq": "monthly",
"priority": 0.6
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.sitemap_xml_generate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_items | 50000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |