iOSでホーム画面に追加したURLが勝手に変わる原因と対策(PWA・manifestの罠)
最終更新:2026/04/23
Webアプリをホーム画面に追加したとき、「開いているURLと違うURLが保存される」という現象に遭遇したことはありませんか?
実際に、/petal/{token} を開いているのに、ホーム画面には /petal/@username が保存されてしまう問題が発生しました。
結論から言うと、原因は manifest.json の設定 です。完全に私のミスですが。
原因:maskableアイコン + start_url
問題のあるmanifestはこんな感じです。
{
"name": "名刺アプリ",
"short_name": "Petal",
"display": "standalone",
"start_url": "/petal/@ojapp",
"icons": [
{
"src": "/icon.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
}
]
}
一見問題なさそうですが、これが原因で以下のような挙動になります。
- iOSが「これはPWA」と認識する
- start_urlを優先する
- ホーム画面に追加するURLが上書きされる
つまり、今開いているURLではなく、start_urlが保存されるという状態になります。
なぜiOSで起きるのか
iOS Safariは通常、manifestをほとんど無視します。
しかし以下の条件が揃うと挙動が変わります。
- display: standalone
- maskableアイコン
- PWAっぽい構成
この状態になると、start_urlが有効化されることがあります。
これが今回のバグの正体です。
👉 キャッシュを消すべきタイミング・消さないべきタイミングを開発者目線で整理する の解説が役に立ちます。
解決方法
① purposeを修正する
{
"purpose": "any maskable"
}
これでAndroidではmaskableが使われ、iOSでは無視されやすくなります。このanyが入るだけで挙動が変わります。
Android用に”purpose”: “maskable”だけを設定すると、今のiOSはPWAの動きに変わりstart_urlを使い始めます。
② start_urlを削除 or “.” にする
{
"start_url": "."
}
“.” は「現在開いているURLを使う」という意味です。
これにより、ホーム画面追加時にURLが上書きされなくなります。
設計的に重要なポイント
ホーム画面に追加されるURLは以下で決まります。
- アドレスバーのURL
- manifestのstart_url(条件付き)
特にiOSは仕様が不安定で、突然挙動が変わることがあります。
そのため、
- URLを勝手に書き換えない
- manifestで固定URLを指定しない
これが重要です。
私は単純にURLを間違って指定していたがPWAが発動してなかったのでミスになってなかったのに、”purpose”: “maskable”を記入したことでstart_urlまで発動して違うURLに飛んでしまっていたんですね。(笑)
まとめ
- maskable単体は危険
- start_urlはiOSで効く場合がある
- URLが勝手に変わる原因になる
- 対策は「any maskable」と「start_url: “.”」
iOSのPWAはまだ発展途上です。
「急に動かなくなった」ときは、まずmanifestを疑うのが正解かもしれません。