10sec Tips

10秒tips

LIFF URLの「?」がそのまま保持される!2次リダイレクト仕様変更のポイントと対策

「LIFF URLでパラメータを渡しているのに、なぜか値が崩れる……」「リダイレクト後のURLがおかしい?」そんなトラブルに直面していませんか? LIFF SDK v2.31.1以降、LIFF URLのクエリパラメータ値に含まれる「?」の処理仕様が変更されました。値に含まれる「?」が「&」へ自動置換されず、値の一部としてそのまま保持されるようになります。 今回は、仕様変更の要点と、開発・マーケ担当者が確認すべき影響範囲・対策をサクッと解説します

⚡ 10秒でわかる!今回の仕様変更(ビフォー・アフター)

LIFF URLから最終画面(2次リダイレクト先URL)へ遷移する際、値の中にある「?」の扱いが変わります

項目変更前(旧仕様) HTML変更後(LIFF v2.31.1〜) HTML
パラメータ値の「?」「&」へ置き換えられる(別パラメータとして誤認識)「?」のまま値として保持される(本来の値が維持)
変換例
?key=foo?bar
?key=foo&bar
(key=foo, bar=undefined等)
?key=foo?bar
(key=foo?bar
実務への影響「?」以降が別パラメータに意図せず分離していた1つの値として正しく受け取れる(旧仕様前提の処理は要修正)

🔍 どのようなLIFF URLが影響を受ける?

すべてのLIFF URLが影響を受けるわけではありません。特に以下のケースで確認・見直しが必要です

  • ⚠️ パラメータ値に「別のURL」を含めている場合
    • 例:[https://liff.line.me/](https://liff.line.me/){liffId}/?return_url=[https://example.com/path?campaign=spring](https://example.com/path?campaign=spring)
    • 変更前は内部の「?」が「&」に変換されていましたが、変更後は「?」がそのまま残るため、リダイレクト後のURL解釈やパース処理に影響します。
  • ⚠️ URL文字列を「?」や「&」で独自に分割(split)している場合
    • URLを単純な文字列操作で分解している実装では、値の中の記号まで区切り文字として認識され、データのズレが発生する可能性があります。
  • 💡 単純な文字列パラメータは影響なし!
    • ?store=shibuya?utm_source=line のような一般的なキー&バリューであれば影響はありません。

💡 トラブルを防ぐための「3つの鉄則」

  1. 外部URLを直接渡さず「ID」で管理する
    • パラメータ値に別のURLを含めるとURL構造が複雑化します。?campaign_id=spring2026 のように識別IDだけを渡し、遷移先URLはサーバー側やアプリ側で紐付ける設計が最も安全です。
  2. パラメータ取得は必ず「liff.init() 完了後」に行う
    • LIFF URLの追加情報は、初期化処理中に一時的に liff.state へ退避され、初期化後に復元されます。初期化前に直接URLを参照したり書き換えたりせず、必ず await liff.init() の完了後に値を取得しましょう。
  3. 実機・各種ブラウザ環境で挙動を検証する
    • 端末(iOS/Android)やLINEアプリ内外のアクセス経路によって挙動が異なる場合があります。本番配信前に、ユーザーが実際に利用する環境で遷移とパラメータ受け渡しのテストを行いましょう。

🏁 今回の結論

今回の仕様変更は本来のURL規格に沿った改善ですが、「旧仕様の変換挙動を前提にした実装」が残っていると予期せぬ不具合につながる可能性があります。 パラメータにURLや記号を含む運用を行っている場合は、早めに実装と2次リダイレクト後の動作テストを実施しましょう

🤝 LIFF・LINEマーケティングのご相談ならフォーグローブにおまかせ!

  • フォーグローブは、LINEヤフー社より「LINEミニアプリ部門」および「コミュニケーション部門」の2部門で認定を受けているTechnology Partnerです。
  • LIFFアプリの設計・開発から、複雑な仕様変更に伴う改修、高度なLINEマーケティングの運用までトータルで伴走支援いたします。
  • 「自社のLIFF URLが影響を受けるか確認したい」「安全なパラメータ設計に見直したい」という際は、ぜひお気軽にご相談ください!