URL 長の上限と日本語の URL エンコード膨張

一言まとめ

日本語 1 文字は URL エンコードで 9 文字(UTF-8 3 バイト × `%XX`)に膨らむ。ブラウザの URL 上限は Safari 約 80KB / Firefox 約 64KB で、クエリに本文を載せて外部サービスへ遷移する設計では 16,000 文字程度を切り替え閾値に置くと安全側。

作成 · 更新 · #url#encoding#browser
目次 6 sections
  1. 01 日本語は 9 倍に膨らむ
  2. 02 ブラウザの URL 上限
  3. 03 閾値の置き方
  4. 04 遷移前の確認について
  5. 05 関連
  6. 06 更新履歴

調査時点: 2026-08。ある PWA で、溜めたテキストをクエリ文字列(?q=)に載せて外部サービスへ遷移する機能を作ったときの検討。

日本語は 9 倍に膨らむ#

UTF-8 で日本語 1 文字は 3 バイト。URL エンコードすると各バイトが %XX の 3 文字になるので、1 文字が 9 文字になる。ASCII の英数字はエンコード不要なので膨らまない。

日本語主体の本文を URL に載せると、見た目の文字数の約 9 倍の長さの URL になる。

ブラウザの URL 上限#

ブラウザ上限の目安
Safari約 80KB
Firefox約 64KB
Chrome2MB 程度(実用上はサーバ側の制限が先に効く)

遷移先のサーバやプロキシが別途上限を持つことも多いので、ブラウザの値だけを根拠にしない。

閾値の置き方#

上記の PWA では、URL エンコード後 16,000 文字を「クエリに載せる方式」と「ファイルを添付させる方式」の切り替え点にした。根拠は次のとおり。

  • 1 項目あたり約 190 文字(エンコード後)で、約 84 項目まで収まる。実データ(3 日で 20〜50 項目)の大半が通る。
  • Safari / Firefox の上限に対して十分な余裕がある。
  • 定数として 1 か所に置き、使いながら調整できるようにする。

書式変更で URL 長が伸びることがある(Markdown の継続行に 2 スペースを足したとき、46 項目で 15,099 → 15,285 文字)。閾値の余裕が数 % しかないときは、閾値を上げるか書式を見直す。

遷移前の確認について#

遷移先が ?q= を自動送信する場合、その挙動はこちらから止められない。止められないものに確認ダイアログを出しても結果は変わらないので、代わりに N KB · URL 遷移で送信 のように何が起きるかを事前に表示し、1 タップで遷移させる。やり直しのコストが低い操作なら、この形で足りる。

関連#

更新履歴#

  • 2026-08-29: 初版(ローカル調査ノート)
  • 2026-10-17: Wiki へ移植、概念ページとして再構成

同じトピック — Web