FlowiseAI/Flowise · warning · Error
No relative links found
Error message
No relative links found
What it means
Thrown by the Playwright loader when a relative-links crawl (webCrawl or xmlScrape) or provided selectedLinks yields zero pages. The crawl helpers returned an empty array, meaning no usable links were discovered from the seed URL.
Solutions
- Verify the seed URL actually contains anchor tags in its served HTML (view-source).
- For xmlScrape, confirm /sitemap.xml exists and lists URLs.
- For webCrawl, ensure the seed page is the one that lists child links (not a leaf).
- Provide selectedLinks explicitly if auto-discovery finds nothing.
- Raise the limit / check that the site is reachable and not blocking the request.
Example fix
// before
const pages = relativeLinksMethod === 'webCrawl' ? await webCrawl(url, limit) : await xmlScrape(url, limit)
if (!pages || pages.length === 0) throw new Error('No relative links found')
// after - fall back to scraping the seed itself
if (!pages || pages.length === 0) {
options.logger.warn(`[${orgId}]: No relative links found at ${url}; scraping seed only`)
const seedDoc = await playwrightLoader(url)
if (seedDoc) docs.push(...seedDoc)
} Defensive patterns
Strategy: fallback
Validate before calling
// Probe whether the seed has crawlable links before committing
async function seedHasLinks(url) {
const html = await (await fetch(url)).text()
return /<a\s+[^>]*href=/i.test(html)
} Try / catch
let pages = relativeLinksMethod === 'webCrawl' ? await webCrawl(url, limit) : await xmlScrape(url, limit)
if (!pages || pages.length === 0) {
// fall back to scraping the seed itself rather than aborting
const seedDoc = await playwrightLoader(url)
if (seedDoc) docs.push(...seedDoc)
} Prevention
- Point webCrawl at a hub/listing page that contains links.
- Verify sitemap.xml exists before using xmlScrape.
- Provide selectedLinks explicitly when discovery is unreliable.
- Render the page (Playwright) before harvesting links for SPAs.
When it happens
Trigger: webCrawl found no same-domain links (JS-rendered SPA with no anchor tags in the static HTML); xmlScrape fetched sitemap.xml but it was empty, missing, or returned an error page; selectedLinks array was empty after filtering.
Common situations: Target site is a JS SPA whose links only render at runtime (Playwright scrape may still work but the link harvest runs on static HTML); robots.txt or sitemap.xml disabled; site blocks the crawler; selectedLinks input not wired up.
Related errors
- No relative links found
- Invalid URL
- Limit cannot be less than 0
- No relative links found
- ${error.message}
AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12).
Data as JSON: /api/errors/0bdd3a32f8b32c71.
Report an issue: GitHub.
Appendix: source
Thrown at packages/components/nodes/documentloaders/Playwright/Playwright.ts:283
}
}
let docs: Document[] = []
if (relativeLinksMethod) {
if (process.env.DEBUG === 'true') options.logger.info(`[${orgId}]: Start PlaywrightWebBaseLoader ${relativeLinksMethod}`)
// if limit is 0 we don't want it to default to 10 so we check explicitly for null or undefined
// so when limit is 0 we can fetch all the links
if (limit === null || limit === undefined) limit = 10
else if (limit < 0) throw new Error('Limit cannot be less than 0')
const pages: string[] =
selectedLinks && selectedLinks.length > 0
? selectedLinks.slice(0, limit === 0 ? undefined : limit)
: relativeLinksMethod === 'webCrawl'
? await webCrawl(url, limit)
: await xmlScrape(url, limit)
if (process.env.DEBUG === 'true')
options.logger.info(`[${orgId}]: PlaywrightWebBaseLoader pages: ${JSON.stringify(pages)}, length: ${pages.length}`)
if (!pages || pages.length === 0) throw new Error('No relative links found')
for (const page of pages) {
const result = await playwrightLoader(page)
if (result) {
docs.push(...result)
}
}
if (process.env.DEBUG === 'true') options.logger.info(`[${orgId}]: Finish PlaywrightWebBaseLoader ${relativeLinksMethod}`)
} else if (selectedLinks && selectedLinks.length > 0) {
if (process.env.DEBUG === 'true')
options.logger.info(
`[${orgId}]: PlaywrightWebBaseLoader pages: ${JSON.stringify(selectedLinks)}, length: ${selectedLinks.length}`
)
for (const page of selectedLinks.slice(0, limit)) {
const result = await playwrightLoader(page)
if (result) {
docs.push(...result)
}
}View on GitHub (pinned to abe4a8601a)