TL;DR — Quick Summary
DOMContentLoaded fires when the HTML document is fully parsed and the DOM tree is built, without waiting for images, stylesheets, or subframes. Diagnostic marker for DOM readiness — not a CWV or ranking factor.
What is DOMContentLoaded (DCL)?
DOMContentLoaded (DCL) is a browser event that fires when the HTML document has been completely parsed and the DOM tree is constructed, but external resources may still be loading.
Key characteristics:
- •Fires after HTML parsing completes and deferred scripts execute.
- •Does NOT wait for images, stylesheets via
<link>, or iframes. - •IS delayed by synchronous
<script>tags (without async/defer). - •IS delayed by stylesheets that precede synchronous scripts.
History & Evolution
- •2004 — DOMContentLoaded standardized as a reliable DOM-ready signal.
- •2006 — jQuery popularizes $(document).ready(), wrapping DOMContentLoaded.
- •2010s — DCL becomes a standard DevTools/WebPageTest marker.
- •2020s — User-centric metrics (FCP, LCP) supersede DCL for performance measurement.
How DCL is Measured
Available via Navigation Timing API and browser DevTools.
- •Chrome DevTools Network panel (blue vertical line)
- •WebPageTest waterfall (blue vertical line)
- •`performance.timing.domContentLoadedEventStart`
- •Not in Lighthouse scoring or CrUX.
Key rule: Field data (CrUX) determines Google rankings. Lab data (Lighthouse, WebPageTest) is for debugging and iteration.
Common Causes of Poor DCL Scores
- 1Synchronous scripts in
<head>— Block HTML parsing. - 2Large HTML documents — Long pages take longer to parse.
- 3Synchronous scripts after stylesheets — Scripts wait for preceding CSS.
- 4Excessive inline JavaScript — Large script blocks pause parsing.
- 5Slow TTFB — Delays everything including DCL.
Frequently Asked Questions
DCL fires when HTML parsing is complete (DOM ready). Window load fires when ALL resources finish loading. DCL is always earlier.
No. DCL is not a CWV or ranking factor. Google uses LCP, INP, and CLS.
CSS alone doesn't delay DCL. However, if a synchronous <script> follows a <link rel='stylesheet'>, the browser waits for CSS before executing the script — which delays DCL.
For step-by-step optimization, platform-specific fixes, code examples, and case studies, read our full guide:
The Ultimate Guide to Website Performance Measurement, Tools & Data: Lab, Field & Everything Between in 2026Struggling with DCL?
Request a free speed audit and we'll identify exactly what's holding your scores back.