You tap a search result on Google, fully expecting your Android app to open. Instead, Chrome loads the mobile site. Annoying. This happens most often on Android 12 and later, especially with apps built using autoVerify="true" in the intent filter. The trigger is usually a Google search result for a URL that your app claims to handle, but Android doesn't trust the association.
What's actually happening here is a verification handshake that failed silently. Android checks a file on your server called assetlinks.json. If that file is missing, malformed, or served over HTTP instead of HTTPS, the system won't link your app to the domain. Google search results then fall back to the browser because the OS never confirmed your app as a trusted handler.
Why Android App Links fail after a Google search
App Links aren't the same as custom scheme deep links. They require a digital asset link between your website and your app. The flow works like this: you declare an intent filter with android:autoVerify="true", Android fetches https://yourdomain.com/.well-known/assetlinks.json, and if the fingerprint and package name match, the app gets verified. Skip any step and Android treats the link as a normal web URL. It opens the browser. No error dialog, no toast — just silence.
Common triggers include moving your site to a new domain, rotating your signing key without updating the assetlinks file, or testing on a device that hasn't re-verified since the last app update. I've seen this on Pixel 6 and Samsung Galaxy S22 devices running Android 13 where the app was installed from the Play Store but the assetlinks file had a typo in the SHA-256 fingerprint.
Fix it step by step
- Check your intent filter. Open
AndroidManifest.xmland confirm the activity has the right structure. It should look like this:
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https"
android:host="yourdomain.com"
android:pathPrefix="/products" />
</intent-filter>If autoVerify is missing or set to false, Android won't even try to verify. Also make sure the scheme is https, not http. App Links only work with HTTPS.
- Verify your assetlinks.json file. It must be accessible at
https://yourdomain.com/.well-known/assetlinks.jsonwith aContent-Type: application/jsonheader. The file content should be:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.yourpackage",
"sha256_cert_fingerprints": ["XX:XX:XX:..."]
}
}]Get the correct SHA-256 fingerprint by running keytool -list -v -keystore my-release-key.keystore for release builds. Don't use the debug keystore fingerprint unless you're testing a debug build. A single wrong character breaks the whole chain.
- Force re-verification on the device. After fixing the server file, Android won't automatically re-check. You need to trigger it manually. Connect the device via USB and run:
adb shell pm verify-app-links --re-verify com.yourpackageThen check the status:
adb shell pm get-app-links com.yourpackageYou want to see verified next to your domain. If it says none or legacy_failure, the verification didn't pass.
- Clear Google app data if needed. Google search results are cached. On some devices, especially Xiaomi and Oppo models, the Google app holds onto old link handling behavior. Go to Settings → Apps → Google → Storage → Clear cache. Don't clear data unless you want to re-login. Reboot the phone afterward. This step seems dumb but it fixes about 20% of stubborn cases.
- Test with a real Google search. Don't just tap a link from a messaging app. Open Chrome, search for a URL that your app handles, and tap the result. If it opens the app, you're done. If not, move to the next section.
If it still fails
Check the server response headers. Use
curl -I https://yourdomain.com/.well-known/assetlinks.json. You should see200 OKand the correct content type. A 301 redirect to a different path will break verification. Also confirm your SSL certificate is valid — Android won't fetch the file over a self-signed or expired cert.Look at Logcat while tapping the link. Filter for
AppLinksorIntentFilter. You'll often seeVerification failedwith a reason likeno matching packageorcert mismatch. That tells you exactly which part is wrong.Finally, check if you're using multiple signing keys. If your app is distributed via Play App Signing, Google re-signs your APK. The SHA-256 fingerprint in your assetlinks.json must be the one from the Play Console, not your local upload key. This trips up tons of developers. Go to Play Console → Release → Setup → App signing and copy the fingerprint from there.
One more gotcha: if your app targets Android 12 or higher, you need to declare
<queries>in the manifest for certain intents, though that's less common for App Links. The real fix is almost always the assetlinks.json file. Get that right and the redirect works.