How to read this checklist
A privacy configuration is not one switch. It is a combination of controls with different purposes.
| Control type | What it addresses | Examples |
|---|---|---|
| Technical privacy control | Reduces, transforms, or prevents collection of data | Route exclusion, masking, blocking, sampling, URL normalization |
| Security control | Protects replay data that is retained | Role-based access, multifactor authentication, audit logs, secure storage |
| Organizational policy | Governs why and how people use replay | Purpose record, approved roles, review procedure, retention owner |
| Legal requirement | Creates an obligation under an applicable law or regulation | Transparency, legal basis, rights handling, processor terms |
| Recommendation | Provides a conservative implementation starting point | Disable network bodies by default; inspect stored output before release |
| Jurisdiction-dependent question | Requires analysis of the organization, users, technology, and location | Consent, employee monitoring, sensitive-data processing, notification duties |
A technical control may help satisfy a legal obligation, but the control is not itself a legal conclusion. Likewise, masking sensitive text does not remove the need for authorization, retention, deletion, notice, or legal review.
Why session replay requires special attention
A standard analytics event might state that a user opened a report or completed a setup step. Session replay can provide much richer evidence. Depending on the tool and configuration, a replay system may capture, derive, or reconstruct combinations of:
- page content and visual structure;
- form fields and changes to them;
- clicks, scrolling, pointer movement, touch interaction, and keyboard-related events;
- the sequence of pages and product areas visited;
- URL paths, query parameters, and fragments;
- user, account, workspace, or project identifiers;
- timestamps, duration, viewport, browser, and device context;
- page titles, referrers, element attributes, and event properties;
- console messages and JavaScript errors;
- network URLs, headers, request bodies, response bodies, or GraphQL variables;
- application state exposed in the DOM or telemetry;
- canvas, media, iframe, or rich-text content; and
- recordings connected to identified users and customer companies.
The exact capture depends on the product, SDK, enabled plugins, browser environment, and configuration. Some systems reconstruct the page from DOM snapshots and incremental changes; others may use screenshots or additional observability channels. A team must inspect its own implementation rather than assume that a generic description applies.
The risk also comes from combination. A company name may be ordinary account metadata. A page path may be ordinary product telemetry. A timestamp and a sequence of actions may be ordinary behavioral data. Combined with a name, email address, support message, report title, or account role, those fields can form a detailed record of what an identifiable person did inside a confidential customer workspace.
That richer context is why replay can be useful—and why session recording privacy needs more than a password-field masking rule.
Begin with a documented purpose
Do not enable replay and decide what it is for later. Start with a product question that can be answered more effectively with session evidence than with lower-context analytics alone.
Reasonably specific questions include:
- Why did measured workflow completion fall after a release?
- How do successful and unsuccessful onboarding Visits differ?
- What visible interface state preceded a reproducible defect?
- Where do selected users abandon a setup workflow?
- Does session evidence support or contradict a product hypothesis?
- Which part of a grouped page appears to create repeated navigation changes for a defined account segment?
These questions have a population, scope, decision, and end point. They can be investigated with a constrained set of sessions.
Vague purposes are harder to justify and govern:
- Capture everything in case it becomes useful.
- Monitor customers or employees continuously.
- Keep every recording indefinitely.
- Let anyone in product, engineering, or support browse identified users.
- Collect all available telemetry because the SDK supports it.
- Use replay as a substitute for a defined research plan.
Before rollout, create a purpose record containing at least:
| Decision | What to document |
|---|---|
| Purpose | The exact product, support, reliability, or research question |
| Population | Which users, accounts, segments, environments, or sessions are in scope |
| Included pages | The routes, grouped pages, or product areas needed for the question |
| Excluded pages | Sensitive, irrelevant, administrative, or unrelated workflows |
| Data categories | The replay events, metadata, identity fields, and optional telemetry retained |
| Retention | The default expiry and the reason it is long enough |
| Authorized roles | Who may search, view, export, share, or delete recordings |
| Research workflow | How sessions are selected, reviewed, documented, and closed |
| Deletion process | How data is located and removed or anonymized across each storage layer |
| Owner | The person responsible for configuration, review, and production monitoring |
| Review trigger | The date or product change that causes reassessment |
| Legal review | Whether counsel, a privacy team, or a formal impact assessment is required |
This record should be approved before production capture begins. If the purpose changes, reassess the capture configuration rather than silently extending the old data to a new use.
Inventory the data before choosing masking rules
The following inventory is a review worksheet, not a claim that every replay tool captures every category. Mark each category as technically impossible, disabled, allowed, masked, blocked, excluded, or still unverified for the actual implementation.
Review worksheet
| Data category | Example | Why it may be captured | Potential risk | Conservative default control | Verification method |
|---|---|---|---|---|---|
| Rendered text | Report titles, table cells, validation messages | DOM text may be serialized to reconstruct the page | Customer content, confidential labels, or personal data becomes visible | Mask account-specific text; allowlist only demonstrably safe labels | Inspect the stored replay across static and dynamic states |
| Text inputs | Search terms, form responses, notes | Input events may be needed to show workflow progression | Users can enter unexpected personal data or secrets | Mask all inputs first, then selectively allow only low-risk fields | Test every input type with synthetic canary values |
| Password fields | Login or confirmation password | Input handling may be instrumented by the SDK | Credential exposure | Exclude the workflow or block the element; retain password masking as defense in depth | Inspect stored events and replay; verify no raw value leaves the browser |
| Payment information | Card number, bank details, billing address | Billing forms may share application components | Financial harm and additional regulatory or contractual obligations | Exclude billing and payment routes rather than relying on masking | Test route entry, embedded payment frames, errors, and navigation transitions |
| Authentication tokens | /reset-password?token=... | Tokens may appear in URLs, DOM text, hidden fields, logs, or errors | Account takeover | Remove tokens from URLs and telemetry; exclude authentication workflows | Search stored URLs, metadata, console events, and network payloads using synthetic tokens |
| Personal identifiers | Customer number, employee ID, government identifier | Identity context may support search or debugging | Direct or indirect identification | Omit unless necessary; pseudonymize stable product IDs; exclude government identifiers | Inspect identity payloads, indexes, exports, and replay search UI |
| URLs, query parameters, and fragments | /reset-password?token=... | SDKs often capture navigation context separately from page text | Secrets, names, search terms, or account context leak outside masking | Normalize paths; strip or allowlist query fields and fragments before transmission | Review raw stored URL fields, not only the visible address bar |
| Uploaded filenames | Acquisition-targets.xlsx | File controls and rendered upload lists expose names | Confidential project or customer information | Block file controls and filename displays; keep only a safe upload event if needed | Test drag-and-drop, file pickers, progress UI, errors, and history |
| Account names | Customer or workspace names | B2B analytics links activity to companies | Commercial confidentiality and re-identification | Use stable internal account IDs; mask names in replay unless directly necessary | Inspect recording metadata and account-switching states |
| User names and emails | [email protected] | Identified replay improves support or research search | Direct identification and broad employee visibility | Do not use email as the primary identifier; restrict direct identifiers | Inspect SDK identify calls, session metadata, search, exports, and access logs |
| Support messages | Ticket text, chat transcript, internal note | Support interfaces may be part of the product | Confidential communications and customer secrets | Exclude the route or block the entire message surface | Test composers, transcripts, attachments, previews, and notification popovers |
| Health or financial information | Diagnosis note, salary, bank balance | Vertical SaaS products may render sensitive records | High-impact or specially regulated processing | Exclude the relevant product areas unless a reviewed use is demonstrably necessary | Use synthetic data and confirm no replay or secondary telemetry is retained |
| API keys and secrets | API key, webhook secret, private token | Developer pages may display or copy credentials | System compromise | Exclude the entire workflow; never depend only on text masking | Test generation, reveal, copy, rotation, error, and confirmation states |
| DOM attributes | data-email, aria-label, title, custom IDs | Replay reconstruction may serialize attributes | Hidden identifiers or text bypass visible-content masking | Remove sensitive data from attributes; use an attribute allowlist where supported | Inspect serialized snapshots or exported replay payloads |
| Console logs and errors | Logged user object, failed request payload | Optional observability integration may capture console output | Secrets and personal data can bypass visual masking | Disable by default; sanitize at source; allowlist only a documented subset | Trigger known logs and inspect the stored console channel |
| Network requests or responses | Headers, JSON body, GraphQL variables | Optional replay or observability features may aid debugging | Credentials, messages, forms, and entire records may be copied | Disable bodies by default; allowlist minimal metadata; redact before capture | Test all enabled methods and inspect stored request and response data |
| Canvas and media | Chart labels, document preview, screen image | Some SDKs optionally record canvas or media content | Content may bypass DOM masking rules | Disable capture unless necessary; block or exclude sensitive surfaces | Inspect the replay in every canvas and media state |
| Clipboard-related interaction | Paste into a token field or copy from an API-key view | A tool or custom event may observe paste or copy behavior or resulting input | Raw clipboard content or secret values may be retained | Do not collect clipboard content; record only a safe categorical action when justified | Test copy, cut, paste, context menus, keyboard shortcuts, and resulting fields |
The inventory should include every route and component, not only top-level pages. A page considered safe may open an account-specific modal, render a filename in a toast, place an email address in an accessibility attribute, or expose a token in an error message.
Minimize capture before applying redaction
The strongest privacy control is not collecting data that the investigation does not need.
Use capture minimization to:
- Record only selected product areas or an explicit route allowlist.
- Exclude billing, authentication, administrator, secret-management, private-document, employee-record, and other high-risk sections.
- Capture only sessions needed for a defined investigation rather than every session.
- Use sampling when a representative subset is sufficient.
- Trigger recording around a defined condition, such as a selected workflow or reproducible error, when the implementation supports it.
- Reduce captured event types and sampling frequency.
- Avoid network request and response bodies.
- Avoid console logs unless a documented debugging question requires them.
- Omit identity properties that are not required for selection or follow-up.
- Disable recording in anonymous or unauthorized contexts where appropriate.
- Stop recording before the user enters a protected workflow.
- Retain structured analytics events without retaining a full replay when aggregate evidence is enough.
Collection-time minimization is stronger than depending entirely on later redaction. If a raw value reaches an ingestion endpoint or storage layer before the viewer masks it, the organization still has to secure, retain, delete, and account for that value. Ask whether each control operates:
- in the browser before transmission;
- at the ingestion edge;
- during storage;
- during indexing; or
- only when the replay is displayed.
Viewer-only redaction is an access-presentation control. It is not equivalent to preventing collection.
Masking, blocking, exclusion, and allowlisting
These terms are often used inconsistently between replay products. Confirm the exact semantics in the selected SDK and test the outcome.
| Control | Meaning | Best use | Important limitation |
|---|---|---|---|
| Masking | Replace text or a value while preserving enough structure to reconstruct the interaction | Low- to medium-risk fields where layout or completion state matters | The raw value may still be transmitted or stored if masking occurs late |
| Blocking | Do not capture or render the selected element or its content; a same-size obscured region may remain | Tables, message bodies, document previews, rich editors, account-specific panels | Descendant content, popovers, portals, or related metadata may need separate rules |
| Excluding | Do not record a page, route, workflow, user group, environment, or session | Billing, API keys, authentication, sensitive records, and irrelevant areas | Recording must stop before protected content appears, including transitions |
| Allowlisting | Record only explicitly approved routes, elements, attributes, or metadata | Products where most content is account-specific or high risk | The allowlist must be maintained as the application evolves |
Input fields
Start by masking every input rather than trying to predict where users may type sensitive data. Review:
- text, email, password, search, number, date, and hidden inputs;
- textareas;
contenteditableelements;- custom select, combobox, and autocomplete components;
- rich-text editors;
- payment widgets;
- pasted content; and
- validation messages and value previews.
An input labeled “Project name” can still receive a person’s name, contract term, or customer secret. Field labels describe intended use, not actual content.
Rendered text and account content
Rendered text can contain more sensitive information than form inputs. Review tables and lists, report names, workspace and account names, user names and email addresses, saved searches, dashboard cards, modal dialogs, toast notifications, inline errors, imported data, comments and messages, and empty states that echo prior input.
A “mask all inputs” setting does not protect text that the application later renders elsewhere.
Dynamic components
Masking and blocking rules must cover content rendered after the initial page snapshot. Test client-side route changes, lazy-loaded components, virtualized tables, dropdown menus and popovers, modals rendered through portals, error boundaries, notification centers, account switchers, permission changes, and temporary loading and authentication states.
Do not assume a selector applied at initial page load will permanently protect a changing component tree.
Shadow DOM, iframes, canvas, and rich media
These surfaces require explicit testing:
- Selector behavior may differ inside open or closed shadow roots.
- A cross-origin iframe has a separate origin boundary, and replay support may require separate instrumentation.
- Embedded payment or support widgets may have their own data flows and processor relationships.
- Canvas content can contain chart labels, document previews, signatures, or other data that ordinary DOM-text masking does not cover.
- Rich-text editors may store content across nested DOM nodes, hidden structures, or application state.
- Media and screen images can expose content even when text nodes are masked.
For example, rrweb documents separate options for blocking, ignoring input events, masking text, masking inputs, recording canvas, recording cross-origin iframes, sampling, and plugins. That separation is a useful reminder: one default does not govern every data channel. It is an implementation example, not a guarantee about every rrweb version or every product built with it.
Filenames, errors, and temporary states
Uploaded filenames may appear in a native file input, a drag-and-drop zone, progress toast, validation error, attachment list, or recent-activity panel. Authentication codes may appear briefly in a confirmation component. An API key may be visible only after creation. Account data may be rendered for a fraction of a second while permissions update.
Replay captures state over time. Test every temporary state, not only the final settled page.
Exclude or strongly protect high-risk content
The conservative starting point is to exclude workflows that can contain:
- passwords;
- authentication and recovery codes;
- session tokens;
- API keys, webhook secrets, and private credentials;
- payment-card information;
- bank and financial details;
- health information;
- government identifiers;
- confidential customer communications;
- private documents and document previews;
- customer secrets;
- employee records;
- administrator impersonation workflows; and
- security settings that reveal recovery or access information.
The exact handling must reflect the product, sector, user population, contracts, and applicable law. The existence of a masking feature is not a reason to collect these categories. For many high-risk workflows, route exclusion plus structured analytics is safer and still answers the product question.
An API Keys page, for example, may retain a safe event such as “key-creation workflow completed” without retaining the page reconstruction, generated key, clipboard content, or error payload.
Protect URLs and metadata separately
Masking page text does not automatically protect URL paths, query parameters, URL fragments, page titles, referrers, DOM attributes, uploaded filenames, account identifiers, search terms, element labels, analytics event properties, replay names, or tags.
Unsafe URL designs include:
/reset-password?token=...
/customers/[email protected]/
/search?q=confidential-customer-nameA fragment can also contain sensitive state visible to client-side code even though fragments are not sent in the ordinary HTTP request:
/oauth/callback#access_token=...Secrets should not appear in URLs in the first place. URLs are frequently copied into browser history, logs, monitoring systems, support messages, referrers, and replay metadata.
Safer approaches include:
- normalize dynamic paths before transmitting them;
- replace raw record identifiers with route templates such as
/customers/:customer_id/reports/:report_id; - remove all query parameters by default and allowlist only those required for the analytical purpose;
- strip secrets and personal data before the replay SDK can read or transmit them;
- avoid putting names or email addresses in path segments;
- use stable, non-sensitive internal IDs when a relationship must be retained;
- review page titles and route names;
- remove sensitive values from
data-*,title,aria-label, and custom attributes; - avoid sending raw search terms unless the exact term is necessary and reviewed;
- store a safe categorical event such as
search_submittedinstead of the query text; and - test redirects, error pages, account switching, and deep links.
URL normalization should occur before the value enters the replay pipeline. Replacing the URL only in the replay viewer leaves other copies unresolved.
Treat console and network capture as separate systems
Some replay and observability products optionally capture console messages, uncaught exceptions, JavaScript error details, network URLs, request methods and status codes, request and response headers or bodies, and GraphQL operation names and variables.
These channels can contain sensitive data even when visible page content is masked. A developer may log an entire user object. A failed form request may include every submitted value. A GraphQL request may use one harmless-looking endpoint while its variables contain names, messages, or financial data.
Use disabled-by-default handling unless there is a documented need.
When network context is necessary, prefer an explicit allowlist of lower-risk metadata such as:
- normalized endpoint category;
- HTTP method;
- status class;
- duration;
- safe error category; and
- GraphQL operation name without variables.
Do not collect Authorization, Cookie, Set-Cookie, session tokens, CSRF tokens, API keys, or equivalent secrets. Review whether request headers, query strings, error objects, and response previews are captured by default or through a plugin.
Sanitize console output in the application itself. A replay-specific filter should be defense in depth, not permission to leave secrets or personal data in production logs.
Minimize identified-user and account context
Connecting replay to a user and company makes B2B investigation more useful. It also increases privacy impact because employees can move from an account-level signal to an identifiable person’s behavior.
Potential identity fields include user ID, name, email, company or workspace, account ID, plan, role, lifecycle stage, account owner, and custom account attributes.
Use stable internal IDs rather than email addresses as primary identifiers. Email addresses change, expose direct identity, and are often copied into URLs, search indexes, and exports.
Recommended controls include:
- collect the minimum identity fields required for the investigation;
- use pseudonymous user and account IDs in replay metadata;
- keep the mapping to direct identifiers in a separately controlled system;
- avoid duplicating company attributes into each replay unless required;
- restrict access to names and email addresses more tightly than aggregate account analytics;
- separate permission to view account-level analytics from permission to open identified replays;
- audit access to identified sessions; and
- support deletion or pseudonymization by stable identifiers.
Apply least privilege to replay access
Masking does not remove the need for access control. Replay data remains rich behavioral evidence even when obvious text is hidden.
A production access model should cover:
- role-based access and least privilege;
- separate permissions for product, UX research, support, security, and engineering;
- server-side authorization for every replay request;
- single sign-on and multifactor authentication where appropriate;
- time-limited or investigation-specific access;
- production and non-production environment separation;
- audit logs for search, view, export, share, unmask, and delete actions where supported;
- session-level access logging for identified recordings;
- periodic permission reviews;
- employee offboarding and role-change procedures;
- controls on vendor support access; and
- approval for exports or clips.
An opaque or hard-to-guess replay URL is not authorization. The application must validate the viewer’s permission on every request.
Avoid public or broadly shared replay links. A copied URL should not continue to expose a recording after the viewer loses access, leaves the organization, or switches to a different customer account.
Support teams may need access to a recording tied to a specific customer request. That does not justify unrestricted browsing of every account. Use scoped, case-linked, and time-limited access where the product supports it.
Set purpose-based retention
Replay usually contains more context than a low-cardinality analytics event. Its retention should therefore be shorter and more deliberate than indefinite raw analytics retention.
Do not begin by choosing a popular number of days. Use a retention decision process:
- Restate the purpose and the decision that replay supports.
- Estimate when relevant sessions become too old to answer that question.
- Add only the review time genuinely required by the team.
- Set automatic expiry at the shortest workable period.
- Define whether different projects, environments, or workflows require different rules.
- Document any investigation hold, who can approve it, and when it expires.
- Map every replay copy and index covered by deletion.
- Reassess the period after the first investigation cycle.
- Review retention when the purpose or legal requirements change.
Consider separately raw replay events or snapshots, compressed replay objects, search and metadata indexes, account and user associations, cached copies, generated clips, exports, annotations and derived findings, replicas, and backups.
A derived product finding may be useful after a raw replay expires, but it should contain only the minimum evidence needed and follow its own retention policy. Do not preserve screenshots or copied text in a research note merely to bypass replay expiry.
Backups require a documented policy. Depending on the architecture, immediate item-level deletion may not be technically possible in immutable backup sets. Define when deleted data becomes unavailable to ordinary use, how restoration procedures avoid reintroducing it, and when backup copies expire or are securely replaced.
Design deletion and data-subject workflows before launch
The system should be able to locate replay data by the identifiers actually used in support, privacy, and account-management processes. Depending on the product, that may include user ID, account or company ID, session or Visit ID, project ID, workspace ID, and date range.
Deletion or anonymization design should cover primary replay storage, event and metadata indexes, account and user lookup tables, caches, replicas, exports, generated clips, research attachments, and backups according to the documented backup policy.
Test the complete workflow with a synthetic account:
- Create a synthetic user, account, and Visit.
- Record a replay containing recognizable but non-sensitive canary values.
- Confirm that the replay is discoverable through each intended lookup key.
- Execute the deletion or anonymization workflow.
- Verify the recording no longer appears in the application, API, search index, export path, or clip store.
- Confirm how the backup policy applies.
- Record the result and any known limitation.
Whether a particular request legally requires deletion, restriction, access, or anonymization depends on the applicable law, roles, exemptions, and context. The technical workflow should make the relevant action possible; qualified privacy or legal counsel should determine how a specific request must be handled where necessary.
Treat consent, notice, and lawful basis as legal-review questions
There is no universal “session replay GDPR compliant” switch. Legal requirements can depend on:
- the countries and people involved;
- whether the product stores information on or accesses information from a user’s device;
- the specific replay technology;
- the purposes of collection and later use;
- whether the data identifies or can be linked to a person;
- whether sensitive or special-category data is involved;
- whether the user is a customer employee, the organization’s own worker, a contractor, or another person;
- controller, processor, and subprocessor roles; and
- contracts, sector rules, and communications laws.
An authenticated B2B product is not automatically outside privacy or communications law. A contract with the customer company does not necessarily answer the rights and expectations of each user. A privacy notice does not itself create a lawful basis, and contractual notice alone may not satisfy every consent or transparency requirement.
In some jurisdictions, rules governing storage or access on a device are a separate question from the legal basis for processing the resulting personal data. Consent requirements and exceptions vary. Do not state that consent is always required or that authenticated-product replay is always exempt.
For example, the UK Information Commissioner’s Office finalized its Guidance on the use of storage and access technologies on April 29, 2026. The guidance says prior consent is required when no purpose-specific exception applies. Its statistical-purpose exception is narrow: it does not cover logs or recordings of individual visitors and their actions outside the guidance’s security caveat, and qualifying statistical use must produce aggregate, non-identifying results and meet information and objection conditions. This is UK-specific regulator guidance, not a universal rule.
Organizations should consider:
- a clear and specific purpose;
- an appropriate legal basis where applicable;
- transparent privacy and tracking notices;
- an accurate description of the replay data and purposes;
- consent collection and recording where required;
- an equally usable refusal or withdrawal path where required;
- configuration that matches the stated purpose;
- whether a privacy or data-protection impact assessment is required or prudent;
- additional restrictions for sensitive data;
- different rules and expectations for employee monitoring;
- processor agreements, subprocessors, transfers, and support access;
- a workflow for individual rights; and
- periodic legal review.
Avoid dark patterns. Do not describe replay as essential to a service merely to discourage refusal unless that conclusion is accurate and legally supported.
On February 25, 2026, the French CNIL opened a public consultation on a draft recommendation for session replay tools. The consultation closed on April 22, 2026. As of August 4, 2026, CNIL’s official material remains labeled as a draft; the draft says it is non-exhaustive and is not binding or regulatory. It addresses purpose definition before deployment, minimization, masking, identifier controls, configurable retention, deletion, access control, and security. Treat it as jurisdiction-specific draft regulator guidance, not binding legislation or universal law.
Review managed vendors and self-hosted infrastructure
A managed replay vendor and a self-hosted deployment create different responsibilities. Neither model removes the need for privacy engineering, security, governance, and legal review.
Managed-vendor review
Verify:
- data-processing terms and the parties’ roles;
- the subprocessor list and change process;
- data locations and transfer arrangements;
- client-side, ingestion-time, storage-time, and viewer-time masking behavior;
- default capture settings;
- route, selector, field, attribute, event-property, URL, console, and network controls;
- encryption statements and their exact scope;
- authentication, authorization, audit, SSO, and multifactor options;
- vendor employee and support access;
- retention configuration;
- deletion behavior for primary storage, indexes, clips, exports, and backups;
- breach-notification terms;
- export and migration capability;
- behavior at contract termination;
- SDK and dependency update process; and
- documented technical limitations.
A vendor’s statement that sensitive inputs are masked does not answer whether URLs, rendered text, console output, or network bodies are retained. Review each channel separately.
Self-hosted review
Verify:
- ingestion authentication and transport security;
- network exposure;
- object-storage permissions;
- database and cache permissions;
- encryption appropriate to the risk and architecture;
- secret management;
- production and non-production separation;
- role-based access and auditability;
- backup design and restoration testing;
- dependency and SDK updates;
- patching responsibility;
- monitoring and alerting;
- incident-response ownership;
- data-location and residency decisions;
- retention jobs;
- deletion completeness;
- capacity controls and failure behavior; and
- contract and rights workflows for any downstream providers.
Self-hosting gives the organization control over deployment, storage, retention, and operations. It also makes the organization responsible for configuring and operating those controls. Data custody is an architectural choice, not a privacy, security, or compliance outcome by itself.
Test the stored replay before rollout
A masking configuration is not validated until the team has inspected what the system actually retained.
- Build production-like test pages using synthetic sensitive values only.
- Test every input type, including custom components and
contenteditable. - Test static text and dynamically rendered content.
- Test tables, modals, menus, tooltips, toasts, and errors.
- Test query parameters, fragments, redirects, page titles, and referrers.
- Test uploaded filenames and attachment previews.
- Test shadow DOM components, iframes, canvas, media, and rich-text editors.
- Test console and network-capture settings separately.
- Inspect the stored replay and its raw metadata rather than only the live page.
- Test multiple supported browsers and viewport sizes.
- Test account switching, impersonation, permission changes, and logout.
- Test replay authorization and access logs with several employee roles.
- Test account, user, Visit, and project deletion.
- Document every known limitation and its compensating control.
- Block the release if a synthetic secret or protected value remains visible or retrievable.
Use recognizable canary values such as:
[email protected]
RESET_TOKEN_DO_NOT_CAPTURE
API_KEY_PRIVACY_CANARY
CONFIDENTIAL_REPORT_TITLE_TESTNever test with production credentials or real personal data.
A useful release artifact is a privacy test matrix containing the component or route, expected control, synthetic value, browser, stored result, pass or fail, evidence link, owner, date, and replay SDK version.
Monitor for privacy regressions
A replay configuration that worked last quarter can fail after an ordinary product change. Reassess controls after interface redesigns, component-library changes, route and URL changes, new form fields or table columns, new error states, third-party widget additions, replay SDK upgrades, new plugins or product areas, account-switching changes, console or network options, masking-rule edits, and retention or storage changes.
Maintain automated fixtures containing synthetic canary values for common sensitive categories. Where the replay platform permits it, run those fixtures in a controlled environment and inspect the stored output. Automated checks should complement, not replace, periodic manual review by authorized people.
Track at least:
- date of the last privacy test;
- SDK and configuration version;
- routes covered and excluded;
- unresolved limitations;
- deletion-test result;
- access-review result; and
- owner and next review date.
Treat masking rules as maintained production code. Review them with the same discipline as authorization logic, data schemas, and API contracts.
Prepare for accidental capture
If replay captures data that should not have been collected:
- Disable or narrow the affected capture immediately.
- Restrict access to the affected project and recordings.
- Identify the relevant projects, sessions, users, accounts, routes, and date range.
- Delete or quarantine affected data from each applicable storage and index layer.
- Preserve only the security evidence necessary to investigate the incident.
- Assess legal and contractual obligations with the responsible privacy, security, and legal teams.
- Notify relevant internal owners and the vendor when appropriate.
- Fix the collection, masking, route, or telemetry rule.
- Retest the stored result before re-enabling capture.
- Document the incident, decision, root cause, and preventive changes.
Do not assume that every accidental capture is legally reportable, or that none is. Notification duties and deadlines depend on the jurisdiction and facts. Obtain qualified advice rather than relying on a generic article.
Worked B2B example: narrowing replay to a reporting investigation
The situation
AtlasDesk is a fictional B2B operations platform with five product areas: Reporting, User Management, Billing, API Keys, and Support Messages.
The product team sees a measured decline in completion of a new Reporting setup workflow. Aggregate analytics identify the affected step and account segment, but they do not explain the visible interface state. The team proposes session replay to compare successful and unsuccessful Visits.
Its purpose is not “understand all customer behavior.” It is:
Determine whether a visible interaction or application state in the Reporting setup workflow helps explain the measured completion decline for newly invited account administrators.
The purpose record
Illustration only
| Field | Illustrative decision |
|---|---|
| Purpose | Compare successful and unsuccessful Reporting setup Visits |
| Population | Newly invited account administrators entering the selected Reporting workflow |
| Included area | Reporting setup routes only |
| Excluded areas | Billing, API Keys, Support Messages, authentication, and impersonation |
| Identity | Pseudonymous internal user and account IDs |
| Captured context | Route template, DOM structure, clicks, scroll, step transitions, coarse browser and viewport context |
| Disabled context | Console output, network headers, request bodies, response bodies, GraphQL variables, raw search terms |
| Replay retention | 30 days for this investigation, followed by automatic deletion; this is an illustrative decision, not a recommended universal period |
| Structured analytics retention | Managed under the product’s separate, lower-context analytics policy |
| Access | UX researchers and specifically assigned engineers; no default support-team access |
| Deletion keys | User ID, account ID, Visit ID, project ID, and date range |
| Owner | Product privacy owner with engineering support |
| Review trigger | End of investigation, route redesign, or replay SDK change |
Control decision by product area
| Product area | Capture decision | Implementation |
|---|---|---|
| Reporting | Allowlisted for the defined investigation | Normalize routes, pseudonymize account and user IDs, mask account-specific report names, block report data cells and export previews |
| User Management | Limited capture only where it forms part of onboarding | Mask names and emails; block user tables and profile drawers; exclude invitation-token, password-reset, and impersonation states |
| Billing | Excluded | Stop recording before route entry; retain only reviewed structured workflow events if required |
| API Keys | Excluded entirely | Do not record generation, reveal, copy, rotation, or deletion; retain only a safe structured completion event where justified |
| Support Messages | Excluded or fully blocked | Do not capture message bodies, rich-text editors, filenames, attachments, notification previews, or internal notes |
Global rules:
/accounts/acme-corp/reports/8392?customer=confidential-namebecomes a safe route template such as/accounts/:account_id/reports/:report_id.- Query parameters and fragments are dropped unless explicitly allowlisted.
- Account and user names are not attached to the replay.
- Email addresses are not used as replay identifiers.
- Console capture is disabled.
- Network bodies and headers are disabled.
- Replay links require server-side authorization.
- Access to an identified Visit is logged.
- Deletion is tested against the replay store, metadata index, generated clips, and exports.
- Backup handling follows the documented backup policy.
Before and after
| Before review | After privacy-by-design review |
|---|---|
| Replay SDK enabled across the authenticated application | Route allowlist limited to the Reporting investigation |
| Every signed-in session recorded | Only the defined population and sampled Visits recorded |
| “Mask all text” treated as the complete privacy strategy | Route exclusion, element blocking, targeted masking, identity minimization, and separate telemetry controls |
| Full URLs retained | Paths normalized and query parameters removed |
| Email and company name attached to sessions | Stable pseudonymous user and account IDs |
| Console and network bodies enabled for debugging | Both disabled; safe structured error categories retained separately |
| Support agents could browse all recordings | Access limited to named researchers and assigned engineers |
| No automatic expiry | Purpose-based 30-day expiry for this fictional investigation |
| Deletion removed only the replay object | Deletion verified across storage, indexes, clips, exports, and documented backup behavior |
Why masking every text node was not enough
A global text mask would hide much of the visible interface, but it would not necessarily protect the customer name in a URL, an email address attached as session metadata, a report identifier in a DOM attribute, a support message in a network response, a user object printed to the console, a document preview rendered to canvas, an uploaded filename in a toast, or an API key displayed in a temporary state. It would not limit broad internal access, set retention, or complete deletion from indexes and exports.
The team therefore treats masking as one layer. Scope, exclusion, metadata, identity, access, retention, deletion, and production testing provide the rest of the control system.
Production session replay privacy checklist
Use this session replay privacy checklist as an implementation review. A checked box should be backed by configuration, test evidence, or an approved policy—not an assumption.
Purpose and scope
- A specific analytical, product, support, or reliability purpose is documented.
- The decision that replay will inform is stated.
- The population, segments, accounts, users, and environments are defined.
- Included routes and product areas are listed.
- Excluded routes and product areas are listed.
- A lower-context alternative was considered.
- A responsible owner and review date are assigned.
- The need for a privacy or legal assessment has been evaluated.
Data minimization
- Capture begins from an allowlist rather than the entire application where practical.
- Only the sessions needed for the defined purpose are recorded.
- Sampling or purpose-specific triggers are used where sufficient.
- Unnecessary event types are disabled.
- Unnecessary identity properties are omitted.
- Anonymous or unauthorized contexts are disabled where appropriate.
- Recording stops before protected workflows.
- Structured analytics is retained without full replay where it answers the question.
Masking and exclusion
- All input types have an explicit rule.
- Rendered account-specific text has been reviewed.
- Passwords, tokens, payment data, API keys, and equivalent secrets are excluded or blocked.
- Sensitive tables, messages, documents, and previews are blocked or excluded.
- Dynamic content, portals, modals, menus, and toasts are covered.
- Shadow DOM, iframes, canvas, media, and rich-text behavior is verified.
- Uploaded filenames and error messages are tested.
- The team knows whether masking occurs before transmission, at ingestion, at storage, or only in the viewer.
- No single selector is treated as a permanent guarantee.
URLs and metadata
- Dynamic routes are normalized before replay transmission.
- Query parameters are removed by default or explicitly allowlisted.
- URL fragments are reviewed.
- Tokens, emails, names, and search terms do not appear in URLs.
- Page titles and referrers are reviewed.
- Sensitive values are removed from DOM attributes.
- Event properties and replay tags have a documented allowlist.
- Raw stored metadata has been inspected.
Network and console
- Console capture is disabled unless a documented purpose requires it.
- Network-body capture is disabled unless a documented purpose requires it.
- Request and response headers are disabled or strictly allowlisted.
- Authorization, cookie, CSRF, session, and API-key data is excluded.
- GraphQL variables are disabled or independently redacted.
- URLs and query strings in network telemetry are normalized.
- Production application logs are sanitized at source.
- Stored console and network output has been tested with synthetic canaries.
Identity
- Stable internal IDs are used instead of email addresses as primary identifiers.
- Only necessary user and account fields are attached.
- Pseudonymous identifiers are used where direct identity is unnecessary.
- The re-identification mapping is separately controlled.
- Direct-identifier access is narrower than aggregate analytics access.
- Account switching and role changes do not associate the wrong identity.
- Deletion and pseudonymization can be executed by stable identifiers.
Access
- Replay access follows least privilege.
- Product, UX, support, security, and engineering roles have separate permissions.
- Authorization is enforced server-side for every replay request.
- SSO and multifactor authentication are used where appropriate.
- Public or broadly shareable replay links are disabled.
- Opaque URLs are not treated as access control.
- Search, view, export, share, unmask, and delete actions are audited where supported.
- Identified-session access is logged.
- Temporary access has an expiry.
- Permissions are reviewed periodically.
- Offboarding and role changes remove access promptly.
- Vendor support access is documented and controlled.
Retention and deletion
- Replay retention is tied to a documented purpose.
- Automatic expiry is enabled.
- Replay retention is evaluated separately from structured analytics retention.
- Investigation holds require approval and an expiry.
- Account and user deletion workflows include replay.
- Deletion covers object storage, databases, indexes, caches, replicas, clips, and exports.
- Derived research findings follow a separate minimization and retention policy.
- Backup behavior is documented.
- Restoration procedures do not silently reintroduce deleted replay data.
- Deletion has been tested end to end.
Vendor or infrastructure review
- Controller, processor, and subprocessor roles are reviewed where applicable.
- Data-processing terms and subprocessor information are current.
- Data-location and transfer questions are reviewed.
- Default capture settings are documented.
- Masking stages and raw-data handling are understood.
- Encryption statements have been verified rather than inferred.
- Support access and breach terms are reviewed.
- Export and contract-termination behavior is documented.
- Self-hosted ingestion, storage, patching, backups, monitoring, and incident response have named owners.
- Self-hosting is not represented as compliance by itself.
Testing
- Production-like pages use synthetic privacy canaries.
- Every input and rendered-content pattern has been tested.
- Dynamic UI states have been tested.
- URLs, titles, referrers, attributes, and event properties have been tested.
- Console and network channels have been tested independently.
- Iframes, canvas, media, and rich editors have been tested.
- Multiple supported browsers and viewport sizes have been tested.
- Account switching, impersonation, permissions, and logout have been tested.
- The stored replay and metadata—not only the live page—have been inspected.
- Replay authorization and access logs have been tested.
- Deletion has been tested.
- Known limitations and compensating controls are documented.
- Release is blocked while protected synthetic data remains visible.
Monitoring
- Masking and exclusion rules are version controlled.
- Product and SDK changes trigger privacy review.
- New routes and product areas begin excluded until reviewed where practical.
- Automated synthetic fixtures cover common sensitive categories.
- Authorized reviewers periodically inspect stored output.
- SDK and plugin versions are recorded with test evidence.
- Permission reviews and deletion tests recur on a schedule.
- The control owner and next review date are visible.
Incident response
- A procedure exists for disabling or narrowing replay quickly.
- Affected projects, sessions, users, accounts, routes, and dates can be identified.
- Data can be restricted, quarantined, or deleted.
- Privacy, security, legal, product, and vendor contacts are known.
- Necessary evidence can be preserved without retaining excess exposed content.
- Re-enablement requires a successful stored-output retest.
- Root cause and preventive changes are documented.
- Legal and contractual notification questions are escalated rather than guessed.
Common session replay privacy mistakes
| Mistake | Why it fails | Better default |
|---|---|---|
| Enabling replay across the entire application | Irrelevant and sensitive areas enter the data pipeline | Begin with selected routes, product areas, sessions, or triggers |
| Assuming password-field masking protects every secret | Tokens and keys also appear in URLs, text, logs, errors, and temporary states | Exclude secret-handling workflows and test every channel |
| Masking visible text while retaining sensitive URLs | URL metadata is captured separately from DOM text in many systems | Normalize paths and remove query data before transmission |
| Recording request or response bodies without review | A single payload may contain full forms, messages, credentials, or records | Keep bodies disabled and allowlist only necessary low-risk metadata |
| Relying on one CSS selector forever | Components, portals, routes, and SDK behavior change | Treat privacy rules as tested, version-controlled production code |
| Giving broad support-team access | Masked replays still contain behavioral and account context | Provide case-linked, role-limited, and time-limited access |
| Retaining recordings indefinitely | Rich raw evidence remains exposed after its purpose expires | Set automatic, purpose-based expiry |
| Treating self-hosting as a compliance conclusion | The operator inherits storage, access, patching, backup, and deletion duties | Review the full self-hosted data lifecycle |
| Failing to inspect stored output | Configuration labels do not prove what was transmitted or retained | Use synthetic canaries and inspect replay plus raw metadata |
| Testing only one browser | DOM, iframe, input, and SDK behavior can differ | Test every supported browser and representative viewport |
| Forgetting account-switching behavior | A replay can be attached to the wrong user or company context | Test identity reset, logout, role changes, and workspace switching |
| Using replay for employee surveillance | Continuous worker monitoring can be intrusive and legally distinct | Define a necessary, proportionate purpose and obtain specialist review |
| Collecting more than the research question requires | Extra context creates risk without improving the decision | Retain only the evidence needed for the stated question |
| Publishing privacy claims that do not match configuration | Notices and contracts become inaccurate | Validate production settings against every public claim |
| Ignoring deletion from indexes or backups | A removed replay may remain discoverable or be restored | Map and test every storage, index, export, replica, and backup layer |
How Hymetry approaches privacy controls for Visits
Hymetry is account-centric product intelligence for B2B SaaS. It connects behavior across Pages, Companies, Users, and Visits so teams can move from an aggregate signal to selected session evidence instead of browsing recordings without a question. This investigation pattern supports product teams and UX researchers that need account, user, page, and Visit context together.
Current Hymetry documentation describes hosted Privacy Controls for common-pattern filtering, configured content controls, and capture scope. The free Open Source edition is self-managed and has a different control surface: its current implementation provides rrweb markup-based blocking, ignoring, and masking; server-side pattern filtering of selected replay fields before persistent storage; URL query-and-fragment cleanup before storage; and a project-level choice between analytics-only and analytics with recording.
These boundaries matter. Server-side filtering occurs after transmission, unmatched content may remain unchanged, and the generic filter does not cover every rendered-text or metadata channel. The live hosted client’s treatment of URL parameters before storage is not publicly verifiable, so URL normalization remains a team requirement rather than a Hymetry guarantee. Teams should verify the edition they deploy and inspect the stored result.
Hymetry’s technical controls should be paired with a documented purpose, minimum necessary identity, access restrictions, deliberate retention, deletion testing, and recurring production review. Masking depends on configuration and does not guarantee total redaction or legal compliance.
Hymetry offers hosted plans and a free Open Source version that teams run on infrastructure they control. Self-management changes data custody and operational responsibility; operators remain responsible for configuration, security, updates, backups, retention, deletion, monitoring, incident response, and legal review.
Frequently asked questions
Is session replay GDPR compliant?
No replay product or configuration is universally “GDPR compliant.” Where the GDPR applies, the organization must evaluate matters such as purpose, necessity, data minimization, legal basis, transparency, processor relationships, security, retention, and individual rights. The answer depends on the implementation and context. Obtain qualified privacy or legal advice where necessary.
Does session replay always require consent?
There is no universal answer. Consent or another requirement may depend on the jurisdiction, whether the technology stores information on or accesses information from a device, available exemptions, the purpose, and the later processing of personal data. An authenticated B2B product is not automatically exempt, and a customer contract does not resolve every user-level question.
Is masking every input enough?
No. Sensitive data can appear in rendered text, URLs, query strings, fragments, page titles, DOM attributes, console output, network bodies, filenames, canvas content, errors, and identity metadata. Input masking is one layer of a broader control system.
Should a B2B SaaS company identify users in replay?
Only when identity is necessary for the documented purpose. Prefer stable internal IDs, minimize direct identifiers, do not use email as the primary identifier, separate account analytics from identified-replay access, audit access, and support deletion or pseudonymization.
How long should session replay be retained?
There is no universal number. Choose the shortest period that supports the documented purpose and review workflow, enable automatic expiry, define any exception, map every copy, and test deletion. Replay retention can reasonably differ from lower-context structured analytics retention.
Is self-hosted session replay more private?
Self-hosting can give a team greater control over deployment, storage, retention, and data custody. It does not by itself make the implementation private, secure, or compliant. The operator becomes responsible for access controls, patching, backups, monitoring, deletion, and incident response.
How should masking be tested?
Use production-like pages containing synthetic canary values. Test static and dynamic states, every input type, URLs, metadata, console and network settings, special browser surfaces, multiple browsers, account switching, employee permissions, and deletion. Inspect the stored replay and raw metadata rather than trusting the live UI.
What should never be recorded?
As a conservative default, exclude passwords, authentication codes, session tokens, API keys, payment-card data, bank details, health information, government identifiers, confidential communications, private documents, customer secrets, employee records, and administrator impersonation workflows. The final scope must reflect the product and applicable obligations.
Sources
Source status was reviewed on August 4, 2026. The list distinguishes binding legislation, regulator guidance, draft regulator guidance, voluntary frameworks, security recommendations, technical documentation, vendor-specific implementation examples, and Hymetry product references. Vendor documentation demonstrates concrete implementation patterns; its inclusion is not an endorsement or proof that the same behavior applies to other products.
- European Union, Regulation (EU) 2016/679 — General Data Protection Regulation.
https://eur-lex.europa.eu/eli/reg/2016/679/oj/eng - European Data Protection Board, Guidelines 4/2019 on Article 25, Data Protection by Design and by Default.
https://www.edpb.europa.eu/documents/guideline/guidelines-42019-on-article-25-data-protection-by-design-and-by-default_en - European Data Protection Board, Guidelines 4/2019, Version 2.0 PDF.
https://www.edpb.europa.eu/system/files/documents/files/file1/edpb_guidelines_201904_dataprotection_by_design_and_by_default_v2.0_en.pdf - European Data Protection Board, Guidelines 05/2020 on Consent under Regulation 2016/679.
https://www.edpb.europa.eu/documents/guideline/guidelines-052020-on-consent-under-regulation-2016679_en - Information Commissioner’s Office, Data Protection by Design and by Default.
https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/accountability-and-governance/guide-to-accountability-and-governance/data-protection-by-design-and-by-default/ - Information Commissioner’s Office, Principle (c): Data Minimisation.
https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/data-protection-principles/a-guide-to-the-data-protection-principles/data-minimisation/ - Information Commissioner’s Office, Principle (e): Storage Limitation.
https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/data-protection-principles/a-guide-to-the-data-protection-principles/storage-limitation/ - Information Commissioner’s Office, Pseudonymisation.
https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/data-sharing/anonymisation/pseudonymisation/ - Information Commissioner’s Office, The Right to Be Informed.
https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/individual-rights/individual-rights/right-to-be-informed/ - Information Commissioner’s Office, What are the exceptions? — Guidance on the use of storage and access technologies (guidance finalized April 29, 2026).
https://ico.org.uk/for-organisations/direct-marketing-and-privacy-and-electronic-communications/guidance-on-the-use-of-storage-and-access-technologies/what-are-the-exceptions/ - Information Commissioner’s Office, About the Guidance on the use of storage and access technologies.
https://ico.org.uk/for-organisations/direct-marketing-and-privacy-and-electronic-communications/guidance-on-the-use-of-storage-and-access-technologies/about-this-guidance/ - Information Commissioner’s Office, Monitoring Workers.
https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/employment/monitoring-workers/ - Information Commissioner’s Office, Data Protection and Monitoring Workers.
https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/employment/monitoring-workers/data-protection-and-monitoring-workers/ - Information Commissioner’s Office, What Needs to Be Included in a Controller–Processor Contract?
https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/accountability-and-governance/contracts-and-liabilities-between-controllers-and-processors-multi/what-needs-to-be-included-in-the-contract/ - Information Commissioner’s Office, A Guide to Data Security.
https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/security/a-guide-to-data-security/ - Commission nationale de l’informatique et des libertés, [Closed] Session Replay: The CNIL Launches a Public Consultation on Its Draft Recommendation (February 25, 2026; consultation closed April 22, 2026).
https://www.cnil.fr/en/session-replay-cnil-launches-public-consultation-its-draft-recommendation - Commission nationale de l’informatique et des libertés, Draft Recommendation Concerning Session Replay Tools (nonbinding consultation draft; English courtesy translation).
https://www.cnil.fr/sites/default/files/2026-02/recommendation_draft_session_replay.pdf - National Institute of Standards and Technology, Privacy Framework portal.
https://www.nist.gov/privacy-framework - National Institute of Standards and Technology, The NIST Privacy Framework: A Tool for Improving Privacy through Enterprise Risk Management, Version 1.0 (current final version as of August 4, 2026).
https://doi.org/10.6028/NIST.CSWP.01162020 - National Institute of Standards and Technology, SP 800-53 Rev. 5 — Security and Privacy Controls for Information Systems and Organizations.
https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final - National Institute of Standards and Technology, SP 800-61 Rev. 3 — Incident Response Recommendations and Considerations for Cybersecurity Risk Management.
https://csrc.nist.gov/pubs/sp/800/61/r3/final - National Institute of Standards and Technology, SP 800-88 Rev. 2 — Guidelines for Media Sanitization.
https://csrc.nist.gov/pubs/sp/800/88/r2/final - National Institute of Standards and Technology, SP 800-63-4 — Digital Identity Guidelines.
https://pages.nist.gov/800-63-4/ - OWASP Cheat Sheet Series, Logging Cheat Sheet.
https://cheatsheetseries.owasp.org/cheatsheets/Logging_Cheat_Sheet.html - OWASP Cheat Sheet Series, Logging Vocabulary Cheat Sheet.
https://cheatsheetseries.owasp.org/cheatsheets/Logging_Vocabulary_Cheat_Sheet.html - OWASP Cheat Sheet Series, REST Security Cheat Sheet.
https://cheatsheetseries.owasp.org/cheatsheets/REST_Security_Cheat_Sheet.html - OWASP Cheat Sheet Series, Authorization Cheat Sheet.
https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html - OWASP Cheat Sheet Series, Session Management Cheat Sheet.
https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html - OWASP Cheat Sheet Series, Multifactor Authentication Cheat Sheet.
https://cheatsheetseries.owasp.org/cheatsheets/Multifactor_Authentication_Cheat_Sheet.html - OWASP Cheat Sheet Series, Secrets Management Cheat Sheet.
https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html - rrweb, Official Repository.
https://github.com/rrweb-io/rrweb - rrweb, Guide and Recording Options.
https://github.com/rrweb-io/rrweb/blob/main/guide.md - rrweb, Console Recording Recipe.
https://github.com/rrweb-io/rrweb/blob/main/docs/recipes/console.md - rrweb, Plugin API Recipe.
https://github.com/rrweb-io/rrweb/blob/main/docs/recipes/plugin-api.md - MDN Web Docs, URL API.
https://developer.mozilla.org/en-US/docs/Web/API/URL - MDN Web Docs, Location API.
https://developer.mozilla.org/en-US/docs/Web/API/Location - MDN Web Docs, HTML
data-*Global Attributes.
https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/data-%2A - MDN Web Docs, Using Shadow DOM.
https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_shadow_DOM - MDN Web Docs, The
iframeElement.
https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/iframe - MDN Web Docs, Same-Origin Policy.
https://developer.mozilla.org/en-US/docs/Web/Security/Defenses/Same-origin_policy - MDN Web Docs,
HTMLCanvasElement.toDataURL().
https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL - MDN Web Docs, Clipboard API.
https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API - MDN Web Docs,
pasteEvent.
https://developer.mozilla.org/en-US/docs/Web/API/Element/paste_event - Sentry Documentation, Session Replay Privacy.
https://docs.sentry.io/platforms/javascript/session-replay/privacy/ - Sentry Documentation, Session Replay Configuration.
https://docs.sentry.io/platforms/javascript/session-replay/configuration/ - Datadog Documentation, Session Replay Privacy Options.
https://docs.datadoghq.com/session_replay/privacy_options/ - Datadog Documentation, Real User Monitoring Data Security.
https://docs.datadoghq.com/data_security/real_user_monitoring/ - Federal Trade Commission, Protecting Personal Information: A Guide for Business.
https://www.ftc.gov/business-guidance/resources/protecting-personal-information-guide-business - Hymetry, Privacy Controls.
https://www.hymetry.com/product/privacy-controls/ - Hymetry, Visits.
https://www.hymetry.com/product/visits/ - Hymetry, Open-Source Repository.
https://github.com/Hymetry/Hymetry