ページリダイレクトは、ヘルプセンターで古いパスを開いたユーザーを記事またはコレクションに誘導します。Notiondesk APIを使用すると、ページリダイレクトの一覧表示、作成、更新、削除ができるため、移行後に数百もの古いURLをダッシュボードに1つずつ追加する代わりにインポートできます。ブックマーク、共有リンク、検索エンジンの結果は引き続き機能します。
ダッシュボードでリダイレクトを管理するには、 ヘルプセンターの「ページリダイレクトの管理方法」を参照してください。
| 方法 | パス | 範囲 | する |
|---|---|---|---|
GET | /sites/{site_id}/page-redirects | read | リストのリダイレクト、新しい順 |
POST | /sites/{site_id}/page-redirects | write | リダイレクトを作成します |
PATCH | /sites/{site_id}/page-redirects/{redirect_id} | write | リダイレクトを更新します |
DELETE | /sites/{site_id}/page-redirects/{redirect_id} | admin | リダイレクトを削除します |
リダイレクトの作成と更新には、ページリダイレクトを含む計画が必要です。
一覧ページのリダイレクト
このリストにはすべての言語が網羅されており、新しい順に掲載されています。ユーザーが作成したリダイレクトと、スラッグ変更後にNotiondeskが自動的に作成するリダイレクトの両方が含まれています。
curl "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/page-redirects?page_size=100" \
-H "Authorization: Bearer $NOTIONDESK_API_KEY" \
-H "nd-version: 2026-10-16"{
"object": "list",
"data": [
{
"id": "3f1c2a9e-8b7d-4c6e-9a5f-1e2d3c4b5a69",
"locale": "en",
"type": "article",
"origin": "manual",
"source_path": "/legacy/getting-started",
"target_id": "1761580412",
"target_title": "Getting started",
"target_slug": "getting-started",
"target_status": "published"
}
],
"has_more": false,
"next_cursor": null
}| 分野 | 意味 |
|---|---|
id | リダイレクト識別子はredirect_idとして使用されます。 |
locale | 対象言語 |
type | article または category (コレクション) |
origin | manual は誰かが作成したリダイレクト用、system はスラッグが変更されたときに作成された Notiondesk 用です。 |
source_path | リダイレクトするパス |
target_id | 対象のアイテムまたはコレクションのid |
target_title、target_slug | locale 内のターゲットのタイトルとパスセグメント |
target_status | 対象のステータス(例:published または draft) |
リストには最大で最新のリダイレクト 10,000 件が表示されます。統合処理でリダイレクトが削除された場合は、その後最初のページからやり直してください。削除によって後続の項目がずれるため、次のページで 1 件をスキップできます。ページネーションとバージョン Notiondesk API リクエストを参照してください。
ページのリダイレクトを作成する
すべての項目が必須です。
curl -X POST "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/page-redirects" \
-H "Authorization: Bearer $NOTIONDESK_API_KEY" \
-H "nd-version: 2026-10-16" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f0d6b1e-create-getting-started" \
-d '{"type": "article", "source_path": "/legacy/getting-started", "target_id": "1761580412", "locale": "en"}'| 分野 | タイプ | 注記 |
|---|---|---|
type | 弦 | article または category |
source_path | 弦 | リダイレクト先のパスは最大512文字です(例:/legacy/getting-started)。ヘルプセンターの他のリダイレクトではこのパスを使用しないでください。 |
target_id | 弦 | 対象の記事またはコレクションのid (記事またはコレクション一覧から選択)。最大255文字。 |
locale | 弦 | 対象言語。対象言語には翻訳が存在する必要があります。 |
ルートは、リストと同じフィールドで新しいリダイレクトを使用して 201 Created に応答します。
- 別のリダイレクトでは既に 409
conflict_errorという応答が使用されており、メッセージにはパス名が記載されています。
localeに翻訳がないtarget_idは 404not_foundに応答し、メッセージには ID が示されます。
作成ごとに Idempotency-Key を送信します。同じキーと本文で再試行すると、2 回目のリダイレクトを作成することなく、同じ 201 が返されます。 Notiondesk API エラー、レート制限、および再試行の処理を参照してください。
ページのリダイレクトを更新する
変更するフィールドのみを送信してください。送信しなかったフィールドは、現在の値を保持します。
フィールドは作成ルールに従います。ルートは更新されたリダイレクトで200 OKに応答します。
変更後も、リダイレクト先はlocaleに存在するターゲットを指している必要があります。記事のリダイレクト先をコレクションに指定するには、typeとtarget_idを一緒に送信します。
ページのリダイレクトを削除する
削除は取り消せないため、このルートには2つの安全対策が必要です。
curl -X PATCH "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/page-redirects/3f1c2a9e-8b7d-4c6e-9a5f-1e2d3c4b5a69" \
-H "Authorization: Bearer $NOTIONDESK_API_KEY" \
-H "nd-version: 2026-10-16" \
-H "Content-Type: application/json" \
-d '{"source_path": "/legacy/start"}'curl -i -X DELETE "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/page-redirects/3f1c2a9e-8b7d-4c6e-9a5f-1e2d3c4b5a69" \
-H "Authorization: Bearer $NOTIONDESK_API_KEY" \
-H "nd-version: 2026-10-16" \
-H "Content-Type: application/json" \
-d '{"confirm": true}'adminスコープ。
- 本体
{"confirm": true}、JSONブール値trueを含む。
ルートは204 No Contentを返します。古いパスを開いた読者はリダイレクトされなくなります。同じリダイレクトを再度削除すると、同じIdempotency-Keyで再試行しない限り、404 not_foundが返されます。
admin移行後にインポートのリダイレクトが発生する
別のヘルプセンターツールから移行する場合、各古いパスを新しい記事にマッピングし、行ごとにリダイレクトを作成します。このスクリプトは、列 source_path,target_id,locale を含む CSV ファイルを読み取ります。
import { readFileSync } from "node:fs";
import { createHash } from "node:crypto";
const siteId = "c74781f6-1aea-4e17-ab23-bbb8b4d174b6";
const rows = readFileSync("redirects.csv", "utf8").trim().split(/\r?\n/).slice(1);
for (const row of rows) {
const [source_path, target_id, locale] = row.split(",");
const idempotencyKey = createHash("sha256").update(`${source_path}|${target_id}|${locale}`).digest("hex");
const response = await fetch(`https://api.notiondesk.so/sites/${siteId}/page-redirects`, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.NOTIONDESK_API_KEY}`,
"nd-version": "2026-10-16",
"Content-Type": "application/json",
"Idempotency-Key": idempotencyKey,
},
body: JSON.stringify({ type: "article", source_path, target_id, locale }),
});
if (response.status === 429) {
const seconds = Number(response.headers.get("Retry-After")) || 5;
console.log(`Rate limited, waiting ${seconds}s`);
await new Promise((resolve) => setTimeout(resolve, seconds * 1000));
rows.push(row);
continue;
}
const result = await response.json();
console.log(response.status, source_path, response.ok ? result.id : result.code);
}- キーは行から生成されるため、スクリプトを2回実行しても何も重複して生成されません。修正した行には新しいキーが割り当てられます。
- 既にリダイレクトが設定されているパスには、
conflict_errorというログが出力されます。代わりに更新するか、そのままにしておいてください。
- 書き込みはキーごとに1分あたり20リクエストに制限されているため、500件のリダイレクトには約25分かかります。スクリプトはレート制限に達すると待機し、その後、該当行への書き込みを再試行します。
readおよびwriteスコープでのみキーを使用してください。
エラー
| 状態 | いつ | code |
|---|---|---|
| 400 | フィールドが欠落しているか空です。type または locale は受け入れられません。値が長すぎます。confirm は true ではありません。または、本文に不明なフィールドがあります。 | validation_error |
| 403 | ルートによっては、キーにread、write、またはadminが欠落している。 | insufficient_scope |
| 403 | ご利用のプランにはページリダイレクトが含まれていません。または、キーの作成者はこのヘルプセンターを変更できません。 | permission_denied |
| 404 | ヘルプセンターまたはリダイレクト先がワークスペースに存在しないか、ターゲットにlocaleの翻訳がありません。 | not_found |
| 409 | ヘルプセンターの別のリダイレクトでは既にsource_pathが使用されています。 | conflict_error |
エラーエンベロープおよびその他のコードについては、 「Notiondesk API エラー、レート制限、および再試行の処理」を参照してください。
よくある質問
スラッグを変更した場合、リダイレクトを作成する必要がありますか?
通常はそうではありません。公開済みの記事やコレクションで手動で設定したスラッグを変更した場合、ヘルプセンターで自動リダイレクトが有効になっている場合、およびプランにページリダイレクトが含まれている場合は、Notiondesk が自動的にリダイレクトを作成します。これらのリダイレクトはリストに origin: "system" と表示されます。それ以外の場合は、リダイレクトを自分で作成してください。スラッグの詳細については、「記事とコレクションのきれいな URL を作成する方法」を参照してください。
リダイレクト先を外部URLにすることは可能ですか?
いいえ。ページリダイレクトは、同じヘルプセンター内の記事または関連コンテンツへのリンクです。
なぜ私のキーはリダイレクトを作成できるのに、削除できないのでしょうか?
削除には admin スコープが必要ですが、作成と更新には必要ありません。キーに admin を追加し、作成者がワークスペースの所有者または管理者であることを確認してください。