Manifest position 137 · CrUX rank bucket 1000
https://www.pornhub.org
Coverage complete
Coverage-complete report-mode audit. The .org start URL redirects to .com and presents a mandatory age gate; the gate, underlying homepage, listing/detail templates, login modal, and invalid-route recovery were inspected.
All 58 atomic check outcomes
| Principle / check | Status | Confidence | Evidence or reason |
|---|---|---|---|
respect-user-preferencesrespects-color-scheme | issues | high | Light and dark emulation produced byte-identical 99,208-byte screenshots; the DOM/CSS probe found no color-scheme, prefers-color-scheme, or light-dark() usage. F-001 low: Theme is fixed rather than preference-driven |
respect-user-preferencesrespects-reduced-motion | pass | high | Reduced-motion emulation matched true and getAnimations() returned zero active animations during the gate state. |
respect-user-preferencesrespects-contrast | issues | high | CSS inspection found no prefers-contrast or forced-colors rules, so custom orange, grey, and black controls have no explicit high-contrast adaptation. F-002 medium: High-contrast preferences are not handled |
implement-natural-interactionsview-transitions | issues | high | The age-gate interaction video shows the modal disappearing into the content grid without a directional or continuity transition; CSS contains no authored view-transition rules. F-003 low: State changes are abrupt |
implement-natural-interactionsscroll-driven-animations | not-applicable | medium | No parallax, scrollytelling, or entry/exit reveal behavior was observed on the age gate or representative feed state, so there is no scroll-linked effect to implement. |
implement-natural-interactionsphysical-gestures | not-applicable | medium | No swipe, pull-to-reveal, carousel, or other gesture-driven primary interaction was present in the audited entry, listing, detail, or login surfaces. |
provide-guided-navigationscroll-state-aware-chrome | issues | high | The post-gate screenshot shows a long card feed with static navigation, while CSS inspection found no scroll-state container query or progress affordance. F-004 low: Long-feed navigation is not scroll-state aware |
provide-guided-navigationanchored-positioning | issues | high | The main navigation exposes multiple dropdown menus, but CSS inspection found no anchor-name, position-anchor, or position-try usage. F-005 low: Menus do not use resilient anchor positioning |
provide-guided-navigationdirects-attention | issues | high | The age-gate flow swaps directly to a dense grid and CSS contains no view-transition, highlight, or scroll-marker styling to orient the user. F-006 low: Navigation state changes provide little attention guidance |
maximize-content-reduce-noiseno-intrusive-interruptions | pass | high | The blocking surface is a legally necessary age gate with clear Enter and Exit actions; cookie controls include an essential-only option. |
maximize-content-reduce-noisesemantic-dismissible-primitives | issues | high | DOM inspection found zero dialog, popover, or details elements even though the page uses an age gate, cookie controls, login modal, and dropdowns. F-007 medium: Overlays are custom div-based widgets |
maximize-content-reduce-noisereduced-chrome | issues | high | The post-gate first viewport contains two ad cards and repeated Remove Ads controls among content cards, plus a full-width cookie-choice nag at the bottom. F-008 medium: Ads and repeated controls crowd the content grid |
adapt-to-the-form-factorresponsive-no-horizontal-scroll | issues | high | At 360x800, the heading, explanatory copy, law-enforcement link, and under-18 button extend beyond the right edge even though the body reports zero horizontal overflow, making the clipped content unreachable. F-009 high: The mobile age gate is visibly clipped |
adapt-to-the-form-factorcomponent-level-responsiveness | issues | high | CSS inspection across homepage, listing, and detail templates found no @container or container-type rules despite cards and overlays appearing in several widths. F-010 medium: Reusable UI relies on viewport styling only |
adapt-to-the-form-factorinput-modality-aware | issues | high | The focus probe found no outline or box shadow on cookie buttons and search; many visible links are only 15-22px high. F-011 high: Keyboard focus and touch sizing are inconsistent |
support-core-task-successclear-purpose-and-primary-action | pass | high | The first viewport states This is an adult website and presents explicit Enter and Exit actions. |
support-core-task-successprimary-flow-completion | issues | high | At 360px, the under-18 exit action and portions of the legal text are clipped off-screen, so the required entry/exit choice is not fully available. F-012 high: The required age-confirmation flow breaks on mobile |
support-core-task-successclear-system-state-and-recovery | pass | high | The gate explains why progress is blocked and provides Exit, parental-controls, terms, and law-enforcement routes. |
be-fast-and-stablegood-core-web-vitals | issues | high | Lighthouse measured LCP 8.8s, FCP 3.9s, TTI 9.7s, and CLS 0.095 (performance score 0.61); the trace independently measured LCP 3.17s. F-013 high: Cold-load performance misses the Core Web Vitals bar |
be-fast-and-stablevisual-stability | issues | high | The 360px layout observer recorded CLS 0.102 from a shift at about 4.83s; the desktop observer recorded 0.056. F-014 medium: Late content shifts the mobile layout |
be-fast-and-stableefficient-main-thread | pass | high | Trace recorded zero long tasks and 0ms total blocking time over 6.36s; Lighthouse TBT was 46ms. |
be-fast-and-stableefficient-resource-delivery | issues | high | HAR captured 173 requests and 5.27MB transferred, including 11 stylesheets, 40 scripts, ten parser/high-priority render-blocking candidates, and a 1.9MB document response. F-015 high: The entry experience has a heavy critical network path |
be-fast-and-stabletrim-unused-and-duplicate-code | issues | high | Lighthouse estimated 288KiB unused JavaScript and 74KiB unused CSS; three tag-manager bundles account for most unused JS. F-016 high: Substantial unused code ships before the core task |
be-inclusivenames-roles-labels | issues | high | Lighthouse found multiple visible ad iframes without titles and a User Icon button whose accessible name does not include its visible Log in label. F-017 high: Embedded ads and controls expose incorrect accessible names |
be-inclusivesufficient-contrast | pass | high | Lighthouse color-contrast audit passed; white/grey text and orange controls remain legible against black in captured views. |
be-inclusivestructure-and-focus | issues | high | The gate has no h1 and the DOM probe found no main/nav landmarks; several cookie and search controls focus with no visible outline. F-018 high: Landmarks and focus treatment do not provide a reliable keyboard path |
be-inclusivelegible-text | issues | high | The 360px screenshot cuts multiple lines at the right edge, including the heading and legally important age text. F-019 high: Mobile text is clipped and cannot reflow |
be-inclusivezoom-reflow-targets-and-media | issues | high | Lighthouse found a viewport declaration with maximum-scale=1 and user-scalable=no; the focus probe also found many sub-24px-high targets. F-020 high: Mobile zoom is disabled on a served variant |
follow-best-practicesno-console-errors | issues | high | Lighthouse captured TypeError: Cannot read properties of null (reading addEventListener) in setInstallButton at homepage line 4546. F-021 medium: The homepage throws an uncaught exception |
follow-best-practicessound-document-and-assets | issues | high | The image audit found three images without width/height, 33 without srcset, and 17 legacy-format assets, although doctype and UTF-8 are valid. F-022 medium: Image delivery is structurally incomplete |
follow-best-practicesbrowser-platform-hygiene | issues | high | Lighthouse reported an unload listener, deprecated Cast-control CSS, two deprecation warnings, inspector cookie issues, and four BFCache failure reasons. F-023 medium: Deprecated APIs and BFCache blockers remain |
be-discoverabletitle-and-description | issues | high | Homepage, listing, detail, and login recon all rendered title Pornhub; no meta description was present. F-024 high: Public templates expose generic metadata |
be-discoverablecrawlable-and-mobile-friendly | issues | high | The homepage declares noindex,nofollow, 30 anchors have empty/javascript hrefs, Lighthouse found uncrawlable anchors, and /robots.txt returns the homepage HTML. F-025 high: Crawler and mobile signals are broken |
be-discoverablecanonical-and-indexing-signals | issues | high | The .org URL redirects to .com, the homepage canonical points to .com but also says noindex,nofollow, /robots.txt returns HTML, and /sitemap.xml returns 404. F-026 high: Canonical, sitemap, and indexing policy are inconsistent |
be-discoverablestructured-and-shareable-metadata | issues | high | The inspected video detail rendered no JSON-LD, Open Graph, Twitter, or hreflang metadata and retained the generic Pornhub title. F-027 medium: Content/detail pages lack rich metadata |
be-private-and-securesecure-transport-and-headers | issues | high | Headers evidence found no CSP or X-Content-Type-Options; cookies evidence found the rp cookie not Secure and SameSite=None. HSTS is present. F-028 high: Transport is HTTPS but baseline defenses are incomplete |
be-private-and-securedata-minimisation-and-third-parties | issues | high | Tracker capture found 13 third-party origins including Google Tag Manager and DoubleClick; HAR recorded 171 cross-origin requests and 5.27MB before age confirmation. F-029 high: Tracking and ad-tech load before the user enters |
be-private-and-securein-context-permissions-and-modern-auth | pass | high | No permission prompt appeared on load; the sign-in modal exposes labelled identity-provider and email/password choices with correct email/current-password autocomplete. |
be-private-and-securedefensive-browser-policies | issues | high | Headers evidence found no CSP, nosniff, Referrer-Policy, or Permissions-Policy; X-Frame-Options and HSTS are present. F-030 high: Several browser-enforced policies are absent |
be-resilientprogressive-enhancement | issues | high | Discoverability measured only 30-35% rendered-word coverage in raw HTML; listing/login URLs collapse to the generic homepage/gate and core navigation depends on scripted controls. F-031 high: Core content and route identity degrade without JavaScript |
be-resilientresilient-runtime-behaviour | issues | high | The required modal clips content on mobile, /login collapses to the homepage gate before entry, and the homepage throws an uncaught listener exception. F-032 high: Runtime behavior is fragile at the entry boundary |
be-resilientoffline-and-installable | not-applicable | medium | This is an intrinsically online streaming and account service; installability/offline playback was not treated as a required core capability. |
be-resilientnetwork-and-http-failure-states | pass | high | A deliberately invalid route returns the user to the homepage/gate with a usable Home recovery path rather than a blank shell. |
be-internationalisedlang-dir-and-logical-properties | issues | high | The page offers many languages and sets lang=en, but has no dir attribute, no logical CSS properties, and at least 16 physical left/right declarations in the inspected CSS. F-033 medium: Language support is not backed by bidi-resilient layout |
be-internationalisedlocale-aware-data | not-applicable | medium | The audited gate, listing, detail shell, and login modal displayed no dates, currencies, or locale-sensitive numbers requiring formatting. |
be-internationalisedtime-zone-correctness | not-applicable | medium | No events, schedules, stored times, or recurring time concepts were present in the representative surfaces. |
be-trustworthyno-dark-patterns | issues | high | After Accept Only Essential Cookies, a persistent banner says features may be unavailable and recommends Accept All Cookies, weakening the user’s choice. F-034 medium: Rejecting optional cookies triggers a nag to accept all |
be-trustworthyhumane-error-handling | issues | high | The login modal has email/password autocomplete tokens, but submitting empty fields produced no :invalid elements, no aria-invalid state, no live-region message, and no visible error text. F-035 medium: Empty sign-in submission gives no actionable feedback |
be-trustworthytrustworthy-input-assistance | pass | high | Login inspection found autocomplete=email and autocomplete=current-password, labelled fields, and a password visibility control. |
be-trustworthysafe-commercial-and-account-flows | pass | high | The login modal clearly identifies available providers, states regional registration limits, and does not hide a commitment or continuity action. |
be-sustainableoptimised-assets | issues | high | The image audit found 33 of 37 images without srcset and 17 legacy-format images; three images lack dimensions. F-036 medium: Image formats and responsive delivery waste bytes |
be-sustainableno-wasteful-work | issues | high | Before entry, HAR recorded 173 requests, 38 XHR/fetches, 78 images, and 5.27MB; underlying feed assets and analytics are loaded behind the blocking gate. F-037 high: The gate loads the full feed, ads, and analytics in the background |
be-sustainablethird-party-and-media-budget | issues | high | HAR attributes virtually all transfer from the .org start URL to cross-origin hosts after redirect, including about 1.0MB from TrafficJunky and 468KB from Google Tag Manager. F-038 high: Third-party cost dominates the initial budget |
be-agent-readystructured-agent-capabilities | not-applicable | medium | No developer intent requests agent-facing commerce or task APIs; exposing adult-content actions to agents would require a separate explicit safety design. |
be-agent-readyon-device-inference | not-applicable | medium | No summarisation or language-model task is part of the core audited journey, so on-device inference is not presently applicable. |
be-memory-efficientno-leak-under-repeated-interaction | pass | high | After gate entry plus ten focus/scroll cycles, heap self size fell from 38,438,601 to 38,184,862 bytes; node count rose only 0.16%, with no unbounded growth signal. |
be-memory-efficientbounded-footprint | issues | high | A single age-gated load retained about 38.4MB self size across 587,659 heap nodes and 52,371 closures before the underlying feed was usable. F-039 medium: The blocked entry state has a disproportionate heap footprint |
be-memory-efficientno-detached-dom-or-unbounded-listeners | pass | high | Before/after heap constructor summaries contained no Detached* population and closures changed from 52,371 to 52,372. |
Provenance
Canonical report: results/atomic/reports/0137-www_pornhub_org.json
Report SHA-256: 1331393eb36622998840716c6896a1a84cce245c9a9b47072e7c19028225922c
Local retained report: runs/2026-07-17T17-27-24-856Z/atomic-reports/www_pornhub_org/2026-07-18T16-29-32-298Z/report.json
Local evidence root: runs/2026-07-17T17-27-24-856Z/atomic-reports/www_pornhub_org/2026-07-18T16-29-32-298Z
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.