SafariでlocalStorageが突然消える。ITPによるストレージ削除の仕組みと対策
今回は、SafariでlocalStorageやindexedDBが勝手に削除される謎現象について、AppleのIntelligent Tracking Prevention(ITP)を中心に、仕組みや条件をわかりやすくまとめてみました。
なぜlocalStorageがSafariで消えるのか?
Safariには、Apple独自のプライバシー強化機能「ITP(Intelligent Tracking Prevention)」があります。これは主にトラッキングを目的としたストレージ利用を制限・削除するための仕組みです。
localStorage が削除される条件(ITPのルール)
条件1:トラッキング疑いのあるURLでアクセスされた場合
Safariは、以下のような「リンクデコレーション」付きのURLを警戒します。
https://example.com/?clickID=123456
https://example.com/?utm_source=newsletter
こういったURLにアクセスすると、Safariはそのドメインを「トラッカーの可能性がある」とマークします。
条件2:トラッキング判定されたドメインに7日間アクセスがない
Safariは一度「怪しい」と判断したドメインについて、7日間ユーザー操作(アクセス・タップ・クリックなど)がなければ、localStorageやindexedDBを自動的に削除します。
トラッキング判定の仕組みはどうなってるの?
Safariのトラッキング判定は「各ユーザーのブラウザの中」で行われます。Appleが中央サーバーで一括制御してるのではなく、ユーザーごとの履歴やアクセス傾向を元に、Safari自身がローカルで判定しているのです。
クエリ付き → クエリなしのアクセスで判定は解除されるのか?
一度トラッキング疑いとされたドメインは、クエリなしで再アクセスしてもITPの影響を受け続けます。判定は「ドメイン単位」で記録されるためです。
SafariがITPでブロックしているか確認する方法
1. Webインスペクタでストレージ状態を確認
Safariメニュー → 開発 → Webインスペクタを開き、「ストレージ」タブを確認。localStorageやindexedDBが空、もしくは存在しない場合はITPの影響の可能性があります。
2. Storage Access APIの利用(iframe内の場合)
document.hasStorageAccess().then((hasAccess) => {
if (!hasAccess) {
console.warn('ITPによってストレージが制限されている可能性があります');
}
});
3. Safariの内部ログを有効にする(上級者向け)
defaults write com.apple.Safari IncludeInternalDebugMenu 1
Safariを再起動し、「Debug」メニュー → 「ITP Debug Mode」を有効化することで、内部ログを取得できます(自己責任)。
結論:Safariでのストレージ利用は慎重に
- トラッキングと見なされるようなクエリパラメータの使用を避ける
- 定期的なユーザー操作を促す(アクセス・通知など)
- ストレージだけに依存せず、サーバー側とのハイブリッド設計を行う
おわりに
SafariのITPは非常に強力なプライバシー保護機能ですが、開発者にとってはなかなか悩ましい存在です。「なぜlocalStorageが消えるのか?」「なぜSafariだけバグが出るのか?」そんなときは、ITPの仕様を疑ってみてください。
この記事が役立ったらぜひシェアしてください!