YOURLSとShlinkを比較|自前の短縮URLを実際に立てて分かった違いと選び方【2026年版】

※内容は2026年9月25日時点の情報(YOURLS v1.10.6、Shlink v5.1.7)をもとにしています。

「SNSやLINEで配るリンクのクリック数を知りたい」「日本語のURLをテキストで送ると、長くなってリンクが切れてしまう」「Bitlyなどの外部サービスに頼らず、自分のドメインで短縮URLを持ちたい」。そんな方に向けて、自分のサーバーで動かせる短縮URLのオープンソース「YOURLS」と「Shlink」を比較します。

当サイトOSSMatchを運営する私たちは、自社サービスのリンク計測に使うため、2つを実際に同じVPSに立てて試しました。この記事では、公式の情報だけでは分からない、動かしてみて初めて分かった違いを中心にまとめています。

短縮URLを外部サービスに任せる不安

短縮URLは、SNSの投稿やチラシのQRコード、LINEの配信などで広く使われています。ただ、外部の短縮URLサービスに任せたままだと、次のような不安があります。

  • サービスの料金や無料枠の条件が変わると、使い続けられなくなることがある
  • 配ったリンクの転送先やクリックのデータが、自分の手元に残らない
  • 他社のドメインのリンクは、受け取った人から「どこに飛ぶのか分からない」と警戒されやすい

自分のサーバーで短縮URLを持つという選択

一度配ったリンクは、印刷物やSNSの過去の投稿に残り続けます。そのため、短縮URLは「長く同じURLで動き続けること」が何より大事です。自分のドメインと自分のサーバーで持っておけば、外部サービスの都合で使えなくなる心配がなく、クリックのデータも自分で持てます。

自分で動かせる短縮URLのオープンソースの中でも、定番なのがYOURLSとShlinkです。ほかの選択肢はBitlyの代替ツール一覧で比較できます。

YOURLSとShlinkを実際に動かして比べた結果

2つを同じVPSに、Dockerで立てました。リバースプロキシ(Traefik)の後ろに置き、HTTPSで公開しています。

項目 YOURLS Shlink
GitHubスター数 約1.2万 約5,300
作り PHP+MySQL/MariaDB(管理画面つき) PHP製のAPIサーバー+別の管理画面(Web版クライアント)
メモリ(実測) 約150MB(本体45MB+MariaDB 103MB) 約250MB(SQLite使用時)
転送のコード 301(恒久的な転送) 302(一時的な転送)。設定で変更可能
クリックの記録 クリック数・日時・参照元・IP 訪問数に加え、ボットと人を区別して集計
統計の見方 短縮URLの末尾に「+」を付けると統計ページ 管理画面で、短縮URLごとの訪問を表示
QRコード プラグインで対応 標準で対応
国別の分析 標準で対応(国判定のデータを同梱。訪問者IPが正しく取れていることが前提) MaxMindの無料ライセンスキーを設定すると対応
日本語の画面 なし(英語) なし(英語)
ライセンス MIT MIT

※GitHubのスター数は、OSSMatchの2026年9月時点のデータです。YOURLSとShlinkの個別ページで、最新の数値を確認できます。

シンプルな一覧画面のYOURLSと、ダッシュボード型のShlinkの比較イメージ

動かして分かった違い

YOURLS:シンプルで分かりやすいが、プロキシの後ろでは設定が必要

YOURLSは、1画面で短縮URLの作成とクリック数の確認ができる、とても分かりやすいツールです。短縮URLの末尾に「+」を付けるだけで統計ページが見られるのも手軽です。一方で、実際に立ててみると、次の2点でつまずきました。

  • 待ち受けポートが変わっていた:最新の公式Dockerイメージは、Webサーバーが80番ではなく8080番で待ち受けていました。以前の手順どおりにリバースプロキシの転送先を80番にすると、502エラーになります
  • 訪問者のIPが記録されない:リバースプロキシの後ろに置くと、クリックのIPが、訪問者ではなくリバースプロキシのIPで記録されました。YOURLSは国判定のデータを同梱していて、統計ページで国別のクリックを表示できますが、このままでは正しく判定できません

