Deep link FAQs
Various factors can affect deep link behavior during testing or in production. Use this article to troubleshoot common issues with Adjust deep links, universal links, and deferred deep links. If your issue persists, contact support@adjust.com.
General deep link issues
If your deep link doesn’t open the expected destination, or returns an HTTP 404 URL not found error, first check the URL syntax and encoding.
URLs typically use this structure: scheme://host:port/path?query-string#fragment-id
Each part of the URL has a specific function. The scheme and host are not case-sensitive, but the path and query string are case-sensitive. Any mistake in the URL structure can prevent the link from opening as expected.
When setting up your deep link:
- If you add an Adjust parameter to a URL that already contains query parameters, use
&. Don’t add a second?, because information after the second?can be dropped. - If your query string is encoded, start it with
/or make sure it’s included in adeeplinkparameter. - Make sure there are no spaces or invalid characters in fallbacks, callbacks, device ID parameters, or campaign parameters. Encoding issues can cause parameters to be cut off.
Correct example:
https://example.go.link/my?path=location&client=name&adjust_t=klm012
Incorrect example:
https://example.go.link/my?path=location&client=name?adjust_t=klm012
If the app isn’t installed and the URL is incorrectly structured, the browser may drop the adjust_t parameter. Adjust needs this parameter to identify the click source. Without it, Adjust returns 404 URL not found.
This usually means the deep link failed to open the app, so the user was redirected to the store as a fallback.
To troubleshoot:
- Test the link as an existing user.
- If the app opens during testing, check the environment where the link originally failed.
- Check whether your Universal links/Android App links/Custom app scheme set up is correct, as these are the linking standards required to open the app
- Make sure there are no encoding errors in fallbacks or callbacks, as these can cause parameters to be dropped and break the link.
If the link opens the app but doesn’t open the correct in-app screen, check whether the issue is caused by the link setup or the app setup.
Host your deep link in a web environment and open it from your test device. If you’re using a branded domain, test the branded link directly. If you’re using the legacy Adjust adj.st link, you can test the universal link domain, for example https://abcd.adj.st/, or the app scheme, for example myapp://.
If the app opens but the path is wrong, ask your developer to confirm that the in-app paths are configured correctly.
Note: adj.st universal links are the legacy approach. We recommend using branded domains for new implementations.
Attribution and reporting
No. Adjust receives click data from deep links that use an Adjust link or have Adjust parameters appended. A direct deep link that only uses your app-specific domain or scheme doesn’t send click data to Adjust.
Sends click data:
myapp://welcome?adjust_t=abc123&adjust_campaign=re-engage_my_users&adjust_adgroup=apac&adjust_creative=promo1
https://z9pm.adj.st/welcome?adjust_t=abc123&adjust_campaign=re-engage_my_users&adjust_adgroup=apac&adjust_creative=promo1Doesn't send click data:
myapp://welcomeTo receive click data for installed apps and deep link reattribution, implement the SDK click in the Adjust SDK for iOS or Android. Deep links that trigger an SDK click are reported as clicks in Datascape and are visible in raw data through the click callback.
To identify clicks that came from a deep link SDK click, include the {is_deeplink_click} placeholder.
If your attribution data or campaign levels from your deep link URL are not available, it is likely due to a setup problem. Check that device ID parameters and campaign parameters (as applicable) are not being cut off due to encoding errors in fallbacks or callbacks. For instance, there are no spaces in the URL or invalid characters.
Universal link issues
If installs are attributed correctly but your partner isn’t receiving attributed callbacks, check the universal link setup.
Make sure that:
The click ID parameter is added to the universal link. There are no encoding errors in fallbacks or callbacks. The click ID parameter is prefixed with adj_ or adjust_.
If the click ID is missing, incorrectly formatted, or cut off by an encoding issue, Adjust may attribute the install but fail to pass the expected partner callback data.
First, check that universal links are set up correctly.
Then check where Apple is opening the link from. Apple doesn’t allow redirects to universal links outside Safari, so you need to host the raw universal link or scheme in a web environment and click it from there.
If your app still doesn’t open:
- Open your test HTML page in Safari and select the Share icon. If you see an Open in… option with your app listed, the Associated Domains configuration is correct and the Apple App Site Association file was downloaded.
- If you don’t see the app listed, uninstall and reinstall the app.
- Verify that the Bundle ID is the same in testing and production.
- Make sure the iOS Bundle ID and App Prefix are correct in AppView.
- If the app still doesn’t open, ask your developer to investigate the universal link or scheme app association.
Also check whether your link includes target="_blank". This can work in testing but fail in production. Remove the attribute from the link.
Make sure the universal link includes a path. If no path is appended, the user may be taken to the store even if the app is installed. The path doesn’t need to be valid.
In most cases, iOS doesn’t allow redirection to universal links outside Safari. This means environments using SFSafariViewController can be affected.
Because email links can be opened in many environments, including browsers and email apps that don’t support universal links, Adjust recommends using JSR links or an Adjust ESP integration.
Deep links with the deeplink parameter
Campaigns run through Facebook posts must use an Adjust link URL with a deeplink parameter appended. The deeplink parameter must also include a path. If there’s no path, the user may be taken to the store even if the app is installed. The path doesn’t need to be valid.
Example: https://app.adjust.com/abc123?deeplink=adjust%3A%2F%2Fsuch_path
Deferred deep links
A deferred deep link is used when a user clicks a deep link before they have the app installed. After install, the app should open to the intended in-app location.
If the deferred deep link doesn’t open the correct location:
- Check whether the path exists in the app.
- Host the app scheme, for example
myapp://, in a web environment and click it from there. - If the path doesn’t work for an existing user, ask your developer to confirm that the in-app paths are set up correctly.
- If the path works for an existing user but not for a new user, inspect the device in the Testing Console and check whether it was attributed to the click.
- If the device wasn’t attributed, forget the device in the Testing Console and test again.
- If the device was attributed, check whether the device includes a
deeplinkparameter. - If the
deeplinkparameter is missing, check for encoding issues or special characters that may be cutting off the URL. - If the
deeplinkparameter is present but the path is missing, contact Adjust Support.
When testing, a deferred deep link can sometimes persist for a short time after the click, even after you forget the device in the Testing Console.
This can happen if you:
- Click the deep link, install the app, and open it.
- Uninstall the app.
- Forget the device in the Testing Console.
- Run another test and the deferred deep link doesn’t work.
To resolve this, uninstall the app again, forget the device in the Testing Console again, and rerun the test.