Session Replay
Pro FeatureWatch exactly how users interact with your website. Session Replay records mouse movements, clicks, scrolls, and page interactions so you can understand user behavior at the individual level.
Session Replay is available on Pro, Scale, and Enterprise plans. Upgrade your plan to enable this feature.
Overview
Session Replay captures a video-like recording of user sessions without actually recording video. Using DOM snapshots and incremental changes, replays are lightweight (~50-100KB per session) yet provide complete fidelity of the user experience.
Key Benefits
- Debug Issues Faster: See exactly what users experienced before reporting a bug
- Identify UX Problems: Watch users struggle with confusing interfaces
- Improve Conversions: Understand why users abandon checkout or signup flows
- Validate Changes: Confirm that new features work as expected in production
- Privacy-First: Automatically masks sensitive data like passwords and credit cards
Enabling Session Replay
Step 1: Enable in Dashboard
- Go to Settings → Your Website → Features
- Toggle Session Replay to enabled
- Configure your recording mode (see Trigger Modes)
- Save changes
Step 2: Verify Installation
The tracking script automatically starts recording once enabled. Verify it's working:
- Visit your website
- Perform some interactions (clicks, scrolls, typing)
- Go to Sessions in your Zenovay dashboard
- Your session should appear within 30 seconds
Sessions only appear after being uploaded. Depending on your trigger mode, this may not happen until the session ends or a trigger event occurs.
Trigger Modes
Control when sessions are recorded and uploaded to optimize storage and focus on what matters most.
All Sessions (all)
Records and uploads every session.
Best for:
- Early-stage products needing maximum visibility
- Low-traffic websites
- Testing and QA environments
Configuration:
{
"session_replay_trigger": "all"
}
Errors Only (errors_only)
Always records in background, but only uploads sessions where JavaScript errors occur. Uses retroactive capture to include events leading up to the error.
Best for:
- Production environments with high traffic
- Debugging-focused teams
- Cost-conscious usage
Configuration:
{
"session_replay_trigger": "errors_only"
}
How it works:
- Recording starts immediately in memory buffer
- When an error occurs, buffer is flushed and uploaded
- You get complete context of what happened before the error
Smart Mode (smart)
Intelligently uploads sessions based on multiple signals:
- JavaScript Errors: Any unhandled exception
- Frustration Signals: Rage clicks, dead clicks, form abandonment
- High-Value Visitors: Visitors showing purchase intent or engagement
Best for:
- Balanced coverage without overwhelming data
- Product teams focused on UX optimization
- E-commerce conversion optimization
Configuration:
{
"session_replay_trigger": "smart"
}
Frustration detection includes:
- Rage clicks: 3+ clicks in the same area within 500ms
- Dead clicks: Clicks on non-interactive elements
- Form frustration: Multiple failed form submissions
- Scroll thrashing: Rapid up-down scrolling
Privacy Controls
Session Replay is designed with privacy as a core principle. Sensitive information is automatically protected.
Automatic Masking
By default, Zenovay masks:
- Password inputs (
<input type="password">) - Credit card fields (
<input type="cc-number">, etc.) - Social security numbers
- Email fields (configurable)
- Any element with
data-private
Manual Masking
Add the mask attribute to any element:
<!-- Mask sensitive content -->
<div data-private>
This content will be hidden in replays
</div>
<!-- Mask form field -->
<input type="text" name="ssn" data-private />
Block Recording Entirely
Exclude specific elements or sections from recording:
<!-- Don't record this section at all -->
<div data-private>
<video><!-- Video content not recorded --></video>
</div>
GDPR Compliance
- No cookies required: Session Replay works with first-party data only
- Data minimization: Only DOM changes are recorded, not actual values
- Right to erasure: Sessions can be deleted on request
- Consent integration: Respect visitor consent preferences
See GDPR Compliance for detailed configuration.
Viewing Sessions
Session List
Navigate to Sessions in your dashboard to see all recorded sessions.
Filter by:
- Date range
- Device type
- Country
- Has errors
- Has frustration signals
- Session duration
Sort by:
- Most recent
- Longest duration
- Most errors
- Highest frustration score
Session Player
Click any session to open the replay player.
Player Features:
- Play/Pause: Standard playback controls
- Speed: 1x, 2x, 4x playback speed
- Timeline: Scrub to any point in the session
- Event Markers: See clicks, errors, and frustration events on timeline
- Console: View JavaScript errors that occurred
- Network: See failed API requests (Enterprise)
Keyboard Shortcuts:
Space: Play/Pause←/→: Skip 5 seconds1/2/4: Set playback speedF: Toggle fullscreen
Session Metadata
Each session captures contextual information:
| Field | Description |
|---|---|
sessionId | Unique session identifier |
visitorId | Anonymous visitor ID |
startedAt | Session start timestamp |
duration | Total session length |
pageViews | Number of pages visited |
hasErrors | Whether JS errors occurred |
hasFrustration | Whether frustration signals detected |
viewport | Screen resolution |
device | Device type and model |
browser | Browser name and version |
country | Geographic location |
initialUrl | Entry page URL |
Integration with Error Tracking
When Error Tracking is enabled, session replays are automatically linked to errors.
Error Context
From any error in your error dashboard:
- Click View Session
- Replay opens at the moment the error occurred
- Scrub backwards to see what led to the error
Stack Trace Correlation
Error stack traces are displayed alongside the replay timeline, showing exactly when and where code failed.
Storage & Retention
Data Storage
Session replay data is stored in Cloudflare R2 (S3-compatible storage) with:
- Encryption at rest: AES-256
- Geographic redundancy: Multi-region replication
- Edge caching: Fast playback from nearest location
Retention Periods
| Plan | Retention |
|---|---|
| Pro | 60 days |
| Scale | 120 days |
| Enterprise | 180 days |
Sessions are automatically cleaned up after the retention period.
Performance Impact
Session Replay is designed for minimal impact:
| Metric | Impact |
|---|---|
| Page Load | < 5ms added |
| Memory Usage | ~2-5 MB buffer |
| Network | ~50-100KB per session (compressed) |
| CPU | Negligible (incremental changes only) |
Optimization Tips
- Use appropriate trigger mode:
errors_onlyorsmartfor high-traffic sites - Block heavy elements: Exclude videos, complex animations, iframes
- Sample recording: Use sampling rate for very high traffic
Configuration Reference
Configure session replay via website settings:
{
"feature_flags": {
"enable_session_replay": true,
"session_replay_trigger": "smart",
"replay_sampling_rate": 0.02
}
}
Options
| Option | Type | Default | Description |
|---|---|---|---|
enable_session_replay | boolean | false | Enable/disable recording |
session_replay_trigger | string | "smart" | Trigger mode: "all", "errors_only", "smart" |
replay_sampling_rate | number | 0.02 | Sampling rate (0.02 = 2% of sessions) |
Sampling rate only applies to all mode. errors_only and smart modes capture 100% of triggered sessions.
Troubleshooting
Sessions Not Appearing
- Check feature is enabled: Settings → Features → Session Replay
- Verify trigger mode:
errors_onlywon't upload until an error occurs - Check browser console: Look for Zenovay initialization messages
- Wait for upload: Sessions upload when user leaves page or after 2 minutes
Replay Not Playing
- Check data integrity: Session may have incomplete data
- Try different browser: Some older browsers have playback issues
- Reload the page: Clear browser cache and retry
Privacy Masking Not Working
- Verify attribute syntax: Use
data-private(notdata-mask) - Check parent elements: Masking doesn't inherit from parents
- Inspect DOM: Ensure attribute is present in rendered HTML
API Access
Access session data programmatically via the Sessions API.
List Sessions
GET /api/websites/:websiteId/sessions
Authorization: Bearer YOUR_API_KEY
Get Session Events
GET /api/replay/:sessionId
Authorization: Bearer YOUR_API_KEY
Best Practices
- Start with
smartmode - Get the most valuable sessions without overwhelming storage - Mask aggressively - When in doubt, mask sensitive content
- Review regularly - Schedule weekly session review for UX insights
- Share with team - Use session links to communicate issues
- Combine with analytics - Use quantitative data to find sessions to watch
Next Steps
- Error Tracking - Automatically capture JavaScript errors
- Heatmaps - See aggregate click and scroll patterns
- GDPR Compliance - Configure privacy settings