n8n-io/n8n · error · Error
HTML " " contains no extractable text.
Error message
HTML "${attachment.fileName}" contains no extractable text. What it means
The HTML pipeline (parseHTML → strip script/style → turndown to markdown) ran to completion but produced no non-whitespace markdown — the body contains no extractable text content (empty page, image-only, or all content lives in stripped tags like script/style). This fires after successful parsing, so the document structure is fine but the content is absent.
Solutions
- Verify the page has visible body text and is not a shell page that loads content via JS (stripped script tags)
- Attach a server-rendered/static version of the page
- If content is inside iframes, extract each frame document separately
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/@n8n/instance-ai/src/parsers/html-parser.ts:65 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/2d50ba280f362562.
Report an issue: GitHub.
Appendix: source
Thrown at packages/@n8n/instance-ai/src/parsers/html-parser.ts:65
const TurndownService = TurndownModule.default;
const dom = linkedom.parseHTML(html) as { document: StrippableDocument };
const htmlDocument: StrippableDocument = dom.document;
const title = htmlDocument.querySelector('title')?.textContent?.trim() ?? undefined;
for (const tag of STRIPPABLE_TAGS) {
for (const el of Array.from(htmlDocument.querySelectorAll(tag))) {
el.remove();
}
}
const sourceHtml = htmlDocument.body?.innerHTML ?? '';
const turndown = new TurndownService({ headingStyle: 'atx', codeBlockStyle: 'fenced' });
const markdown = turndown.turndown(sourceHtml).trim();
if (!markdown) {
throw new Error(`HTML "${attachment.fileName}" contains no extractable text.`);
}
if (markdown.length > MAX_RESULT_CHARS) {
return { text: markdown.slice(0, MAX_RESULT_CHARS), title, truncated: true };
}
return { text: markdown, title, truncated: false };
}
View on GitHub (pinned to 5ac6606e81)