Solve common session replay and heatmap issues with this troubleshooting guide.
No Recordings Appearing
Check Recording Status
First, verify recording is enabled for the website:
- Open the website in Domains, then open its settings and go to the Advanced tab
- Under the feature toggles, confirm Session Replay is turned on
- If you only want recordings around errors, check the Recording Mode (it can be set to "Only Sessions with Errors" or "Record All Sessions")
Verify Tracking Script
Ensure the script is installed:
- View page source
- Search for "zenovay"
- Verify script loads without errors
Check Console for Errors
Open browser console:
- Right-click → Inspect
- Go to Console tab
- Look for Zenovay errors
Common errors:
| Error | Solution |
|---|---|
| Script not found | Reinstall tracking code |
| CORS error | Check domain configuration |
| Blocked by CSP | Update Content Security Policy |
| Network error | Check internet/firewall |
Plan Limits
Verify your plan includes session replay (Pro plan or higher) and that recordings are within the retention period:
| Plan | Retention |
|---|---|
| Pro | 60 days |
| Scale | 120 days |
| Enterprise | 180 days |
Consent Configuration
If using consent:
- Verify consent is being given
- Check consent integration
- Test with consent granted
Recordings Not Playing
Loading Issues
If playback won't start:
-
Refresh the page
- Clear cache if needed
-
Check internet connection
- Try different network
-
Try different browser
- Chrome recommended
-
Disable extensions
- Ad blockers may interfere
Playback Errors
If you see error messages:
| Error | Solution |
|---|---|
| "Failed to load" | Session may be corrupted |
| "Session expired" | Beyond retention period |
| "Access denied" | Check permissions |
| "Invalid session" | Contact support |
Browser Requirements
Ensure browser supports:
- WebGL
- Modern JavaScript
- Sufficient memory
Visual Glitches
Missing Content
If elements appear blank:
| Cause | Solution |
|---|---|
| Privacy masking | Check mask settings |
| Dynamic content | May load differently |
| Third-party content | Cannot capture cross-origin |
| Lazy loading | May not capture before load |
Incorrect Styling
If styling looks wrong:
-
Font substitution
- Custom fonts may not load
- Fallback fonts used
-
CSS differences
- Some dynamic CSS may differ
- Check for CSS-in-JS issues
-
Responsive issues
- Viewport may differ
- Breakpoint differences
Missing Images
Images may not appear if:
- Served from different domain
- Protected by authentication
- No longer available
Layout Shifts
If layout doesn't match:
- Dynamic content changes
- A/B test variants
- Time-based content
Heatmap Issues
Empty Heatmap
If heatmap shows no data:
-
Check the data volume
- A page needs enough recent traffic before a heatmap is generated
- View it within a time window that actually has visits
-
Verify the page
- Pick the same page (path) that received the traffic
- Query parameters can split traffic across separate URLs
-
Check the heatmap type
- The viewer toggles between Click and Scroll heatmaps
- Switch types to confirm you are looking at the one with data
Inaccurate Click Data
If clicks seem off:
| Issue | Cause |
|---|---|
| Clicks on wrong elements | Viewport differences |
| Clustered incorrectly | Responsive layout changes |
| Missing clicks | Sampling or limits |
Scroll Data Missing
If scroll heatmap empty:
- Verify scroll events captured
- Check page length
- Confirm JavaScript running
Performance Issues
Slow Playback
If playback is choppy:
-
Reduce playback speed
- Try 0.5x or 1x
-
Close other tabs
- Free up memory
-
Check network speed
- Buffering may occur
-
Try a different browser
- Chrome often fastest
High Resource Usage
If consuming too much CPU/memory:
-
Skip to relevant sections
- Don't play entire session
-
Close event panel
- Reduces rendering
-
Disable animations
- In settings if available
Site Performance Impact
If recording affects your site:
-
Reduce recording scope
- Add heavy or sensitive pages to Excluded Routes in Settings → Advanced
- Set Recording Mode to "Only Sessions with Errors" so sessions are captured only when something goes wrong
-
Monitor metrics
- Check Core Web Vitals
- Compare with recording off
Data Accuracy Issues
Session Count Mismatch
If counts don't match analytics:
| Reason | Explanation |
|---|---|
| Sampling | May sample on high traffic |
| Consent | Not all users consented |
| Ad blockers | Block recording script |
| Page types | Some pages excluded |
Duration Differences
If duration seems wrong:
- Idle time may be skipped
- Tab switching affects timing
- Background tabs may pause
Click Count Variance
Click counts may differ from analytics:
- Heatmaps may sample
- Different click definitions
- Viewport/element matching
Configuration Issues
Masking Too Aggressive
Masking is controlled by two toggles on the website's Settings → Advanced tab:
- Mask All Input Fields (on by default) replaces what visitors type with placeholders.
- Mask Text Content masks visible page text as well.
If too much is hidden, turn off Mask Text Content so regular page copy is captured while input values stay masked.
Masking Not Working
If sensitive data is still visible in a recording:
- Confirm the masking toggles are on in Settings → Advanced. Mask All Input Fields should be enabled.
- Re-record after saving. Masking applies to new recordings, so existing recordings keep the masking that was in effect when they were captured.
- Keep sensitive pages out of replay entirely. Add them to Excluded Routes (see below) if they should never be recorded.
Excluded Pages Recording
Pages you do not want recorded are listed under Excluded Routes in Settings → Advanced (one path per line). If an excluded page still appears:
- Check that the path matches the page's URL path
- Confirm you saved the change
- Remember that exclusions apply to new recordings, not ones already captured
Integration Issues
Consent Manager Conflicts
If not integrating properly:
-
Check timing
- Consent before recording
-
Verify events
- Consent signals firing
-
Test manually
- Grant consent, check recording
Single Page Apps
The tracking script handles SPA route changes automatically (it listens for History API navigation), so no extra setting is required. If a single-page app still misbehaves:
| Issue | What to check |
|---|---|
| Page changes not captured | Confirm the script loads once on initial render and is not re-injected on every route change |
| Duplicate sessions | Make sure the script tag is included only once in your app shell |
| Missing navigation | Verify your router uses the standard History API (pushState) so route changes can be detected |
Third-Party Scripts
Conflicts with other tools:
- Check for script conflicts
- Verify load order
- Test in isolation
Data Recovery
Lost Sessions
Unfortunately:
- Deleted sessions cannot be recovered
- Expired sessions are permanently removed
- Export before retention ends
Corrupted Sessions
If sessions appear corrupted:
- May be partial upload
- Network interruption during capture
- Contact support with session ID
Getting Help
Information to Provide
When contacting support:
- Session ID (if specific session)
- Page URL affected
- Browser and version
- Error messages
- Steps to reproduce
- Screenshots/recordings
Support Channels
- In-app chat
- [email protected]
- Help center tickets
Debug Mode
Enable debug logging by adding data-debug to your script tag:
<script defer
src="https://api.zenovay.com/z.js"
data-tracking-code="YOUR_TRACKING_CODE"
data-debug="true">
</script>
Check console for detailed logs.
Preventive Measures
Regular Testing
Test recording periodically:
- After site updates
- After tracking changes
- After consent updates
Monitoring
Set up alerts for:
- Recording count drops
- Error rate increases
- Performance changes
Documentation
Keep records of:
- Configuration changes
- Exclusion rules
- Known issues