クロールルールとサイトマップからrobots.txtを生成
このrobots.txt生成ツールは、クローラー向けの構造化された指示を、そのまま公開できる整ったファイルに変換します。ユーザーエージェントごとに、許可または拒否するパスを選び、XMLサイトマップの絶対URLを指定してください。すべてのパスを検証し、同じクローラーのルールをまとめ、標準的な表記のディレクティブを使って、安全な改行を含む決定論的なプレーンテキストを返します。新しいポリシーの作成、手書きで間違えやすいファイルの置き換え、デプロイ処理における一貫したrobots.txtの生成に役立ちます。
無料で実行
クローラーのアクセス方針を明確なルールで指定します
クローラーとパスに関する判断ごとに、1行ずつ追加してください。ユーザーエージェントは指示の対象となるクローラーを表します。すべてのクローラーに適用する場合はアスタリスクを使い、特定のクローラーだけを別に扱う場合は固有のトークンを入力します。次にAllowまたはDisallowを選び、対象のパスパターンを指定してください。ルート自体を含め、すべてのパスはスラッシュで始める必要があります。この検証により、robots.txtで起きやすい記述ミスを公開前に発見できます。同じユーザーエージェントのルールは、入力行が離れていても1つのグループにまとめられます。グループとルールの順序は、それぞれが最初に現れた位置に従います。順序が安定するため、レビューが容易になり、同じビルドを繰り返した際の不要な差分も防げます。本ツールは非公開またはクロール可能にすべき領域を判断しません。指定された方針を忠実に出力しますので、実際のサイトのルーティング構成と照合してください。
生成ファイルが制御できる範囲を理解します
robots.txtは、ルールに従うWebクローラーに対して、リクエストしてよいURLパスを伝えるものです。認証システム、アクセス制御リスト、機密情報を隠す仕組みではありません。拒否したアドレスもリンクから見つかる可能性があり、プロトコルを無視するクライアントは、サーバー側の認可がなければそのURLを取得できます。保護が必要なリソースには、アプリケーション権限、非公開ストレージ、またはサーバールールを使用してください。ユーザーエージェントのグループ内では、特にワイルドカードや末尾記号がある場合、各クローラーが自身の仕様に従ってAllowとDisallowのパターンを解釈します。本ツールは特定クローラーの優先順位を推測せず、入力されたパス文字列を保持します。また、ユーザーエージェント名、ディレクティブ、パス、サイトマップ値に埋め込まれた改行を拒否するため、1つの項目から別のレコードを挿入できません。出力には一般的な大文字表記と空行を使用し、入力にないコメントや仮定は追加しません。
結果を公開し、実際の環境で確認します
返された内容をrobots.txtという名前のプレーンテキストファイルに保存し、対象サイトのオリジン直下へ配置してください。たとえばhttps://example.com/robots.txtです。サイトマップ欄にはHTTPまたはHTTPSの絶対URLが必要で、最後のSitemap行へ追加する前にURLが正規化されます。これにより、XMLサイトマップが分かりにくいパスや別の許可されたホストに置かれていても、クローラーが場所を把握できます。デプロイ後は公開されたrobots.txtのURLを直接開き、正常なレスポンスがプレーンテキストで返り、エラーページ、リダイレクトループ、ログイン画面に置き換わっていないことを確認してください。検索エンジンや対象クローラーの検査ツールでも重要なパスをテストします。対応状況や照合方法はクローラーごとに異なる場合があります。ルート、非公開領域、ステージング保護、サイトマップの場所が変わった際は再生成してください。同じ入力から常に同じ出力が得られるため、バージョン管理や再現可能なデプロイにも適しています。
活用例
新しいWebサイトを公開します
本番ドメインをインデックス対象にする前に、読みやすいクロール方針とサイトマップ宣言を作成します。
デプロイ設定を標準化します
構造化された設定から、再現可能なサイトビルドで同一のrobots.txtを生成します。
クローラー別の方針を分けます
テキストブロックを手作業で並べ替えずに、共通ルールと個別の例外をまとめます。
よくある質問
ルールのパスがスラッシュで始まらない場合はどうなりますか?
対象ルールを示す入力エラーになり、ファイルの内容は生成されません。
複数のユーザーエージェントにルールを追加できますか?
はい。各ユーザーエージェントが最初に現れた順で、ルールがグループ化されます。
Disallowで非公開情報を保護できますか?
いいえ。robots.txtは協調的なクローラーへの指示であり、セキュリティ機能ではありません。機密リソースにはサーバー側の認可を設定してください。
生成した内容はどこに公開しますか?
クロール方針の対象となるWebサイトのオリジン直下に、robots.txtとして公開してください。
どのようなサイトマップURLを使用できますか?
HTTPまたはHTTPSを使用する、有効な絶対URLを指定する必要があります。
APIの料金はいくらですか?
APIは1回$0.002です。このページのブラウザ版は無料で利用できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/web/robots-txt-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"rules":[{"user_agent":"*","directive":"allow","path":"/"},{"user_agent":"*","directive":"disallow","path":"/private/"},{"user_agent":"ResearchBot","directive":"disallow","path":"/"}],"sitemap_url":"https://example.com/sitemap.xml"}'const res = await fetch("https://api.kit.forhosting.com/web/robots-txt-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"rules": [
{
"user_agent": "*",
"directive": "allow",
"path": "/"
},
{
"user_agent": "*",
"directive": "disallow",
"path": "/private/"
},
{
"user_agent": "ResearchBot",
"directive": "disallow",
"path": "/"
}
],
"sitemap_url": "https://example.com/sitemap.xml"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/robots-txt-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"rules": [
{
"user_agent": "*",
"directive": "allow",
"path": "/"
},
{
"user_agent": "*",
"directive": "disallow",
"path": "/private/"
},
{
"user_agent": "ResearchBot",
"directive": "disallow",
"path": "/"
}
],
"sitemap_url": "https://example.com/sitemap.xml"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/robots-txt-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"rules":[{"user_agent":"*","directive":"allow","path":"/"},{"user_agent":"*","directive":"disallow","path":"/private/"},{"user_agent":"ResearchBot","directive":"disallow","path":"/"}],"sitemap_url":"https://example.com/sitemap.xml"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"rules":[{"user_agent":"*","directive":"allow","path":"/"},{"user_agent":"*","directive":"disallow","path":"/private/"},{"user_agent":"ResearchBot","directive":"disallow","path":"/"}],"sitemap_url":"https://example.com/sitemap.xml"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/robots-txt-generate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"rules": [
{
"user_agent": "*",
"directive": "allow",
"path": "/"
},
{
"user_agent": "*",
"directive": "disallow",
"path": "/private/"
},
{
"user_agent": "ResearchBot",
"directive": "disallow",
"path": "/"
}
],
"sitemap_url": "https://example.com/sitemap.xml"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.robots_txt_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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |