FlowiseAI/Flowise · warning · Error

No relative links found

Error message

No relative links found

What it means

Puppeteer loader equivalent of [172]: thrown when webCrawl/xmlScrape/selectedLinks produced zero pages to scrape.

Source

Thrown at packages/components/nodes/documentloaders/Puppeteer/Puppeteer.ts:277

            }
        }

        let docs: Document[] = []
        if (relativeLinksMethod) {
            if (process.env.DEBUG === 'true') options.logger.info(`[${orgId}]: Start PuppeteerWebBaseLoader ${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}]: PuppeteerWebBaseLoader 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 puppeteerLoader(page)
                if (result) {
                    docs.push(...result)
                }
            }
            if (process.env.DEBUG === 'true') options.logger.info(`[${orgId}]: Finish PuppeteerWebBaseLoader ${relativeLinksMethod}`)
        } else if (selectedLinks && selectedLinks.length > 0) {
            if (process.env.DEBUG === 'true')
                options.logger.info(
                    `[${orgId}]: PuppeteerWebBaseLoader pages: ${JSON.stringify(selectedLinks)}, length: ${selectedLinks.length}`
                )
            for (const page of selectedLinks.slice(0, limit)) {
                const result = await puppeteerLoader(page)
                if (result) {
                    docs.push(...result)
                }
            }

View on GitHub (pinned to abe4a8601a)

Solutions

  1. Confirm the seed page's static HTML contains links.
  2. Verify sitemap.xml for xmlScrape.
  3. Point the seed at a hub/listing page, not a leaf.
  4. Provide selectedLinks explicitly.
  5. Fall back to scraping the seed URL directly.

Example fix

// before
if (!pages || pages.length === 0) throw new Error('No relative links found')
// after
if (!pages || pages.length === 0) {
  options.logger.warn(`[${orgId}]: No relative links at ${url}; scraping seed only`)
  const seedDoc = await puppeteerLoader(url)
  if (seedDoc) docs.push(...seedDoc)
}
Defensive patterns

Strategy: fallback

Validate before calling

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) {
  const seedDoc = await puppeteerLoader(url)
  if (seedDoc) docs.push(...seedDoc)
}

Prevention

When it happens

Trigger: webCrawl found no same-domain anchors; sitemap.xml empty/missing; selectedLinks empty after filtering; target is a JS SPA with no static links.

Common situations: SPA sites; disabled/missing sitemap; crawler blocked; selectedLinks input not wired.

Related errors


AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12). Data as JSON: /api/errors/ba3b4e2c669b180a. Report an issue: GitHub.