TinyURLから移行するには、まずリンクを2つの山に分けます。自分が所有するドメイン上のリンクと、tinyurl.com上のリンクです。1つ目の山はきれいに移ります。DNSレコードを1つ変更すれば、古いURLがそのまま動き続けるからです。2つ目の山は、TinyURLがドメインを所有しているため、あなたの側ではリダイレクトすることがまったくできません。遷移先をElidoにコピーすることはできますが、tinyurl.com/xxxxのリンクを公開した場所は、すべて手作業で更新する必要があります。
始める前に知っておくべき2つ目のことがあります。現時点で確実な移行方法はファイルです。TinyURLが文書化しているGET /urls/availableでエクスポートし、結果をdestination, slug, titleに絞り込んで、Elidoの一括インポートで読み込みます。ElidoにはワンクリックのTinyURLインポーターもありますが、TinyURLの公開APIにないエンドポイントを呼び出しているため、計画中の修正が入るまでは未検証として扱っています。このガイドでは両方のルートと、エクスポートから分析まで、その間の切り替えとロールバックも含めた全体の流れを説明します。TinyURLに関する事実は、同社のブログとOpenAPI仕様(2026-10-01と2026-10-02に確認)によります。
そもそも乗り換えるべきかどうかを機能ごとに判断したい方は、ElidoとTinyURLの比較か、より幅広いTinyURLの代替サービスのまとめをお読みください。
移せるTinyURLのリンク
すべてを決めるのはホスト名の所有権です。短縮リンクは、ホスト名とコードの2つでできています。コードはどこへでも持ち運べますが、リンクを動かし続けられるのは、ホスト名を管理している場合だけです。
| リンクの種類 | リダイレクトを制御する者 | できること |
|---|---|---|
アカウントなしで作成した tinyurl.com/xxxx | TinyURL | 古いリンクには何もできません。Elidoで遷移先を作り直し、古いリンクを公開した場所ごとに差し替えます |
アカウントで作成した tinyurl.com/your-alias | TinyURL | 有料プランならTinyURLの中で遷移先を編集するか、エイリアスを新しいホスト名でElidoにインポートして、すべての掲載箇所を更新します |
go.yourbrand.com/xxxx(カスタムドメイン) | 自分 | ホスト名をElidoに向けてエイリアスをインポートします。古いURLは動き続けます |
最初の2行についての正直な話です。TinyURLへの支払いをやめても、TinyURLが保持する限りそれらのリンクは解決され続けますが、クリックの確認も、変更も、リダイレクトもできなくなります。あえてそのままにしておくチームもあります。古くてトラフィックの少ないリンクには、それが正しい判断だと考えています。
ステップ1:TinyURLのリンクをエクスポートする
TinyURLでリンクを一覧する、文書化された方法は1つ、APIです。OpenAPI仕様(2026-10-02に確認)は、一覧をGET /urls/{type}と定義しており、typeはavailableかarchived、任意のfromとtoの日時、alias:またはtag:のプレフィックスを取るsearchフィルターが使えます。呼び出しにはベアラートークンが必要です。TinyURL自身のリンク一覧に関する記事も同じエンドポイントを説明しており、必須の入力はtypeだけだと述べています。
仕様が提供しないものも同じくらい重要です。pageやper_pageのパラメーターはなく、レート制限も定義されていません。そのため大規模なアカウントでは、from/toのウィンドウ(たとえば1か月ずつ)で各リクエストを絞り込み、ほかの何かをする前にすべてのレスポンスをディスクに書き込んでください。
# One window at a time; inspect the first response by hand before scripting further
curl -s -H "Authorization: Bearer $TINYURL_TOKEN" \
"https://api.tinyurl.com/urls/available?from=2025-01-01T00:00:00Z&to=2025-02-01T00:00:00Z" \
> tinyurl-2025-01.json
実際のレスポンスの形は確認できていません(仕様では、リストを返すのか単一のオブジェクトを返すのかがはっきりしません)。パーサーを書く前に、ファイルを1つ開いて中身を確認してください。アーカイブ済みのリンクも必要なら、同じ呼び出しを/urls/archivedに対して実行します。
残りの計画を形作る制約が3つあります。
- アカウントがなければ一覧もない。 TinyURLは、サインインせずに作成したリンクは管理も削除もできないと明言しています。ユーザーごとの記録がないので、エクスポートするものがありません。
- 無料プランは読み取り専用。 TinyURLの無料プランのページによると、リンクの編集と削除、クリック分析、カスタムドメイン、一括作成はすべて有料プランの機能です。
- 分析は一覧に含まれない。 クリック履歴は自分で対処するものです。解約する前に、スクリーンショットを撮るか、TinyURLからレポートとして取り出してください。TinyURLのヘルプセンターには、文書化されたCSVエクスポートのボタンが見つからなかったため、このガイドではそれを約束しません。
ステップ2:TinyURLのデータをElidoが受け付けるファイルにマッピングする
TinyURLから何を取り出したとしても、同じ3つのフィールドに絞り込みます。
- TinyURLの長いURLは
destination(リンクの遷移先)になります。 - TinyURLのエイリアスは
slugになります。tinyurl.com上のリンクで新しいコードを付けたいものは、空欄のままにします。 - TinyURLのタイトルまたは説明は
titleになります。
TinyURLではエイリアス、Elidoではスラッグと呼びます。同じもので、ホストの後ろの文字列です。移行先のドメインが空なら、エイリアスはそのまま引き継がれます。
Elidoのリンクページには、BulkタブとCSVタブがあり、どちらもurl, slug, titleの形式の行を読み取ります。CSVタブでは、http(s)://のURLを含まない最初の行は無視されるので、ヘッダー行があっても問題ありません。貼り付け欄では、#で始まる行は無視されます。カスタムスラッグに使えるのは英字、数字、ハイフンなので、アップロード前に、それ以外の文字を含むエイリアスを確認してください。失敗した行は理由とともに一覧表示されます。
destination,slug,title
https://acme.com/spring-sale,spring-sale,Spring Sale
https://acme.com/pricing,,Pricing page
TinyURLのタグを使っていたなら、残しておいてください。3列のCSVには収まりませんが、後述のAPIルートなら受け付けます。
ステップ3:Elidoにインポートする
取り込みには2つのルートがあります。ファイルのルートは今日から使えます。組み込みのインポーターはありますが、未検証です。
確実なルート:CSV、一括貼り付け、一括API
ダッシュボードのBulkタブとCSVタブは、1バッチあたり最大100リンクを処理するため、大きなファイルは分割してください。一括インポートのヘルプページでフォームを説明しており、エクスポートをスプレッドシートで整えた場合はGoogleスプレッドシートの一括インポート解説が役に立ちます。
ワークスペースAPIは、同じ形をJSONで受け取ります。POST /v1/workspaces/{workspace_id}/links/bulkはdomain_idと最大100件のlinksを受け付け、各行はdestination_urlと、任意のslug、title、tagsを持ちます。各行は個別に処理されるので、1行の不具合でバッチ全体が失敗することはなく、レスポンスでどの行がエラーになったかが分かります。後でバッチを絞り込めるよう、imported:tinyurlのようなタグを自分で追加してください。クライアントライブラリはAPIとSDKにあります。
組み込みのTinyURLインポーターと既知のバグ
ElidoにはワンクリックのTinyURLインポーターがあり、TinyURLから移行のページで説明しています。TinyURLのAPIトークンを貼り付け、リンクを着地させるElidoのドメインを選び、競合ルールを選びます。問題は最初のHTTP呼び出しです。ワーカーは次のリクエストを組み立てます。
GET https://api.tinyurl.com/aliases?page=1&per_page=100
Authorization: Bearer <token>
そして{"data": [{alias, url, title, tags}], "meta": {"total", "has_more"}}が返ってくることを期待します。TinyURLの仕様に/aliasesというパスはありません。エイリアスの操作は/alias/{domain}/{alias}の下にあり、一覧は/urls/{type}です。つまり、そのページネーションの取り決めはTinyURLから得たものではありませんでした。当社の単体テストは、想定した形で手書きしたレスポンスを返して合格しますが、それが証明するのはパーサーが私たちの想定に合っていることだけで、TinyURLについては何も証明していません。有料プランのトークンが必要なため、実際のアカウントでは実行していません。まだこれを軸に移行を計画しないでください。
修正は計画中です。/urls/availableに切り替え(/urls/archivedはフラグの裏に置く)、from/toのウィンドウでページングし、防御的にパースし、実際に取得したレスポンスでテストします。その後、仕様にはどちらも書かれていないため、ページネーションとリクエストごとの実際の上限を、実際のアカウントで測り直す必要があります。
合成データを使ったデモ用ワークスペースの連携ページ。TinyURLの移行はここから開始します。
インポーターがページを受け取った後にすること
HTTP呼び出しから先は、エンドポイントの問題に左右されず、この部分はコードに基づいて説明できます。
- 開始。
token、target_domain_id、任意のconflict_strategyを付けてPOSTします。ハンドラーは空のトークン、ドメインの欠落、suffix、skip、fail以外のルールを拒否し、それ以外はジョブとともに202で応答し、リクエストから切り離してバックグラウンドでワーカーを実行します。 - リンクごと。 URLのない行やエイリアスのない行は、理由とともに失敗として数えられます。それ以外では、エイリアスがスラッグになり、遷移先とタイトルがコピーされ(タイトルは200文字に切り詰め)、タグは
imported:tinyurlを末尾に追加してコピーされます。 - 進捗。 カウンターは50リンクごとにジョブの行へ反映されます。エラー行は1ジョブにつき最大1,000件まで記録されます。
- 認証とレートのエラー。 401または403では、「ベアラートークンを確認してください」というメッセージとともにジョブが失敗し、429ではレート制限として失敗します。再試行やバックオフはなく、ジョブはそこで停止します。
トークンはリクエストボディからバックグラウンドジョブに渡るだけで、ほかには残りません。ジョブの行にトークンは記録されず、何も保存されないので保存時の暗号化の対象もありません。リクエストボディは4 KBの上限付きで読み込まれます。コードは開始前にトークンの検証やプランの確認を行わないため、不正なトークンはフォームのエラーではなく、最初のリクエスト後に失敗したジョブとして現れます。以前のバージョンのドキュメントでは、ドメインのエンドポイントに対する事前チェックが説明されていましたが、その手順はコードには存在せず、TinyURLの仕様にもそのようなパスはありません。
競合ルールと上限
各挿入の前に、ワーカーはドメインとスラッグの組についてインデックス検索を1回行います。
- suffix(デフォルト)は
alias-2、alias-3からalias-50まで試し、すべて使用済みならその行を失敗にします。 - skipは既存のElidoのリンクに手を付けず、ソースの行を記録します。
- failは最初の衝突でジョブを失敗させます。
どの実行も50,000リンクと30分が上限です。知っておくべき挙動が2つあります。50,000の上限に達すると、ループはそこで止まってジョブは完了し、失敗にはなりません。そのため、最終的な件数をソースの合計と比較してください。30分の制限時間を使い切ると、それまでにインポートした件数とともにジョブが失敗としてマークされます。
デモ用ワークスペースのリンク一覧。インポートしたリンクにはimported:tinyurlタグが付くので、バッチを絞り込んで確認できます。
インポーターを安全にテストする
エンドポイントが修正された後、またはそれ以前に自分でインポーターを試す場合は、小さく始めてください。使い捨てのワークスペースを作り、空のドメインを追加して、まずfailルールでジョブを実行します。ドメインが空なら衝突は起きないので、失敗があればそれは衝突ではなく、パースか認証の問題です。そのうえで3つの数字を比較します。TinyURLにあるソースの件数、ジョブが報告するtotal、そしてインポート、スキップ、失敗のカウンターの合計です。ワーカーは期待するレスポンスからmeta.totalを取るため、totalと実際の件数が合わなければ、レスポンスの形がパーサーの想定と違うという最初の兆候です。imported:tinyurlで絞り込み、ランダムに10件のリンクを開いて、遷移先、スラッグ、タイトルをTinyURLと照合してください。
このために新しいElidoのワークスペースを始めるのは数分で済みます。インポートが終わったときにすぐ使えるよう、先に無料アカウントを作成してドメインを追加しておいてください。
ステップ4:カスタムドメインを切り替える
TinyURLでブランドホスト名を運用しているなら、簡単なケースです。TinyURLのブランドドメインの設定は、すでに所有しているドメインに対するCNAMEなどのDNS変更なので、同じ操作を逆向きに行うだけです。なお、インポーターはドメインを作成せず、TinyURLのdomainフィールドも読み取りません。ブランドホスト名は、それ単独の手順です。
順序が重要です。DNSは最後の手順で、訪問者が影響を感じる唯一の手順だからです。
- 切り替えが速く反映されるよう、1日前にレコードのTTLを下げます。
- ElidoのDomainsにホスト名を追加し、検証を待ちます。ドメインの追加のガイドに正確なレコードがあり、DNS検証のトラブルシューティングは「Pending」のまま止まる原因の大半を占める入力ミスを扱っています。
- 訪問者がまだTinyURLに届いている間に、そのホスト名にエイリアスをインポートします。
- インポートしたスラッグを、稼働中のホスト名のこれまでの挙動と照らして抜き取り確認します。
- DNSレコードを変更します。その時点からホスト名はElidoに解決され、その上の古いURLがすべて追従します。
ホスト名はDNSのみにし、前段にCDNのプロキシーを置かないでください。プロキシーの背後では、証明書の発行が失敗することがあるからです。全体の設定は短縮リンク用カスタムドメインとカスタムドメイン機能のページにあります。
ステップ5:301リダイレクトを維持する
自社ドメインではURLが変わらないので、橋渡しするものはありません。同じパスが、今度はElidoから応答するだけです。守るべきはリダイレクトの意味合いです。リダイレクトのステータスコードはRFC 9110で定義されています。恒久的なリダイレクトはブラウザーと検索エンジンに遷移先が安定していることを伝え、長く使われているリンクを一時的なものに切り替えると、キャッシュと評価の扱いが変わります。SEOとキャッシュの観点は301と302のリダイレクトをお読みください。
tinyurl.comのリンクには、追加できる301がありません。リダイレクトはTinyURLのものだからです。できる最善のことは、古いリンクの先の遷移先を生かしておき、手の届く範囲でリンクを差し替えることです。古いホスト名を自分で所有している場合に301の橋渡しがどう機能するかは、Bitly移行プレイブックに示しています。
ステップ6:移行を検証する
移行が完了するのは、リンクのすべての掲載箇所が、自分で管理できるものを指したときです。次のリストを順に使ってください。
- TinyURLでの新規リンクを停止します。これからの新規作成はすべてElidoで行います。
- TinyURLのエクスポートファイルとレポートを、日付とともにアーカイブします。
- Elidoでインポートしたバッチを
imported:tinyurlタグで絞り込みます。 - 件数を比較します。インポート、スキップ、失敗の合計が、ソースの行数と等しくなるはずです。
- 失敗を修正します。失敗した行にはすべて理由が付いており、たいていは無効なURLか不正なスラッグの文字です。
- 上位のリンクをテストします。最も重要な50リンクを取り出し、それぞれにリクエストします。
curl -s -o /dev/null -w "%{http_code} %{redirect_url}\n" https://go.yourbrand.com/spring-sale
- その50件について遷移先とソースを比較します。UTMパラメーターを含む最終的なURLが一致することを確認します。
- 古いレコードをキャッシュしていないネットワークから、DNS変更後に再テストします。
- tinyurl.comの掲載箇所を更新します。メールのアーカイブ、SNSのプロフィール、広告プラットフォーム、印刷物で
tinyurl.comを検索し、置き換えられるものを置き換えます。
手の届かない媒体は、失うものとして受け入れてください。古い印刷物のQRコードや忘れられた投稿は、TinyURLを指し続けますが、これはどの短縮サービスの移行でも同じです。より厳密な検証を行いたい場合は、リンクを壊さずにBitlyから移行するにあります。
ステップ7:ロールバックを計画する
可能なら、TinyURLを1か月維持し、有料プランを解約する前に取りこぼしがないか確認してください。TinyURLがまだブランドホスト名のリンクを配信している間は、ロールバックは古いレコードに戻すDNS変更1回で済み、TTLが低ければ素早く行えます。
Elidoの内部では、imported:tinyurlタグがバッチを取り消す手掛かりになります。絞り込んでから、一括編集または削除します。インポーターの実行が途中で止まった場合(デプロイやクラッシュで停止し、5分ごとのスイープが、30分間進捗のないジョブをfailedに切り替えます)、保存されたカーソルがないため、ジョブは最初から再開します。suffixまたはskipでの再実行は安全ですが、suffixでは最初の実行が書き込んだリンクの-2コピーが作られるため、再実行にはskipを選んでください。
ステップ8:分析への期待値を設定する
どちらのルートでも、クリック履歴は引き継がれません。インポーターが読み取るのはリンクのフィールドだけで、CSVにはクリックの列がありません。新しいクリックは、リンクがElidoで有効になった時点から数えられ、カスタムドメインではDNSを変更した時点からです。一部の訪問者がキャッシュされたレコードによってまだTinyURLに届く、短い期間があることを見込んでください。
また、QRのスタイルとテンプレート、およびアカウントなしで作成したものも残されます。キャンペーンを追跡しているなら、今のうちにUTMの命名規則を引き継いでください。UTMパラメーター解説はよい復習になります。
移行して得られるもの
自分が所有するホスト名にリンクを置いた状態で移行を終えるので、次の移行があるとしても、プロジェクトではなくDNSの変更で済みます。切り替え時点から始まる分析と、クエリできるタグも手に入ります。プランは料金ページに、直接比較はElidoとTinyURLの比較にあります。ほかに何を検討すべきかという広い問いには、TinyURLの代替サービスの記事が各社を比較しています。
ブログの関連記事
よくある質問
tinyurl.comのリンクを新しいショートリンクへリダイレクトできますか?
できません。tinyurl.comはあなたのドメインではないため、tinyurl.com/xxxxのコードの向き先を変えられるのはTinyURLだけです。有料プランならTinyURLの中で遷移先を編集できますが、自分でドメインレベルのリダイレクトを設定して向け直すことはできません。対処法は、そのリンクを公開した場所ごとに古いリンクを差し替えることです。
TinyURLからリンクをエクスポートするには?
有料アカウントのトークンでTinyURL APIを使います。TinyURLのOpenAPI仕様では、GET /urls/availableとGET /urls/archivedでリンクを一覧でき、任意のfrom、to、searchフィルターが使えます。サインインせずに作成したリンクはどのアカウントにも紐づかないため、一覧に出てくるものがありません。
ElidoのTinyURLインポーターは現在使えますか?
未検証として扱ってください。ワーカーが要求する/aliasesというパスはTinyURLのOpenAPI仕様(2026-10-02に確認)に存在しません。そのため現時点で確実な方法は、/urls/availableでエクスポートし、結果をElidoのCSVまたは一括インポートで読み込むことです。インポーターの修正は計画中です。
TinyURLをやめるとクリック履歴は失われますか?
実質的には失われます。Elidoがインポートするのは遷移先、エイリアス、タイトル、タグで、クリックイベントは含まれません。解約する前に、必要なレポートをTinyURLからエクスポートしてください。Elidoの新しいクリックは、切り替え時点からカウントが始まります。
TinyURLのカスタムドメインを維持できますか?
はい。そのドメインはあなたが所有しているからです。ホスト名をElidoに追加し、その上にエイリアスをインポートしてから、レジストラーでDNSレコードを変更します。ホスト名がTinyURLではなくElidoを指すようになるので、そのドメイン上の古いリンクは動作し続けます。
TinyURLの無料アカウントから移行できますか?
自動ではできません。リンクの一覧にはAPIトークンが必要で、TinyURLは編集、分析、カスタムドメイン、一括作成を有料プランに限定しています。無料プランでは、遷移先のリストを自分で作り直し、Elidoで一括作成します。
Elidoを試す
URLを貼り付けて短縮リンクを取得
登録不要。リンクは30日間有効。永久に保存するには登録してください。
登録不要。無料登録すると月 50 件のリンクを作成できます。