Deeplinking in Pugpig Bolt
Table of Contents
What is a deeplink?
A deeplink is a type of link that takes the user to a specific location within your app, rather than a website.
We have 3 types of deep links:
- Content - You can use these to link directly to a specific article. The format of the URL can vary depending on your permalink structure.
- Navigation - You can use these to link directly to an area within the app, such as a tab or collection.
- Command - These are used to trigger certain app functions or direct users to native screens, such as the paywall.
How does deeplinking work?
The app has a domain and any link using that domain will open inside the app. If the link isn't valid it will open the app's home screen (the first tab), but if it is valid it will open to the designated screen inside your app.
While deeplinks from alias domains should work if the domain is configured correctly, this article assumes you are sending deep links on the app domain. If you are interested in sending them on the www. domain, read making links from your domain open in the app.
How do I find my app's domain?
You should hopefully have set up a vanity domain, in which case that will be your app domain. But otherwise you can check the web version of your app, or share an article from your app to yourself. The domain is the section of the hyperlink after https:// up to and including the domain extension. For example, the domain in https://www.pugpig.com/products-and-services/ is www.pugpig.com
What screens can I deeplink to?
Content
Article
app.pugpig.com/[article_postname]/content.html
Dynamic timeline
There are two ways to deep link to dynamic timelines.
app.pugpig.com/d/id-[dynamic_timeline_id]
app.pugpig.com/d/[base-64-encoded-timeline-json]
Edition table of contents
app.pugpig.com/d/id-[edition_id]
Navigation
Tabs
app.pugpig.com/t/[tab_name]
You can find the tab name as it is listed as the timeline_group in distribution. Go to the publication in Production Distribution>Content Sources>Main Content Feed. Under editions, find a timeline that lives within that tab (there may only be one) and the timeline_group will be listed in the categories column.
Collections
app.pugpig.com/t/[tab_name]/[collection_id]
Storefront filters
app.pugpig.com/t/[tab_name]/[filter_group]
You can find the timeline name by finding the timeline under Production Distribution>Content Sources>Main Content Feed and clicking on the timeline title. This will take you through to a page with the timeline name at the top, labelled as "edition: <timeline name here>".
Settings items
app.pugpig.com/t/[settings_tab]/[settings_group]/[settings_item]
app.pugpig.com/t/[settings_tab]/[settings_item]
Command
Help Screens
app.pugpig.com/c/onboarding
This relaunches the onboarding flow users see when they first install your app e.g.
Analytics Tracking Consent opt-in screen
app.pugpig.com/c/analyticstracking
Sign in screen
app.pugpig.com/c/signin
Subscription screen
app.pugpig.com/c/subscribe
Receipt postback / Cross entitlement
app.pugpig.com/c/register
This will take the user to our hosted receipt postback registration form or the registration form for your chosen auth provider.
Verify
app.pugpig.com/c/verify
Voucher
app.pugpig.com/c/voucher
Link to voucher code auth, which auto fills the form with a voucher code in the path: https://app.cmswire.com/c/voucher/<voucher_code>
Audio player
app.pugpig.com/c/audioplayer
App logs
app.pugpig.com/c/logs/send OR app.pugpig.com/c/logs
Device app settings
app.pugpig.com/c/appsettings
This is useful for customers who have previously opted-out to prompt them to opt-in again from the settings app of their own device.
Collection set help screens
app.pugpig.com/c/<collection-set-name/collection-set-help-screen-name>
Push permissions dialog
app.pugpig.com/c/pushpermissions
Push permissions dialog deep link on Android
We previously only supported this option on iOS, however Android 13 has introduced a similar pop up on Android. We now support this /c/pushpermissions link on Android 13 and above. This prompt doesn't appear on Android 12 and lower. If push permissions were previously declined, the link will direct you to the app's permissions in the system settings.
Expected behaviour of deep links
Deep links can work:
- Internally - in articles, link cards, and other places within the app.
- From external sources - i.e. email or newsletter, when the app is backgrounded (i.e. in the task manager) or killed (i.e. completely removed from task manager).
- Push notifications or in-app messages
Type of deep link | Example path | Do they work | |||
Internally | From external source | Via push | |||
https://your-app-domain.com | |||||
Content | N/A | /yyyy/mm/dd/article/content.html | Yes | Yes | Yes |
Tab | /t/ | /t/tab | Yes | Yes | Yes |
Timeline | /t/ | /t/timelines_tab/timeline | Yes | Yes | Yes |
Storefront | /t/ | /t/storefront | Yes | Yes | Yes |
Filter group | /t/ | /t/storefront/filter_group | Yes | Yes | Yes |
Settings item | /t/ | /t/settings_tab/settings_item | Yes | Yes | Yes |
Dynamic timeline | /d/ | /d/dynamic_timeline | Yes | Yes | Yes |
Edition TOC | /d/ | /d/id-edition | Yes | Yes | Yes |
Command | /c/ | /c/command | Yes | No* | No* |
*We advise that command deep links, i.e., any links whose path starts with a /c/, should not be used outside of the app.
Redirect links
If you tap on a link from an external source that redirects to the Bolt app, the link will open in a browser app first and then the redirect should open the Bolt app in the appropriate place.
Email newsletters
A popular use case for this is links in a newsletter email by mailing services. Almost all mailing services (E.g. Mailchimp, Salesforce Marketing Cloud) rewrite any links in the email to enable clickthrough tracking.
Tapping on the (rewritten) link in the email will open the browser app first before opening the Bolt app on the correct article. This behaviour ensures that the links are tracked accurately, and users are subsequently directed to the correct article within the app.
External links
Some links may be intended to take the user externally, out of the app. For example if a user is being taken to your site, or if you are loading iframed content in your app. To read more about why you might wish to do this, or what control you have, check out our doc about links to external domains. As of Bolt v4.3, you can force a link to open externally by including the query parameter “force_external” in the link. This must not be used for navigation or command links, and the URL in question must be fully qualified. The result is undefined if these conditions are not met.