Manifest position 169 · CrUX rank bucket 1000
https://fr.pornhub.com
Coverage complete
Coverage-complete audit of the mandatory age gate plus representative underlying homepage, listing/search/category DOM, video detail, and failure route. Explicit-content screenshots after entry were intentionally not retained; structural probes covered those templates.
All 58 atomic check outcomes
| Principle / check | Status | Confidence | Evidence or reason |
|---|---|---|---|
respect-user-preferencesrespects-color-scheme | pass | high | The age gate is already dark, remains legible under prefers-color-scheme: dark, and does not flash a light surface. |
respect-user-preferencesrespects-reduced-motion | pass | high | With prefers-reduced-motion: reduce active, document.getAnimations() returned zero running animations. |
respect-user-preferencesrespects-contrast | pass | high | Under forced-colors: active and prefers-contrast: more, text, links, borders, and both age-choice buttons remain clearly visible. |
implement-natural-interactionsview-transitions | issues | high | No view-transition rules were found on the age-gate state or representative page templates; state changes use legacy immediate swaps. F02 low: State changes do not use View Transitions |
implement-natural-interactionsscroll-driven-animations | not-applicable | high | No scroll-linked animation or scrollytelling surface was observed, so there is no scroll-linked behavior to implement declaratively. |
implement-natural-interactionsphysical-gestures | not-applicable | high | The tested browse, search, category, age-gate, and detail journeys expose no custom swipe, pull, or gesture-driven interaction. |
provide-guided-navigationscroll-state-aware-chrome | issues | medium | The long listing surface has no scroll-state queries or progress/scroll affordance; chrome remains static. F03 low: Long listings lack scroll-state-aware navigation |
provide-guided-navigationanchored-positioning | not-applicable | medium | No tooltip or edge-attached popover requiring anchor positioning was available in the tested unauthenticated journey. |
provide-guided-navigationdirects-attention | pass | medium | The mandatory gate uses a central heading, explanatory copy, and two clearly ordered choices; global navigation labels are explicit. |
maximize-content-reduce-noiseno-intrusive-interruptions | pass | high | The full-screen age gate is legally and contextually necessary for an adult service, clearly explains its purpose, and offers enter and exit actions. |
maximize-content-reduce-noisesemantic-dismissible-primitives | issues | high | The mandatory modal is an ad-hoc DIV with role=dialog rather than a native <dialog>; no native dialog element is present. F04 medium: Mandatory modal uses a custom DIV |
maximize-content-reduce-noisereduced-chrome | pass | high | The gate is visually spare: one message, two primary choices, and supporting legal links without competing decoration. |
adapt-to-the-form-factorresponsive-no-horizontal-scroll | issues | high | The mobile screenshot visibly clips the 780px fixed dialog and the second age-choice button; content extends beyond the viewport even though root overflow is suppressed. F05 critical: Age gate is clipped on mobile |
adapt-to-the-form-factorcomponent-level-responsiveness | issues | medium | No @container rules were found across reused listing/card templates; responsiveness is viewport-only. F06 low: Reusable cards do not use component-level responsiveness |
adapt-to-the-form-factorinput-modality-aware | issues | high | Focusing the first reachable control produced outline:none and box-shadow:none; numerous text controls are only 15–22px high. F07 high: Keyboard focus is invisible and targets are cramped |
support-core-task-successclear-purpose-and-primary-action | pass | high | The gate states that this is an adults-only site and presents explicit enter and exit choices. |
support-core-task-successprimary-flow-completion | issues | high | At 360px the required entry flow is clipped horizontally and the under-18 exit action is largely off-screen, obstructing the first mandatory step. F05 critical: Age gate is clipped on mobile |
support-core-task-successclear-system-state-and-recovery | pass | medium | The access state is explicit and reversible through enter/exit actions; an invalid path returns users to the guarded homepage rather than a blank shell. |
be-fast-and-stablegood-core-web-vitals | issues | high | Lighthouse measured LCP 4.4s (poor) and TTI 7.8s; trace corroborated a 2.30s LCP on a faster run. F08 high: LCP and interactivity miss the performance bar |
be-fast-and-stablevisual-stability | issues | high | Mobile layout CLS was 0.102, just outside the good <=0.1 range; desktop measured 0.062 and Lighthouse 0.095. F11 medium: Mobile CLS is just outside the good range |
be-fast-and-stableefficient-main-thread | pass | high | The trace recorded zero long tasks and 0ms TBT; Lighthouse measured 42ms TBT, comfortably good despite 2.4s aggregate main-thread work. |
be-fast-and-stableefficient-resource-delivery | issues | high | The load transfers 6.4MB across 172 requests with seven parser-blocking stylesheets and multiple synchronous head scripts; Lighthouse estimates 450ms render-blocking savings. F09 high: Critical path is oversized and render-blocked |
be-fast-and-stabletrim-unused-and-duplicate-code | issues | high | Lighthouse estimates 286KiB unused JavaScript, 74KiB unused CSS, and 54KiB avoidable legacy JavaScript. F10 medium: Large unused and legacy bundles ship on the gate |
be-inclusivenames-roles-labels | issues | high | axe found 30 untitled iframes; the detail probe found 12/12 iframes untitled and one image without alt. F12 high: Advertising/media frames lack accessible names |
be-inclusivesufficient-contrast | pass | medium | Forced-colors preserved all gate controls and text; Lighthouse raised no scored color-contrast failure (axe marked contrast for manual review only). |
be-inclusivestructure-and-focus | issues | high | axe found 116 regions outside landmarks, and focus can move to a background Cookie Notice link with no visible outline while the modal is active. F13 high: Modal focus and landmark structure are broken |
be-inclusivelegible-text | issues | high | Large text and legal copy are clipped at the right edge on mobile, requiring unavailable horizontal access and harming comprehension. F05 critical: Age gate is clipped on mobile |
be-inclusivezoom-reflow-targets-and-media | issues | high | Lighthouse reports a viewport zoom restriction in the audited render; the 360px gate fails reflow, and the tested detail video exposes no caption/subtitle track. F14 high: Reflow, zoom, and media alternatives are incomplete |
follow-best-practicesno-console-errors | issues | high | Lighthouse scored errors-in-console at 0, confirming browser errors during load. F15 medium: Console errors occur during normal load |
follow-best-practicessound-document-and-assets | issues | high | Doctype and UTF-8 are valid, but three images lack dimensions and Lighthouse flags unsized images; 33/37 images lack responsive srcset. F16 medium: Image markup is incompletely sized and responsive |
follow-best-practicesbrowser-platform-hygiene | issues | high | Lighthouse found two deprecated-API warnings, inspector issues, legacy JS, and four BFCache failure reasons. F17 medium: Deprecated APIs and BFCache blockers remain |
be-discoverabletitle-and-description | issues | high | Both entry and video detail use the generic title “Pornhub”; no meta description is present. F18 high: Page titles are generic and descriptions missing |
be-discoverablecrawlable-and-mobile-friendly | issues | high | Lighthouse found non-crawlable links and an invalid robots.txt; 30 homepage anchors have empty or javascript: href values. F19 high: Links and robots endpoint are not crawler-safe |
be-discoverablecanonical-and-indexing-signals | issues | high | Pages ship noindex,nofollow, the detail canonical points to the homepage, /robots.txt redirects to HTML, and /sitemap.xml is a 404. F20 high: Indexing signals contradict public detail pages |
be-discoverablestructured-and-shareable-metadata | issues | high | No Open Graph tags or JSON-LD were present, including on a concrete video detail page. F21 medium: Detail pages lack structured and social metadata |
be-private-and-securesecure-transport-and-headers | issues | high | HTTPS and HSTS are present, but CSP and nosniff are missing; cookie rp is not Secure and all seven cookies use SameSite=None. F22 high: Transport is HTTPS but key protections and cookie flags are weak |
be-private-and-securedata-minimisation-and-third-parties | issues | high | 101/172 requests and 2.39MB are third-party; active Google Tag Manager/DoubleClick tracking and TrafficJunky advertising are present on the age gate. F23 high: Tracking starts before the user enters |
be-private-and-securein-context-permissions-and-modern-auth | pass | medium | No permission prompt appeared on load; the delivered UI includes passkey continuation and passkey.js support for sign-in. |
be-private-and-securedefensive-browser-policies | issues | high | HSTS and SAMEORIGIN are configured, but CSP/frame-ancestors, Referrer-Policy, Permissions-Policy, and nosniff are absent. F24 medium: Defensive browser policies are incomplete |
be-resilientprogressive-enhancement | issues | high | Only 29% of rendered content tokens survive in raw HTML and the crawler screenshot is entirely blank, so core guarded content is not usable without JavaScript. F25 high: No-JavaScript crawler view is blank |
be-resilientresilient-runtime-behaviour | issues | high | The mandatory dialog is fixed at 780px and cut off in the 360px runtime, including a primary exit control. F26 high: Mandatory runtime UI is cut off at narrow widths |
be-resilientoffline-and-installable | not-applicable | high | This streaming media service is intrinsically online; no offline/installable intent is declared, so PWA installability is not required. |
be-resilientnetwork-and-http-failure-states | issues | medium | A deliberately invalid path silently redirects to the guarded homepage instead of presenting a clear 404 explanation or recovery choices. F27 medium: Invalid routes fail silently |
be-internationalisedlang-dir-and-logical-properties | pass | high | The French host declares html lang=fr and the gate offers an accessible language selector with many localized choices; default LTR is appropriate. |
be-internationalisedlocale-aware-data | not-applicable | medium | The tested guarded entry and browsing metadata exposed no dates, currencies, or locale-sensitive numeric inputs requiring formatting judgement. |
be-internationalisedtime-zone-correctness | not-applicable | high | No scheduling, event, deadline, or user-entered time-zone surface appears in the tested journey. |
be-trustworthyno-dark-patterns | pass | high | The age gate states its purpose plainly and offers symmetric enter/exit choices; cookie controls include an essential-only option without confirmshaming. |
be-trustworthyhumane-error-handling | not-applicable | medium | The representative unauthenticated browse flow has only a search field and no required data-entry form with validation/error states to exercise. |
be-trustworthytrustworthy-input-assistance | pass | medium | The search input has an accessible name, sensible text type, and no obstruction to native input; account/payment forms were not part of the public browse flow. |
be-trustworthysafe-commercial-and-account-flows | not-applicable | medium | No checkout, subscription purchase, consent change, or authenticated account-management flow was entered; the representative task was public age-gated browsing. |
be-sustainableoptimised-assets | issues | high | 22/37 images use legacy formats, 33 lack srcset, and Lighthouse estimates 510KiB image savings. F28 medium: Images miss modern responsive delivery |
be-sustainableno-wasteful-work | issues | high | The guarded first view still makes 172 requests, including 38 fetch/XHR requests, before the user enters; this is disproportionate background work for a blocking gate. F29 high: The blocking age gate still loads the full application |
be-sustainablethird-party-and-media-budget | issues | high | Third parties account for 101 requests and 2.39MB, including 1.17MB from TrafficJunky advertising before age confirmation. F30 high: Third-party budget is disproportionate on first view |
be-agent-readystructured-agent-capabilities | not-applicable | high | No configuration or site signal declares an agent-facing capability; this emerging check is not required for the guarded adult-media browse experience. |
be-agent-readyon-device-inference | not-applicable | high | No user task in the audited flow calls for on-device inference, summarisation, or a built-in language model. |
be-memory-efficientno-leak-under-repeated-interaction | pass | medium | After ten representative gate-control toggles, heap self size fell from 38.53MB to 37.73MB; node count changed by only 0.22%, with no unbounded retained growth signal. |
be-memory-efficientbounded-footprint | pass | medium | The loaded gate and underlying listing used about 28MB live JS heap, 38.5MB snapshot self-size, and 1,426 DOM elements, proportionate for this media listing. |
be-memory-efficientno-detached-dom-or-unbounded-listeners | pass | medium | No Detached* constructor appears in either top-constructor summary; total heap shrank and closure count was effectively flat (52,365 to 52,374). |
Provenance
Canonical report: results/atomic/reports/0169-fr_pornhub_com.json
Report SHA-256: 54ee9b2b2ed04208b910819ac336031ea81e533cee99a705094533ac42ed8e93
Local retained report: runs/2026-07-17T17-27-24-856Z/atomic-reports/fr_pornhub_com/2026-07-18T21-57-10-231Z/report.json
Local evidence root: runs/2026-07-17T17-27-24-856Z/atomic-reports/fr_pornhub_com/2026-07-18T21-57-10-231Z
Catalog SHA-256: sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7
Raw screenshots, HARs, traces, heaps, and other browser artifacts are retained at the local evidence root and intentionally are not committed. Artifact paths in the canonical report are relative to that root.