SafariでlocalStorageやindexedDBが勝手に削除される現象

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の仕様を疑ってみてください。

この記事が役立ったらぜひシェアしてください!