{"record":{"id":"bd01bb334a40abee","repo":"lissy93/web-check","slug":"unable-to-find-any-technologies-for-site","errorCode":null,"errorMessage":"Unable to find any technologies for site","messagePattern":"Unable to find any technologies for site","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"warning","filePath":"api/tech-stack.js","lineNumber":33,"sourceCode":"    process.env.CHROMIUM_BIN = await chromium.executablePath();\n    // Avoid conflict with @sparticuz/chromium's extraction path at /tmp/chromium\n    if (!process.env.CHROMIUM_DATA_DIR) {\n      process.env.CHROMIUM_DATA_DIR = '/tmp/chromium-data';\n    }\n  }\n};\n\nconst techStackHandler = async (url) => {\n  await ensureChromiumBin();\n  const { default: Wappalyzer } = await import('wappalyzer');\n  const wappalyzer = new Wappalyzer({});\n\n  try {\n    await wappalyzer.init();\n    const site = await wappalyzer.open(url, {}, { local: {}, session: {} });\n    const results = await site.analyze();\n    if (!results.technologies || results.technologies.length === 0) {\n      throw new Error('Unable to find any technologies for site');\n    }\n    return results;\n  } catch (error) {\n    if (/ENOENT|Browser was not found|Could not find Chromium/i.test(error.message)) {\n      return { skipped: error.message };\n    }\n    throw new Error(error.message);\n  } finally {\n    await wappalyzer.destroy();\n  }\n};\n\nexport const handler = middleware(techStackHandler);\nexport default handler;\n","sourceCodeStart":15,"sourceCodeEnd":48,"githubUrl":"https://github.com/lissy93/web-check/blob/af1a97759fc8bcc43c876c94f2ccb018ce215f90/api/tech-stack.js#L15-L48","documentation":"techStackHandler runs Wappalyzer against the URL; if analysis completes but yields no technologies (empty or absent array), this error is thrown. Note the surrounding catch: browser/Chromium problems are converted to { skipped }, but an empty result is treated as a hard failure.","triggerScenarios":"Sites built with frameworks Wappalyzer cannot fingerprint (static HTML, heavily custom stacks), SPA shells that finish analysis before chunks load, or intranet pages where few fingerprints match.","commonSituations":"Simple brochure sites, custom CMSes without known signatures, newly-released frameworks not in the Wappalyzer ruleset, or aggressive bot-blocking causing degraded page loads that still succeed nominally.","solutions":["Verify manually (view-source, response headers) whether the site truly exposes detectable fingerprints; if not, the error is correct signal","If it is an SPA, increase wait/analysis time before concluding no technologies were found","Treat this as a soft result ({ technologies: [] }) in the caller rather than an exception"],"exampleFix":"// before\nconst results = await techStackHandler(url); // throws on zero technologies\n\n// after\nlet results;\ntry { results = await techStackHandler(url); }\ncatch (e) { if (e.message === 'Unable to find any technologies for site') results = { technologies: [] }; else throw e; }","handlingStrategy":"try-catch","validationCode":"null","typeGuard":"const hasTechnologies = (r) => !!r && Array.isArray(r.technologies) && r.technologies.length > 0;","tryCatchPattern":"try { const r = await techStackHandler(url); }\ncatch (e) {\n  if (e.message === 'Unable to find any technologies for site') return { technologies: [], note: 'no fingerprints detected' };\n  throw e;\n}","preventionTips":["Treat empty detection as a valid outcome, not a failure","For SPAs, allow longer wait before analysis before concluding nothing was found","Keep Wappalyzer rules updated; stale rules miss newly-released frameworks"],"tags":["wappalyzer","tech-detection","fingerprinting","empty-result"],"backgroundTag":"empty-analysis-result","analyzedSha":"af1a97759fc8bcc43c876c94f2ccb018ce215f90","analyzedAt":"2026-08-27T11:44:27.410Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}