Home / Check catalog / 1. Technical Foundation & Rendering / 1.3 JavaScript Blocking & Hydration Suite

1.3 JavaScript Blocking & Hydration Suite

50 checks in Technical Foundation & Rendering. Automated Its subsection has a live automated checker in the engine.

IDCheckPasses whenWeightRuns
1.3.01Load / in headless browser and record time to first paintFirst paint within acceptable thresholdHeavyDeterministic
1.3.02Identify all <script> tags in <head> without async or deferCount minimizedHeavyDeterministic
1.3.03Identify total JS payload size from network waterfallTotal JS size < 2 MBHeavyDeterministic
1.3.04Count number of JS files loaded before DOMContentLoadedMinimal countHeavyDeterministic
1.3.05Check if main content is visible before all JS loadsTrueHeavyDeterministic
1.3.06Capture console errors during load0 console errorsHeavyDeterministic
1.3.07Capture console warnings during loadMinimal warningsHeavyDeterministic
1.3.08Identify any “Hydration failed” messages in consoleNoneHeavyDeterministic
1.3.09Identify any “Cannot read property of undefined” JS errorsNoneHeavyDeterministic
1.3.10Identify any unhandled promise rejectionsNoneHeavyDeterministic
1.3.11Detect usage of document.write() in scriptsNot usedHeavyDeterministic
1.3.12Detect synchronous XHR callsNot usedHeavyDeterministic
1.3.13Count third-party JS domains (analytics, ads, widgets)Count minimizedMediumDeterministic
1.3.14Count first-party JS filesReasonable numberMediumDeterministic
1.3.15Detect blocking JS loaded from third-party domainsNone or minimalMediumDeterministic
1.3.16Measure time to DOMContentLoaded< 2 secondsHeavyDeterministic
1.3.17Measure time to fully loaded (load event)< 4 secondsHeavyDeterministic
1.3.18Verify that interactive elements (nav, main CTA) are usable within 3sTrueHeavyDeterministic
1.3.19Identify inline <script> blocks in <head>MinimizedHeavyDeterministic
1.3.20Identify inline <script> blocks in <body>MinimizedMediumDeterministic
1.3.21Detect if critical CSS is inlined separately from JSTrueMediumDeterministic
1.3.22Detect if primary JS bundle is split (code-splitting)Yes, if app is largeHeavyDeterministic
1.3.23Identify long running tasks (>50 ms) in JS execution timelineFew or noneMediumDeterministic
1.3.24Identify any JS that modifies <title> after loadNo unnecessary title rewritesHeavyDeterministic
1.3.25Identify any JS that modifies meta description after loadNo unnecessary description rewritesHeavyDeterministic
1.3.26Identify any JS that modifies canonical tag after loadNo canonical rewritesHeavyDeterministic
1.3.27Identify any JS that injects or modifies robots meta tagNo unexpected robots changesCriticalDeterministic
1.3.28Identify any JS that injects “noindex” or “nofollow”Not present unless intentionalCriticalDeterministic
1.3.29Identify JS that hides main content until full loadNo JS-gated contentHeavyDeterministic
1.3.30Identify “loading” overlays blocking content beyond 3sNoneHeavyDeterministic
1.3.31Measure time to first interactive element being clickable< 3 secondsMediumDeterministic
1.3.32Scan for SPA-only routing that changes URL with # or history APISEO-friendly routingMediumDeterministic
1.3.33Detect content loaded only after user interaction (click/scroll)Core SEO content loaded without interactionHeavyDeterministic
1.3.34Identify lazy-loaded content that is critical for SEO (text blocks)Not lazy-loadedMediumDeterministic
1.3.35Detect JS that replaces server-rendered content with a different client-rendered versionParity maintainedMediumDeterministic
1.3.36Evaluate total JS execution time on initial loadWithin acceptable rangeHeavyDeterministic
1.3.37Evaluate total blocking time from JSMinimalHeavyDeterministic
1.3.38Detect use of large third-party tag managers (e.g., GTM bloated)Reasonably optimizedMediumDeterministic
1.3.39Detect duplicate loading of the same JS fileNoneMediumDeterministic
1.3.40Detect JS that forces full page reloads for minor actionsNot usedMediumDeterministic
1.3.41Confirm that navigation works when JS is disabledBasic navigation still usableMediumDeterministic
1.3.42Confirm that primary content remains visible when JS is disabledTrueHeavyDeterministic
1.3.43Confirm that core internal links are present in raw HTMLTrueMediumDeterministic
1.3.44Confirm that structured data is present even without JSPresent (inline JSON-LD or microdata)MediumDeterministic
1.3.45Detect dynamic JS that injects AI-visible but user-hidden contentNo cloaking behaviorHeavyDeterministic
1.3.46Detect JS that conditionally serves different HTML by user-agentNo UA-based cloakingHeavyDeterministic
1.3.47Detect JS that prevents right-click, select, or copy on main contentNo aggressive anti-UX scriptsHeavyDeterministic
1.3.48Detect JS popups or modals appearing before main contentNo intrusive initial modalsMediumDeterministic
1.3.49Compute JS blocking/hydration health composite scoreHigh composite valueHeavyDeterministic
1.3.50Flag page as “JS-unsafe for SEO/AI” if key content depends on JS + hydration failsFlag not setCriticalDeterministic

← 1.2 Render Parity Suite (Headless vs Raw HTML)1.4 Resource Load Diagnostics →

Run these checks on your site

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 plans

Machine-readable: catalog totals and the full catalog as JSON (IDs, section, weight, status).