Developers
Should an app store redirect be a 301 or a 302?
A redirect that depends on the device must stay temporary. Why a 301 to the App Store or Google Play causes trouble later.
Short answer
Use a 302 (or a 307): a redirect that sends iPhones to the App Store and Android phones to Google Play answers differently per device and may change later. Browsers keep a 301 and skip your server next time, so a store URL fixed afterwards keeps sending returning visitors to the old one. OneStoreLink (onestore.link) answers with a 302, so an edited destination applies from the next tap.
Last reviewed 2026-11-03
The choice looks like a detail when you write the redirect, and it decides whether you can ever change the destination. Browsers treat a 301 as "this address has moved for good" and remember it; a 302 means "go there this time". For a link printed on a QR code or pasted in a bio, which keeps being used for months, that difference matters more than anything else in the redirect. This guide explains which code to use, why, and what else a store redirect should send.
The problem
- A 301 tells browsers the move is permanent, and they keep it: the next visit can go to the store without asking your server.
- If the store URL changes later, a new listing, a new package name, a typo fixed, returning visitors may still be sent to the old one.
- A device-based redirect gives different answers to an iPhone and to an Android phone, which a permanent redirect does not describe.
- A redirect URL indexed by search engines adds a page that only exists to send people elsewhere.
With onestore.link
- Answer with a 302 (or a 307, which also keeps the request method): browsers ask your server again on every visit.
- Pick the destination on every request, from the visitor's user agent, so a change you make applies at once.
- Mark the redirect with an X-Robots-Tag: noindex header so the short link itself stays out of search results.
- onestore.link answers with a 302 and an X-Robots-Tag: noindex header, and you can edit the store URLs at any time without changing the link you shared.
How to do it
No SDK, no rebuild. Just a URL.
- 1
Return a temporary redirect
Choose the store from the user agent and answer with status 302. Here as a Cloudflare Worker; the same logic works on any server.
// Temporary redirect: browsers ask your server again on every visit export default { fetch(req) { const ua = req.headers.get("user-agent") || ""; const ios = "https://apps.apple.com/app/id0000000000"; const android = "https://play.google.com/store/apps/details?id=com.example.app"; const web = "https://example.com/download"; const to = /iPhone|iPad|iPod/.test(ua) ? ios : /Android/i.test(ua) ? android : web; return new Response(null, { status: 302, headers: { Location: to, "X-Robots-Tag": "noindex" } }); }, }; - 2
Send computers to a page, not a store
A store page cannot install anything on a computer. Send desktop visitors to a page with both store buttons and a QR code, which also catches iPads that identify as a Mac.
- 3
Or use a hosted link
Create a onestore.link with your two store URLs: it answers with a 302 per device, keeps the short link out of the index and lets you change the destination later.
Frequently asked questions
Is a 301 bad for an app download link?
It is risky. Browsers may keep a 301 and stop asking your server, so a destination you change later does not reach visitors who already followed the link. A 302 avoids that at no cost.
302 or 307?
Both are temporary. A 307 guarantees the request method is kept; for a link people tap, which is always a GET, the two behave the same. 302 is the common choice.
Does a 302 hurt SEO?
Not for a link like this. A store redirect is not a page you want ranked; the page to rank is your website. Mark the redirect noindex and link to your site from your own pages.
What does onestore.link send?
A 302 to the App Store for iPhone and iPad user agents and to Google Play for Android, with an X-Robots-Tag: noindex header. In-app browsers and computers get a page instead, because a bare redirect fails or installs nothing there.
Ready to try it?
Free forever, no password. Your link is ready in about a minute.
Create your free linkComparing tools? onestore.link vs bitly →