Glossary/Metrics and growth
Smart app banner
Definition
A smart app banner is a native promotional bar that Safari on iOS renders at the top of a web page when the page declares an `apple-itunes-app` meta tag, offering to open or install the associated app.
It is the least intrusive way to convert a mobile web visitor into an app user on iOS, and it costs one line of HTML. Safari renders it itself, so it never obscures your content, is not affected by ad blockers, and carries none of the search ranking risk attached to full-screen install interstitials. Android has no equivalent tag, which is the main thing to know before designing around it.
The tag
The whole feature is one meta element in the document head. Safari reads it, looks up the app, and renders the banner with the correct title, icon, rating and price for the user's storefront — none of which you supply.
<!-- Minimum viable: just the App Store numeric ID. -->
<meta name="apple-itunes-app" content="app-id=525463029">
<!-- With a deep link target, so the app opens on this content. -->
<meta name="apple-itunes-app"
content="app-id=525463029, app-argument=https://example.com/articles/42">
<!-- With an affiliate token, if you are enrolled. -->
<meta name="apple-itunes-app"
content="app-id=525463029,
affiliate-data=ct=web-banner&pt=123456,
app-argument=https://example.com/articles/42">| Parameter | Required | Purpose |
|---|---|---|
app-id | Yes | The numeric App Store ID — not the bundle identifier |
app-argument | No | The URL handed to the app when it is already installed |
affiliate-data | No | Affiliate and campaign tokens for App Store attribution |
| Banner title, icon, price | — | Fetched by Safari from the App Store; not settable |
app-id is the numeric ID, not the bundle identifier
app-id=com.example.app silently produces no banner. The value is the numeric identifier from your App Store URL — the digits after /id. Because the failure is a banner that simply does not appear, this mistake survives code review easily; check the rendered page on a real device rather than assuming.
What app-argument does, and what it does not
When the app is already installed, the banner's button reads Open, and tapping it launches the app while passing app-argument to it. Your app receives that URL through the standard URL-handling entry point and routes on it exactly as it would a universal link.
// app-argument arrives through the ordinary URL entry point.
// Route on it exactly as you would any inbound deep link, and treat
// the value as untrusted input — it came from a web page.
func application(_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
guard let route = DeepLinkRoute(url: url) else { return false }
router.navigate(to: route)
return true
}When the app is not installed, the button reads View and sends the user to the App Store. app-argument is discarded at that point — it is not carried through the store, and no parameter is. Restoring the destination after a fresh install therefore requires deferred deep linking, exactly as covered in web-to-app conversion.
| State | Button | app-argument | Where the user lands |
|---|---|---|---|
| App installed | Open | Passed to the app | The exact content, if you route it |
| App not installed | View | Discarded | App Store page |
| After install from the banner | — | Gone | Home screen, unless deferred routing restores it |
| Non-Safari browser on iOS | Not rendered | — | Nothing happens |
| Any Android browser | Not rendered | — | Nothing happens |
Android has no equivalent, and the alternatives are narrower than they look
There is no meta tag that produces a native app banner in Chrome on Android. Two mechanisms are sometimes offered as substitutes, and each solves a different problem than the smart app banner does.
| Mechanism | Promotes | Requires | Equivalent? |
|---|---|---|---|
| Web app manifest install prompt | A PWA, not your native app | A manifest and a service worker | No |
related_applications in the manifest | Suppresses the PWA prompt when the native app is installed | Manifest entry | Partly — it is a suppression rule |
| Your own HTML banner | Whatever you build | Your code and styling | Functionally, yes |
| App Links | Opening the app for links it verifies | assetlinks.json | Different layer — routing, not promotion |
The practical arrangement is a smart app banner on iOS and a compact, dismissible HTML banner on Android that points at an App Link. Keep the custom one small and inline; a full-screen interstitial that obscures content carries real search ranking risk on mobile, which is the cost the native banner avoids by design.
When the banner does not appear
- Not Safari. Chrome, Firefox and most in-app browsers on iOS do not render it, and neither does any Android browser.
- `app-id` is not numeric. A bundle identifier there produces silence rather than an error.
- The user dismissed it. Safari remembers the dismissal for that site; test in a fresh private window.
- The tag is injected late. Safari reads the head on load; a tag added by JavaScript afterwards may be missed.
- The app is unavailable in that storefront. No app for the user's region means no banner.
- Desktop Safari. The banner is an iOS feature; macOS does not render it.
Because the banner is rendered by the browser rather than by your page, it cannot be styled, positioned, or measured through your own analytics. Impressions are invisible to you. What you can measure is the arrival — traffic reaching the app with the app-argument payload, or store referrals carrying the affiliate token — so instrument the receiving side rather than trying to instrument the banner itself.
Universal link tester
A smart app banner's Open button hands your app a URL, and it is only useful if that URL actually routes. This checks a given URL against your live association file and shows which path component matched, which is the same matching that decides whether the banner's hand-off lands on real content.
Open the universal link tester →Frequently asked questions
- What is a smart app banner?
- It is a native promotional bar that Safari on iOS displays at the top of a web page when the page includes an apple-itunes-app meta tag. Safari renders it itself, fetching the app's name, icon, rating and price from the App Store, and shows either an Open or a View button depending on whether the app is already installed.
- How do I add a smart app banner?
- Add a single meta tag to the document head with content set to app-id followed by your app's numeric App Store identifier. Optionally include app-argument with a URL the app should open when it is already installed, and affiliate-data if you are enrolled in the affiliate programme. No JavaScript or library is required.
- What does app-argument do?
- When the app is already installed, tapping Open launches it and passes the app-argument URL to the app's standard URL handling entry point, so you can route the user to the exact content they were viewing on the web. If the app is not installed, app-argument is discarded, because nothing survives the App Store visit.
- Do smart app banners work on Android?
- No. The apple-itunes-app meta tag is a Safari feature and no Android browser renders anything for it. Android's web app manifest can prompt installation of a progressive web app and can suppress that prompt when a related native app is installed, but there is no native banner promoting a native app, so a custom inline banner is the usual approach.
- Why is my smart app banner not showing?
- The most common causes are using the bundle identifier instead of the numeric App Store ID, testing in a browser other than Safari on iOS, or having previously dismissed the banner, which Safari remembers per site. Injecting the tag with JavaScript after page load and the app being unavailable in the tester's storefront also produce a silently missing banner.
Related terms
- Web-to-app conversion — Web-to-app conversion is the process of moving a mobile web visitor into a native app, ideally landing them on the same content they were viewing rather than on a generic home screen.
- Universal Link — A Universal Link is a standard HTTPS URL that opens an iOS app directly when that app is installed and the domain has authorised it, and loads the equivalent web page when it is not.
- QR code deep link — A QR code deep link is a QR code encoding a universal or app link, so that scanning it opens the corresponding app directly on the intended content, or routes to the app store and restores that content after install.
- Android App Link — An Android App Link is an HTTPS URL that opens an Android app directly, without a chooser dialog, because the system has verified through a file on the domain that the app is authorised to handle it.