IPの問題は、Apacheのremoteipモジュールを使う設定ファイルを1つ追加すると解決しました。IPの範囲は、リバースプロキシのDockerネットワークに合わせてください。

# Traefik などのリバースプロキシ経由のアクセスは、X-Forwarded-For の値を本当の訪問者IPとして使う
LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 172.18.0.0/16

docker-compose.ymlのYOURLSのサービスに、このファイルを読み込ませます。

    volumes:
      - ./remoteip.conf:/etc/apache2/conf-enabled/remoteip.conf:ro

なお、YOURLSはインストール直後に、公式サイトなどへのサンプルの短縮URLが3件登録されています。使わない場合は削除しておきましょう。

Shlink:高機能だが、公開した直後からボットが大量に来る

Shlinkは、APIを中心にした設計で、機能が豊富です。QRコードの作成が標準で付いていて、タグで短縮URLを整理したり、複数のドメインを使い分けたりもできます。クリックの記録では、ボットと人を区別して集計してくれます。

驚いたのは、公開してわずか数十分で、存在しない短縮URLへのアクセス(Shlinkでいう「孤立した訪問」)が196件も記録されたことです。ボットが「/wp-login.php」や「/.env」など、よくある管理画面や設定ファイルのURLを片っ端から試しているものと考えられます。インターネットに公開したサーバーには、すぐにこうしたアクセスが来ることがよく分かります。

孤立した訪問の記録が不要なら、環境変数で止められます。

    environment:
      DEFAULT_DOMAIN: s.example.com
      IS_HTTPS_ENABLED: "true"
      INITIAL_API_KEY: ${SHLINK_API_KEY}
      TIMEZONE: Asia/Tokyo
      TRACK_ORPHAN_VISITS: "false"

また、Shlinkの管理画面(Web版クライアント)は、APIキーを画面の設定に含める作りです。自分で公開する場合は、管理画面の手前にBasic認証などをかけて、他人から見えないようにすることをおすすめします。データベースは、公式ではSQLiteがテスト向けとされているので、本格的に使うならPostgreSQLやMySQLを選びましょう。

Shlinkの管理画面。公開直後に孤立した訪問が196件記録されている

日本語スラッグのURLも短く共有できる:WordPressとの連携

自分で短縮URLを持つと便利な場面の1つが、日本語のスラッグ(URLの末尾)を使っているWordPressサイトです。

Webサイト制作の仕事で、クライアントから「記事のURLをメールやLINEでテキストのまま送ると、リンクがおかしくなる」と相談を受けたことがあります。そのサイトは、記事のURLに日本語のスラッグを使っていました。日本語を含むURLは、コピーして貼り付けると、次のような長い文字列に変換されます。

https://example.com/%e4%bc%9a%e7%a4%be%e8%a8%ad%e7%ab%8b%e3%81%ae%e6%89%8b%e9%a0%86%e3%81%a8%e5%bf%85%e8%a6%81%e6%9b%b8%e9%a1%9e/

「会社設立の手順と必要書類」という12文字のスラッグが、130文字近いURLになってしまいます。これには、次のような問題があります。

  • メールの途中で改行され、リンクが途中で切れることがある
  • 受け取った人から見ると、意味の分からない文字列で、怪しいリンクに見える
  • SNSの投稿やチャットで、文字数を大きく使ってしまう

短縮URLにすれば、どんなに長いURLでも「https://s.example.com/kQr6T」のような短い英数字になり、これらの問題がまとめて解消します。

工夫すれば、「共有する」ボタンで短縮URLを自動で作れる

YOURLSもShlinkもAPIを備えているので、WordPressと組み合わせれば、記事を公開したときに短縮URLを自動で作り、記事に「共有用の短いURLをコピー」ボタンを出すといったことも可能です。サイトの担当者や読者が、短縮URLのツールを開かなくても、ボタン1つで短いURLを使えるようになります。

次は、Shlinkを使った実装例です。記事を公開したときに短縮URLを作り、記事の情報(カスタムフィールド)に保存します。私たちの検証環境で、同じURLを2回送っても短縮URLが重複して作られないことを確認しています。

