タイトル一覧を一括で重複しないURLスラッグに変換
このツールは、ページ、記事、商品などのタイトルを並び順どおりに受け取り、一回の決定的な処理でURL向けスラッグへ変換します。英字を小文字化し、一般的なラテン文字のアクセントを除去し、空白や記号をハイフンへ置き換え、数字は保持します。同じ基本スラッグが生じた場合は、後の項目へ増加する番号を付けます。元の順序は変わらないため、インポート、編集待ち一覧、移行計画、公開処理との対応を保てます。
無料で実行
各タイトルから整ったスラッグを作成します
結果が必要な順番でタイトルをご指定ください。各タイトルは簡潔なURL構成要素へ正規化されます。英大文字は小文字になり、一般的なラテン文字の発音区別符号は除かれ、連続する空白や句読点は一つのハイフンになります。先頭と末尾の区切りは削除されますが、版、章、年、製品世代などに使われる数字は残ります。誤ってもっともらしいURLを作らないよう、オブジェクト、真偽値、数値を暗黙に文字列へ変換せず、実際の文字列だけを受け付けます。正規化後にはASCII文字または数字が最低一つ必要です。応答には入力と同順のslugs配列と件数が含まれるため、すべての行の対応をご確認いただけます。外部情報の取得、保存、並べ替え、推測は行わず、同じ入力からは常に同じ結果が得られます。
順序を保ったまま重複を解決します
大文字と小文字、アクセント、連続空白、句読点の違いは正規化で消えるため、異なるタイトルから同じスラッグが生じることがあります。最初の項目は基本形を維持し、それ以降には-2、-3のような増加する接尾辞が付きます。一意性は、同じ原文の回数だけではなく、それまでに出力された全スラッグに対して確認されます。そのため、もともと数字で終わるタイトルや、異なる表記が同じ形になる場合も安全に扱えます。左から右へ処理するので、入力順が明確な優先順位となり、再実行しても結果は変わりません。接尾辞なしの形を優先したいタイトルは先に配置してください。本ツールはお客様のサイトやデータベースを調査しないため、公開済みのルートは把握しません。保存前に既存タイトルも一覧へ含めるか、独自の予約済みスラッグ台帳と照合してください。
公開工程で結果を安全に利用します
一括出力は、編集データをコンテンツ管理システムへ渡す場面に適しています。各スラッグを元の行と一緒に保持し、slugs配列だけを並べ替えないでください。位置による対応があるため、表計算データのインポート、移行スクリプト、静的サイト生成処理で正しいルートを割り当てられます。無効なタイトルが一つあると部分結果ではなく処理全体が拒否されるため、変更を保存する前にリクエスト全体をご確認ください。この方式は保守的なASCIIのURL構成要素を生成しますが、すべての文字体系の翻字、検索語の選択、タイトル短縮、省略されたレコードとの重複確認は行いません。自動処理ではリクエストごとに$0.002で、同じ決定的なロジックをブラウザーでもお試しいただけます。将来の転送を監査できるよう、元タイトルとスラッグを併せて保管してください。
活用例
CMSへのインポートを準備します
記事やページを一括登録する前に、順序付きの各タイトルへ重複しないルート要素を生成します。
コンテンツ資料を移行します
元のエクスポートとの行対応を保ちながら、旧見出しを正規化して重複用の接尾辞を確認します。
静的サイトのルートを構築します
再現可能なビルド工程で、コレクション用の決定的なファイル名やルート区間を作成します。
よくある質問
二つのタイトルが同じスラッグになるとどうなりますか?
最初の項目は基本形を維持し、後の重複には-2、-3、-4のような連番が付きます。
入力順は出力でも維持されますか?
はい。各スラッグは元タイトルと同じ配列位置に入り、件数には生成数が示されます。
一回の利用料金はいくらですか?
タイトルの重複有無にかかわらず、APIはリクエストごとに$0.002です。
サイトで使用中のスラッグも確認しますか?
いいえ。送信された一覧内だけで一意性を保証し、サイト、CMS、データベースにはアクセスしません。
タイトルが拒否される理由は何ですか?
各項目は文字列であり、正規化後にASCII文字または数字を最低一つ含む必要があります。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/data/slugify-batch \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"titles":["Getting Started","Getting Started","API Reference"]}'const res = await fetch("https://api.kit.forhosting.com/data/slugify-batch", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"titles": [
"Getting Started",
"Getting Started",
"API Reference"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/slugify-batch",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"titles": [
"Getting Started",
"Getting Started",
"API Reference"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/slugify-batch", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"titles":["Getting Started","Getting Started","API Reference"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"titles":["Getting Started","Getting Started","API Reference"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/slugify-batch", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"titles": [
"Getting Started",
"Getting Started",
"API Reference"
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.slugify_batch",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_items | 10000 |
max_chars_per_title | 10000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |