AR and VR apps deal with spatial content: 3D models, scenes, environments, and anchored objects. Deep linking into these apps means not just opening a screen, but placing the user in a specific spatial context. A deep link to an AR furniture app should open with the selected sofa already loaded and ready to place in the room.
This guide covers deep linking patterns for AR and VR across Apple's visionOS/ARKit, Google's ARCore, and standalone VR platforms. For the foundational deep linking standards, see deep linking standards in 2026.
Photo by Eren Li on Pexels
AR Deep Linking on iOS (ARKit + RealityKit)
Quick Look AR Links
Apple supports AR content through Quick Look, which lets users view 3D models in their environment directly from a web link:
<!-- Web page with AR deep link -->
<a rel="ar" href="sofa-model.usdz">
<img src="sofa-preview.jpg" alt="Modern Sofa - View in AR">
</a>
When a user taps this link on an iOS device, the 3D model opens in Quick Look AR mode. No app required. This is the simplest form of AR deep linking.
For app-specific AR experiences, use Universal Links to open the AR scene in your app:
class ARSceneController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
guard let url = navigationContext?.deepLinkURL else { return }
let pathComponents = url.pathComponents
// /ar/furniture/modern-sofa → load sofa model in AR
if pathComponents.contains("ar"), pathComponents.count >= 3 {
let category = pathComponents[2] // "furniture"
let modelSlug = pathComponents[3] // "modern-sofa"
loadARModel(category: category, slug: modelSlug)
}
}
func loadARModel(category: String, slug: String) {
let modelURL = ModelCatalog.url(for: slug)
let anchor = AnchorEntity(plane: .horizontal)
let model = try? ModelEntity.load(contentsOf: modelURL)
anchor.addChild(model ?? ModelEntity())
arView.scene.anchors.append(anchor)
}
}
Scene Links with Parameters
AR deep links can include spatial parameters:
/ar/furniture/modern-sofa → Load model in default placement
/ar/furniture/modern-sofa?color=navy → Load with specific color variant
/ar/furniture/modern-sofa?scale=0.8 → Load at 80% scale
/ar/room/living-room?layout=open-concept → Load a room configuration
AR Deep Linking on Android (ARCore)
Scene Viewer
Google's Scene Viewer is the Android equivalent of Apple Quick Look. It renders 3D models in AR without requiring your app:
<!-- Intent URL for Scene Viewer -->
<a href="intent://arvr.google.com/scene-viewer/1.0?file=https://yourapp.com/models/sofa.glb&mode=ar_preferred&title=Modern+Sofa&link=https://yourapp.com/products/modern-sofa#Intent;scheme=https;package=com.google.android.googlequicksearchbox;action=android.intent.action.VIEW;end;">
View in AR
</a>
The link parameter in the Scene Viewer intent is a deep link back to your app or web page. When the user taps the title in Scene Viewer, they go to your product page.
App-Specific AR via App Links
For custom AR experiences in your own app:
class ARActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val uri = intent.data ?: return
// https://yourapp.com/ar/products/modern-sofa?variant=navy
val productSlug = uri.pathSegments.lastOrNull() ?: return
val variant = uri.getQueryParameter("variant")
arViewModel.loadModel(productSlug, variant)
}
}
<activity android:name=".ARActivity"
android:exported="true">
<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="yourapp.com"
android:pathPrefix="/ar/" />
</intent-filter>
</activity>
VisionOS and Spatial Computing
Universal Links on visionOS
Apple Vision Pro runs visionOS, which supports Universal Links the same way iOS does. The difference is in how you present the content:
// visionOS app: handle deep link to open a volumetric window
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
guard let url = userActivity.webpageURL else { return false }
if url.pathComponents.contains("3d-model") {
let modelSlug = url.lastPathComponent
openVolumetricWindow(for: modelSlug)
return true
}
return false
}
func openVolumetricWindow(for modelSlug: String) {
// Open a volumetric window showing the 3D model
// Users can walk around it in their physical space
}
}
Immersive Space Links
Deep links can open full immersive spaces on visionOS:
@main
struct MyVRApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
ImmersiveSpace(id: "vrScene") {
VRSceneView()
}
}
}
// Handle deep link to open immersive space
func handleDeepLink(_ url: URL) {
if url.path.hasPrefix("/vr/") {
let sceneId = url.lastPathComponent
openImmersiveSpace(id: "vrScene", value: sceneId)
}
}
URL Structure for AR/VR Content
Recommended Patterns
AR experiences:
/ar/{category}/{model-slug} → AR view of a specific model
/ar/{category}/{model-slug}?color=blue → AR view with parameters
/ar/scan/{scene-id} → AR scene with anchored content
VR experiences:
/vr/spaces/{space-slug} → Virtual space/environment
/vr/tours/{tour-slug} → Virtual tour
/vr/events/{event-slug} → Virtual event
3D content:
/3d/{model-slug} → 3D model viewer (non-AR)
/3d/{model-slug}.usdz → Direct model download (Apple)
/3d/{model-slug}.glb → Direct model download (Android)
Web Fallback Pages for AR Content
The web page for an AR deep link should include:
- Product images (2D fallback for the 3D model).
- AR launch button (opens AR on supported devices).
- Product details (for SEO and non-AR users).
- 3D model metadata for structured data:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "3DModel",
"name": "Modern Sofa - Navy",
"contentUrl": "https://yourapp.com/models/modern-sofa-navy.glb",
"encodingFormat": "model/gltf-binary",
"associatedMedia": {
"@type": "ImageObject",
"contentUrl": "https://yourapp.com/images/modern-sofa-navy.jpg"
}
}
</script>
Sharing AR/VR Content via Deep Links
AR Experience Sharing
When a user finds a product they like in AR, let them share the experience:
func shareARExperience(model: ARModel, placement: ARPlacement?) {
var components = URLComponents(string: "https://yourapp.com/ar/\(model.category)/\(model.slug)")
// Include current configuration
var queryItems: [URLQueryItem] = []
if let color = model.selectedColor {
queryItems.append(URLQueryItem(name: "color", value: color))
}
if let scale = placement?.scale {
queryItems.append(URLQueryItem(name: "scale", value: String(scale)))
}
components?.queryItems = queryItems.isEmpty ? nil : queryItems
guard let url = components?.url else { return }
let activityVC = UIActivityViewController(
activityItems: [url],
applicationActivities: nil
)
present(activityVC, animated: true)
}
The recipient gets a deep link that opens the same AR experience with the same model and configuration.
VR Event Links
For virtual events, the deep link should include timing information:
https://yourapp.com/vr/events/product-launch-2026?start=2026-07-15T18:00:00Z
If the event has not started, show a countdown. If it is live, join immediately. If it is over, show a recording.
Cross-Platform Considerations
Model Format Compatibility
Different platforms support different 3D formats:
| Platform | Preferred Format | Fallback |
|---|---|---|
| iOS/visionOS | USDZ | GLTF |
| Android | GLB/GLTF | OBJ |
| Web (WebXR) | GLTF/GLB | OBJ |
| Meta Quest | GLB/GLTF | FBX |
Your deep link handler should detect the platform and serve the appropriate format:
// Web page: detect platform and offer the right AR experience
function getARLink(modelSlug) {
const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent);
const isAndroid = /Android/.test(navigator.userAgent);
if (isIOS) {
return `/models/${modelSlug}.usdz`; // Quick Look
} else if (isAndroid) {
return `intent://arvr.google.com/scene-viewer/1.0?file=https://yourapp.com/models/${modelSlug}.glb&mode=ar_preferred#Intent;scheme=https;package=com.google.android.googlequicksearchbox;end;`;
} else {
return `/3d/${modelSlug}`; // Web 3D viewer
}
}
Tolinku for AR/VR Deep Links
Tolinku routes deep links to AR/VR content across platforms. Configure routes like /ar/:category/:slug in the Tolinku dashboard, and Tolinku handles platform detection, app-installed vs. not-installed routing, and web fallback pages with AR launch buttons.
For more on deep linking trends, see the future of mobile deep linking. For wearable deep linking, see deep linking for wearables.
Get deep linking tips in your inbox
One email per week. No spam.