Universal links FAQs
Various factors could affect your universal link behavior. If you are experiencing unexpected results from your universal links either in testing or production, read through this article to find a solution. If your issue still persists, contact us.
General problems
Is my URL syntax and encoding correct?
If your deep link is not directing you to the specified destination or returning an HTTP 404 error, first check your URL syntax and encoding.
URLs typically use this syntax: scheme://host:port/path?query-string#fragment-id
Each part of a URL performs a different function and uses specific characters to identify and separate values. The scheme and host are not case-sensitive but the path and query-string are case-sensitive. A mistake in the composition of your URL will prevent it from opening as it should.
When setting up your deep link, pay attention to these conditions:
- If you add an Adjust parameter to a URL query string already containing query parameters, use an
&
. Otherwise, any information after the second?
in a URL is dropped.- Correct example:
https://abcd.adj.st/my?path=location&client=name&adjust_t=klm012
- Incorrect example:
https://z9pm.adj.st/my?path=location&client=name?adjust_t=klm012
- Correct example:
- If your query string is encoded, start it with a
/
or ensure it is part of adeeplink
parameter.
If your app is not already installed and these conditions are not met, the adjust_t
parameter is dropped by the browser. Adjust needs this parameter to locate the source of the click; without it, we will return the HTTP 404 error URL not found
.
Examples
Depending upon how your URL is set up, your deep link can have the following behaviors:
Deep link setup | Example link URL | Behavior |
---|---|---|
Link URL + deep_link parameter | https://app.adjust.com/r40ncx7?deep_link=adjust%3A%2F%2F%3Fpath | Opens the app on the specified in-app page |
Universal link | https://abcd.adj.st/%3Fpath?adjust_t=r40ncx7 | Opens the app on the specified in-app page |
Universal link | https://abcd.adj.st/?path&adjust_t=r40ncx7 | Opens the app if it is already installed, but cannot reach the specified in-app page. |
Universal link | https://abcd.adj.st%3Fpath?adjust_t=r40ncx7 | Is invalid and returns an error |
Why can't I see my attribution data and/or campaign levels?
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.
Why am I directed to the store even though my app is installed?
Typically this behavior means that your deep link has failed to open the app, and we have redirected to the store as a fallback. To test this, follow these steps:
- Follow our testing instructions as an existing user for universal links and links with the deep_link parameter.
- If your test is successful and the app opens, consider what environment the deep link was clicked from when it failed. Then check to see if any additional parameters are required for that instance.
- For example: if a JSR universal link is clicked from Slack, the
adjust_deeplink_js=1
flag should be present. This helps load the scheme before redirecting to the store. If your link does not work even with theadjust_deeplink_js
flag present, then your App Scheme may be incorrectly entered in Campaign Lab.
- For example: if a JSR universal link is clicked from Slack, the
- Ensure there are no encoding errors to your fallbacks or callbacks in the link URL that might break it. This will cause parameters to be dropped. Dropped parameters will result in the complete link to not work as intended.
Why doesn't my deep link open in the correct place in the app?
If your link does not open in the right place but it opens your app, check whether it is your link or app setup causing the problem.
- Host the universal link domain (
https://abcd.adj.st/
) or scheme (myapp://
) on a web environment and click it from there. - Contact your developer to make sure the paths within the app are set up correctly.
Adjust receives incoming click data for deep links with an Adjust link or Adjust parameters appended. A direct deep link with just a domain that is specific to your app will not return any 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=promo1
Doesn't send click data:
myapp://welcome
To receive click data for apps that are already installed and for deep link reattribution, make sure to implement the SDK click within the Adjust SDK iOS; Android.
Deep links that trigger an SDK click are reported as clicks in Datascape. They are also visible in your raw data using the click
callback. For a granular view of which clicks resulted from a deep link SDK click, include the {is_deeplink_click}
parameter.
Problems with universal links
Why doesn't my universal link open an installed app?
- Check whether you have set up universal links correctly.
- Check which environment Apple is opening the link from. Redirects to universal links are not allowed by Apple outside of Safari, so you need to host the raw universal link or scheme in a web environment. For example,
https://abcd.adj.st/
ormyapp://
, respectively. With the app installed on your test device, visit the page where you hosted the host the raw universal link or scheme, and select the link.
If your app does not open:
- Open your test HTML page in Safari, and select the Share icon. You should see an "Open in…" menu with your app listed as one of the options. If this appears, then the Associated Domains configuration is correct and the Apple App Site Association (AASA) file was correctly downloaded. You might need to uninstall and reinstall the app if you do not see that option.
- Verify that your Bundle ID in testing and production is the same.
- Ensure your app’s iOS Bundle ID and App Prefix in AppView is correct. If it is correctly set up and your app still does not open, consult your developer to further investigate the universal link or scheme app association.
- Check if the
target=“_blank”
attribute is a part of your link:
This may lead to the app opening in testing, but not in a production environment.
For example, with the target=“_blank”
attribute, your HTML code may look similar to the following:
<a href="[https://abcd.adj.st](https://abcd.adj.st/)" target="_blank">Universal Link to App</a>
To resolve this issue, remove the attribute, as in the following example:
<a href="[https://abcd.adj.st](https://abcd.adj.st/)">Universal Link to App</a>
Why am I directed to the store even though my app is installed?
- Follow our testing instructions for universal links. Also, run through the steps in "Why doesn't my universal link open an installed app?" above.
- Consider what environment the universal link was clicked from when it failed. Then check to see if any additional parameters are required for that instance.
- For example: If a JSR universal link is clicked from Slack, the
adjust_deeplink_js=1
flag should be present. This helps load the scheme before redirecting to the store. If your link does not work even with theadjust_deeplink_js
flag present, then your App Scheme may be incorrectly entered in your app's settings in AppView.
- For example: If a JSR universal link is clicked from Slack, the
Why doesn't my deep link or deferred deep link open the app in the correct place after install?
If your link does not open in the right place but it opens your app, check whether it is your link or app setup causing the problem.
- Host the universal link domain (
https://abcd.adj.st/
) or scheme (myapp://
) on a web environment and click it from there. - Contact your developer to make sure the paths within the app are set up correctly.
If you are taken to the correct path as an existing user, but not as a new user, inspect your device via the Testing Console and make sure you were attributed to the click. If you were not, forget the device via the Testing Console and try again.
If you were attributed to the click, inspect your device to check it includes a deeplink
parameter. If it does not, make sure there are no encoding issues or special characters that are cutting off the URL before the deeplink
parameter.
Finally, if a deeplink
parameter is included, then make sure the path is present. If the path is not present, it has been cut off for some reason. Reach out to support@adjust.com for further assistance.
Why isn't my universal link working from a Facebook or Instagram post?
Make sure that your universal links has a path appended. Otherwise, the user will be taken to the store even if the app is installed. The path provided does not need to be valid.
Example of a parameter with appended path: https://abcd.adj.st/path?adjust_t=abc123
Can I use universal links in email campaigns?
For the most part, iOS does not allow redirection to universal links outside of Safari. This means any environment using SFSafariViewController is impacted.
There are many different environments that an email might be opened in, such as a browser or different email application that doesn't support universal links. As a result, it is best practice to either use JSR links, or ideally, one of Adjust's ESP integrations.
Why can't I see my attribution data and/or campaign levels?
Check if the Adjust parameters are prefixed with adj_
or adjust_
. Any Adjust parameters that are not prefixed with adj_
or adjust_
are dropped, and you may not be able to see data from those parameters.
Why isn't my partner receiving attributed callbacks even though installs are attributed correctly?
- Check if you have added the click ID parameter to the universal link.
- Ensure there are no encoding errors to your fallbacks or callbacks in the link URL that might break it.
- Verify that the click ID parameter is prefixed with the
adj_
oradjust_
Why do I have issues with JSR universal links in Safari for iOS 12.2 and 12.3?
For iOS 12.2 and 12.3, JSR universal links do not always open properly when clicked in a Safari environment. This specifically affects instances where the referrer HTTP header is not readable, for instance, when using incognito mode.
For Safari campaigns, we recommended using raw universal links. Although this will not work for email campaigns with wrapped URLs.
From iOS 13+, this issue does not apply as we can apply a fallback to the scheme. However, this leads to an additional pop-up.