50 checks in Technical Foundation & Rendering. Automated Its subsection has a live automated checker in the engine.
| ID | Check | Passes when |
|---|---|---|
| 1.3.01 | Load / in headless browser and record time to first paint | First paint within acceptable threshold |
| 1.3.02 | Identify all <script> tags in <head> without async or defer | Count minimized |
| 1.3.03 | Identify total JS payload size from network waterfall | Total JS size < 2 MB |
| 1.3.04 | Count number of JS files loaded before DOMContentLoaded | Minimal count |
| 1.3.05 | Check if main content is visible before all JS loads | True |
| 1.3.06 | Capture console errors during load | 0 console errors |
| 1.3.07 | Capture console warnings during load | Minimal warnings |
| 1.3.08 | Identify any “Hydration failed” messages in console | None |
| 1.3.09 | Identify any “Cannot read property of undefined” JS errors | None |
| 1.3.10 | Identify any unhandled promise rejections | None |
| 1.3.11 | Detect usage of document.write() in scripts | Not used |
| 1.3.12 | Detect synchronous XHR calls | Not used |
| 1.3.13 | Count third-party JS domains (analytics, ads, widgets) | Count minimized |
| 1.3.14 | Count first-party JS files | Reasonable number |
| 1.3.15 | Detect blocking JS loaded from third-party domains | None or minimal |
| 1.3.16 | Measure time to DOMContentLoaded | < 2 seconds |
| 1.3.17 | Measure time to fully loaded (load event) | < 4 seconds |
| 1.3.18 | Verify that interactive elements (nav, main CTA) are usable within 3s | True |
| 1.3.19 | Identify inline <script> blocks in <head> | Minimized |
| 1.3.20 | Identify inline <script> blocks in <body> | Minimized |
| 1.3.21 | Detect if critical CSS is inlined separately from JS | True |
| 1.3.22 | Detect if primary JS bundle is split (code-splitting) | Yes, if app is large |
| 1.3.23 | Identify long running tasks (>50 ms) in JS execution timeline | Few or none |
| 1.3.24 | Identify any JS that modifies <title> after load | No unnecessary title rewrites |
| 1.3.25 | Identify any JS that modifies meta description after load | No unnecessary description rewrites |
| 1.3.26 | Identify any JS that modifies canonical tag after load | No canonical rewrites |
| 1.3.27 | Identify any JS that injects or modifies robots meta tag | No unexpected robots changes |
| 1.3.28 | Identify any JS that injects “noindex” or “nofollow” | Not present unless intentional |
| 1.3.29 | Identify JS that hides main content until full load | No JS-gated content |
| 1.3.30 | Identify “loading” overlays blocking content beyond 3s | None |
| 1.3.31 | Measure time to first interactive element being clickable | < 3 seconds |
| 1.3.32 | Scan for SPA-only routing that changes URL with # or history API | SEO-friendly routing |
| 1.3.33 | Detect content loaded only after user interaction (click/scroll) | Core SEO content loaded without interaction |
| 1.3.34 | Identify lazy-loaded content that is critical for SEO (text blocks) | Not lazy-loaded |
| 1.3.35 | Detect JS that replaces server-rendered content with a different client-rendered version | Parity maintained |
| 1.3.36 | Evaluate total JS execution time on initial load | Within acceptable range |
| 1.3.37 | Evaluate total blocking time from JS | Minimal |
| 1.3.38 | Detect use of large third-party tag managers (e.g., GTM bloated) | Reasonably optimized |
| 1.3.39 | Detect duplicate loading of the same JS file | None |
| 1.3.40 | Detect JS that forces full page reloads for minor actions | Not used |
| 1.3.41 | Confirm that navigation works when JS is disabled | Basic navigation still usable |
| 1.3.42 | Confirm that primary content remains visible when JS is disabled | True |
| 1.3.43 | Confirm that core internal links are present in raw HTML | True |
| 1.3.44 | Confirm that structured data is present even without JS | Present (inline JSON-LD or microdata) |
| 1.3.45 | Detect dynamic JS that injects AI-visible but user-hidden content | No cloaking behavior |
| 1.3.46 | Detect JS that conditionally serves different HTML by user-agent | No UA-based cloaking |
| 1.3.47 | Detect JS that prevents right-click, select, or copy on main content | No aggressive anti-UX scripts |
| 1.3.48 | Detect JS popups or modals appearing before main content | No intrusive initial modals |
| 1.3.49 | Compute JS blocking/hydration health composite score | High composite value |
| 1.3.50 | Flag page as “JS-unsafe for SEO/AI” if key content depends on JS + hydration fails | Flag not set |
← 1.2 Render Parity Suite (Headless vs Raw HTML)1.4 Resource Load Diagnostics →
A Deep Audit scores every check here that applies to your page, then an AI pass of up to 150 checks. Included on Pro and Ultra, or $9 for one audit.
See plansMachine-readable: catalog totals and the full catalog as JSON (IDs, section, weight, status).