🔗onestore.link

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.

Create a free link in about a minuteor sign in →

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. 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. 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. 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 link
Original researchWhat happens to an app link opened inside Instagram and TikTok: 74,000 redirects measuredPreloads nobody sees, a TikTok webview that refuses the store, and an App Store that opens over the page: what our redirect logs show.

Comparing tools? onestore.link vs bitly →

Other guides

Explore more