GoogleChrome/lighthouse · error · LighthouseError
NO_DCL
NO_DCL
Error message
Something went wrong with recording the trace over your page load. Please run Lighthouse again. ({errorCode}) What it means
Thrown as a LighthouseError with code NO_DCL when computeObservedMetric() for the Interactive (TTI) metric finds that processedNavigation.timestamps.domContentLoaded is falsy. The domContentLoaded (DCL) event timestamp is a prerequisite anchor for computing TTI; without it, the metric computation cannot proceed. This typically indicates a broken or incomplete trace recording rather than a slow page.
Source
Thrown at core/computed/metrics/interactive.js:159
/**
* @param {LH.Artifacts.NavigationMetricComputationData} data
* @param {LH.Artifacts.ComputedContext} context
* @return {Promise<LH.Artifacts.LanternMetric>}
*/
static computeSimulatedMetric(data, context) {
const metricData = NavigationMetric.getMetricComputationInput(data);
return LanternInteractive.request(metricData, context);
}
/**
* @param {LH.Artifacts.NavigationMetricComputationData} data
* @return {Promise<LH.Artifacts.Metric>}
*/
static computeObservedMetric(data) {
const {processedTrace, processedNavigation, networkRecords} = data;
if (!processedNavigation.timestamps.domContentLoaded) {
throw new LighthouseError(LighthouseError.errors.NO_DCL);
}
const longTasks = TraceProcessor.getMainThreadTopLevelEvents(processedTrace)
.filter(event => event.duration >= 50);
const quietPeriodInfo = Interactive.findOverlappingQuietPeriods(
longTasks,
networkRecords,
processedNavigation
);
const cpuQuietPeriod = quietPeriodInfo.cpuQuietPeriod;
const timestamp = Math.max(
cpuQuietPeriod.start,
processedNavigation.timestamps.firstContentfulPaint / 1000,
processedNavigation.timestamps.domContentLoaded / 1000
) * 1000;
const timing = (timestamp - processedNavigation.timestamps.timeOrigin) / 1000;View on GitHub (pinned to 9515cd4e58)
Solutions
- Re-run Lighthouse — transient recording issues are the most common cause
- If collecting traces manually, ensure the 'devtools.timeline' and 'loading' trace categories are included
- Verify the target page actually completes a full navigation (check the Network panel for the document request completing)
- Check that the page isn't redirecting in a loop or failing to load the HTML document
Defensive patterns
Strategy: try-catch
Validate before calling
// Pre-check for DCL timestamp before TTI computation
const processedNavigation = await ProcessedNavigation.request(trace, context);
if (!processedNavigation.timestamps.domContentLoaded) {
throw new Error('Trace missing domContentLoaded — re-capture the trace');
} Type guard
/** @type {(nav: LH.Artifacts.ProcessedNavigation) => boolean} */
function hasDCL(nav) {
return Boolean(nav.timestamps.domContentLoaded);
} Try / catch
try {
const tti = await Interactive.request(metricData, context);
} catch (e) {
if (e instanceof LighthouseError && e.code === 'NO_DCL') {
// Trace is incomplete — re-run the audit
return { error: 'Trace missing DCL event, re-run Lighthouse' };
}
throw e;
} Prevention
- Ensure traces capture the full page lifecycle from navigation start through domContentLoaded
- Include the 'devtools.timeline' and 'loading' trace categories
- Verify the target page completes its HTML document load
- Re-run Lighthouse on transient trace failures before investigating further
When it happens
Trigger: Interactive.computeObservedMetric() checks `if (!processedNavigation.timestamps.domContentLoaded)` and throws. This happens when the trace was captured from a page load where the DCL event was never recorded — e.g., the trace started after DCL fired, the page navigated away before DCL, or the trace categories were incomplete.
Common situations: Trace recorded with custom/insufficient trace categories that omit PageLoadEvents. A navigation that was interrupted or redirected before domContentLoaded. A trace from a page that never fully loaded (server hung, connection dropped). Running Lighthouse against a non-standard protocol or a page served by a service worker that bypassed the normal load lifecycle.
Related errors
AI-assisted analysis of GoogleChrome/lighthouse@9515cd4e58 (2026-08-13).
Data as JSON: /api/errors/7031e0d735524014.
Report an issue: GitHub.