Deeplinkly

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.

The complete declaration, with every supported parameter
<!-- 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">
The three parameters, and what each actually controls.
ParameterRequiredPurpose
app-idYesThe numeric App Store ID — not the bundle identifier
app-argumentNoThe URL handed to the app when it is already installed
affiliate-dataNoAffiliate and campaign tokens for App Store attribution
Banner title, icon, priceFetched 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.

Receiving app-argument in the app
// 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.

Banner behaviour in each state.
StateButtonapp-argumentWhere the user lands
App installedOpenPassed to the appThe exact content, if you route it
App not installedViewDiscardedApp Store page
After install from the bannerGoneHome screen, unless deferred routing restores it
Non-Safari browser on iOSNot renderedNothing happens
Any Android browserNot renderedNothing 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.

What exists on Android, and what it actually does.
MechanismPromotesRequiresEquivalent?
Web app manifest install promptA PWA, not your native appA manifest and a service workerNo
related_applications in the manifestSuppresses the PWA prompt when the native app is installedManifest entryPartly — it is a suppression rule
Your own HTML bannerWhatever you buildYour code and stylingFunctionally, yes
App LinksOpening the app for links it verifiesassetlinks.jsonDifferent 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

  1. Not Safari. Chrome, Firefox and most in-app browsers on iOS do not render it, and neither does any Android browser.
  2. `app-id` is not numeric. A bundle identifier there produces silence rather than an error.
  3. The user dismissed it. Safari remembers the dismissal for that site; test in a fresh private window.
  4. The tag is injected late. Safari reads the head on load; a tag added by JavaScript afterwards may be missed.
  5. The app is unavailable in that storefront. No app for the user's region means no banner.
  6. 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 conversionWeb-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 LinkA 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 linkA 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 LinkAn 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.