// 記事を公開したときに、Shlink で短縮URLを作って保存する
// SHLINK_API_KEY は wp-config.php に define しておく(コードに直接書かない)
add_action( 'publish_post', function ( $post_id ) {
	if ( get_post_meta( $post_id, '_short_url', true ) ) {
		return; // 作成済みなら何もしない
	}
	$res = wp_remote_post( 'https://s.example.com/rest/v3/short-urls', array(
		'headers' => array(
			'X-Api-Key'    => SHLINK_API_KEY,
			'Content-Type' => 'application/json',
		),
		'body'    => wp_json_encode( array(
			'longUrl'      => get_permalink( $post_id ),
			'findIfExists' => true, // 同じURLなら既存の短縮URLを返す
		) ),
		'timeout' => 10,
	) );
	if ( is_wp_error( $res ) || 200 !== wp_remote_retrieve_response_code( $res ) ) {
		return; // 失敗しても記事の公開は止めない
	}
	$data = json_decode( wp_remote_retrieve_body( $res ), true );
	if ( ! empty( $data['shortUrl'] ) ) {
		update_post_meta( $post_id, '_short_url', esc_url_raw( $data['shortUrl'] ) );
	}
} );

保存した短縮URLを、記事の下にコピー用のボタンとして表示します。

// 記事の下に「共有用の短いURLをコピー」ボタンを出す
add_filter( 'the_content', function ( $content ) {
	$short = is_single() ? get_post_meta( get_the_ID(), '_short_url', true ) : '';
	if ( ! $short ) {
		return $content;
	}
	return $content . sprintf(
		'<p><button type="button" data-url="%s" onclick="navigator.clipboard.writeText(this.dataset.url);this.textContent=\'コピーしました\'">共有用の短いURLをコピー</button> <code>%s</code></p>',
		esc_attr( $short ),
		esc_html( $short )
	);
} );

実装するときは、次の3点に注意してください。

  • APIキーは、ブラウザ側(JavaScript)に書かない:誰でも短縮URLを作れてしまいます。必ずサーバー側(PHP)で扱います
  • 短縮URLのサーバーが遅い・止まっているときでも、記事の公開を止めない:私たちの検証でも、サーバーの負荷が高いときに応答が数秒遅れることがありました。失敗したら何もせず、あとで作り直せる作りにしておくと安心です
  • 公開後にスラッグを変えた場合は、短縮URLの転送先も更新する必要があります

YOURLSでも、APIのshorturlという操作で同じように実装できます。

YOURLSとShlink、どちらを選ぶべきか

こんな人に おすすめ
とにかくシンプルに、短縮URLとクリック数だけ分かればいい YOURLS
レンタルサーバー(PHP+MySQL)で動かしたい YOURLS
QRコードも一緒に作りたい(チラシ・店頭POPなど) Shlink
ボットを除いた、正確なクリック数を知りたい Shlink
ほかのシステムからAPIで短縮URLを作りたい Shlink(YOURLSにもAPIあり)
サーバーのメモリをできるだけ使いたくない YOURLS
WordPressなどと連携して、短縮URLを自動で作りたい どちらでも可能(APIあり)

どちらを選ぶ場合も、短縮URL用の短いドメインを用意しておくと、リンクが短く覚えやすくなります。一度配ったリンクは長く残るので、ドメインは長く使い続けられるものを選びましょう。

用途によってYOURLSとShlinkを選び分けるイメージ

まとめ:短縮URLは自分のドメインで持っておくと安心

YOURLSもShlinkも、メモリ150〜250MBほどで動き、VPSの小さなプランでも十分に運用できます。

  1. シンプルさとメモリの軽さを取るならYOURLS
  2. QRコード・ボットの区別・APIなど機能を取るならShlink
  3. YOURLSをプロキシの後ろに置くなら、訪問者IPの設定を忘れずに
  4. Shlinkの管理画面は、Basic認証などで保護する

すでにVPSを持っていれば、そこに同居させるのがおすすめです。これから用意する場合は、メモリ1GBのプランで、ほかの小さなツールと一緒に動かせます。

シンVPSの料金・プランを見る(PR)

自分のサーバーでプッシュ通知を受け取る方法は、ntfyをVPSにセルフホストする手順で紹介しています。

参考にした公式情報