39 Grade F

CrawlGap AI-visibility audit

Node.js — Run JavaScript Everywhere

https://nodejs.org/ · 2026-09-28T13:09:28.006Z · 200 in 1322ms

Not yet quotable: AI crawlers can reach the site but there is too little here for an assistant to quote.

Render gap 0% · raw 241 words · rendered 241 words · robots.txt found · sitemap found

Homepage screenshot
Crawler access100
Readability without JavaScript78
Machine-readable structure33
Answer-readiness29
Technical foundations100

Findings

high Readability without JavaScript

Very little text on the page for either humans or machines

Evidence
241 words of body text after rendering.
Why it costs citations
Assistants need extractable prose to quote. A page that is mostly imagery and headings gives them nothing to lift, so a competitor with written detail wins the mention.
Fix
Add 400+ words that answer the questions buyers actually ask: what you do, who for, where, what it costs, how to start.
high Machine-readable structure

No Organization / LocalBusiness structured data

Evidence
No JSON-LD found in the raw HTML.
Why it costs citations
This is the block that tells an assistant the entity name, what kind of business it is, where it operates and how to contact it. Without it the assistant has to guess from prose, and it frequently guesses a competitor with clearer markup.
Fix
Add a server-rendered JSON-LD Organization (or LocalBusiness for a physical location) with name, url, logo, description, telephone, address, sameAs links to your profiles, and areaServed.
high Answer-readiness

No headings are phrased as questions people actually ask

Evidence
1 headings, none in question form.
Why it costs citations
Assistants retrieve by matching a user question to a passage. A heading that restates the question, followed immediately by a direct answer, is the highest-probability shape for being lifted and cited.
Fix
Convert or add headings like "How much does X cost in <city>?", "How long does X take?", "Do you offer X on weekends?" — each followed by a 2–3 sentence direct answer.
high Answer-readiness

No machine-readable way to contact the business

Evidence
tel: links 0, mailto/emails 0, WhatsApp links 0. Phone-shaped strings in text: 2605.
Why it costs citations
When an assistant recommends a business, the next thing it tries to supply is how to reach it. A phone number that exists only inside an image or a JS widget cannot be handed to the customer, so the recommendation goes to whoever published a plain tel: link.
Fix
Add <a href="tel:+91…">, a mailto: link, and a wa.me click-to-chat link in the server-rendered HTML, plus telephone/email in your Organization schema.
medium Machine-readable structure

No FAQPage structured data

Evidence
No FAQPage / Question markup in the raw HTML.
Why it costs citations
Question-and-answer markup is the format answer engines lift most directly, because each answer is already a self-contained, attributable unit.
Fix
Publish 6–10 real customer questions with short direct answers, marked up as FAQPage, rendered server-side.
medium Answer-readiness

No lists or tables in the raw HTML

Evidence
4 paragraphs, 0 lists, 0 tables.
Why it costs citations
Lists and tables are the easiest structures for an assistant to extract cleanly and reproduce — pricing tiers, service areas, timings, inclusions.
Fix
Convert dense prose about pricing, coverage and process into <ul> and <table> markup.
low Machine-readable structure

No BreadcrumbList structured data

Evidence
Not found in raw HTML.
Why it costs citations
Breadcrumbs help a retrieval system understand where a page sits in the site hierarchy, which improves how it is described when cited.
Fix
Add BreadcrumbList JSON-LD on inner pages.
low Answer-readiness

No machine-readable dates on the page

Evidence
No <time datetime> elements and no dated schema.
Why it costs citations
Assistants prefer sources they can date, and prefer recent ones when a question is time-sensitive.
Fix
Add <time datetime="YYYY-MM-DD"> for published/updated, and datePublished/dateModified in schema.
pass Crawler access

All major answer-engine crawlers are allowed

Evidence
OAI-SearchBot, Claude-SearchBot, PerplexityBot, Googlebot, bingbot, Applebot, Amazonbot, DuckAssistBot, YouBot
Why it costs citations
Nothing in robots.txt stands between the site and AI citations.
pass Crawler access

llms.txt is published

Evidence
15010 bytes at /llms.txt.
Why it costs citations
An emerging, not-yet-universally-consumed convention. Harmless and occasionally useful; do not expect ranking effects.
pass Readability without JavaScript

Content is present in the raw HTML

Evidence
Raw HTML carries 241 of 241 rendered words (100%).
Why it costs citations
AI crawlers receive substantially the same content a human sees. This is the single biggest thing most sites get wrong, and it is right here.
pass Technical foundations

Sitemap found with 1651 URLs

Evidence
https://nodejs.org/sitemap.xml
Why it costs citations
Crawlers can enumerate your pages.

What an AI crawler reads

Skip to contentRun JavaScript EverywhereNode.js® is a free, open-source, cross-platform JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts.Get Node.js®Get Node.js®Get security supportfor EOL Node.js versionsNode.js is proudly supported by the partners above and more. Create an HTTP ServerWrite TestsRead and Hash a FileStreams PipelineWork with Threads// server.mjs import { createServer } from 'node:http'; const server = createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World!\n'); }); // starts a simple http server locally on port 3000 server.listen(3000, '127.0.0.1', () => { console.log('Listening on 127.0.0.1:3000'); }); // run with `node server.mjs`JavaScriptCopy to clipboard// tests.mjs import assert from 'node:assert'; import test from 'node:test'; test('that 1 is equal 1', () => { assert.strictEqual(1, 1); }); test('that throws as 1 is not equal 2', () => { // throws an exception because 1 != 2 assert.strictEqual(1, 2); }); // run with `node tests.mjs`JavaScriptCopy to clipboard// crypto.mjs import { createHash } from 'node:crypto'; import { readFile } from 'node:fs/promises'; const hasher = createHash('sha1'); hasher.setEncoding('hex'); // ensure you have a `package.json` file for this test! hasher.write(await readFile('package.json')); hasher.end(); const fileHash = hasher.read(); // run with `node crypto.mjs`JavaScriptCopy to clipboard// streams.mjs import { crea

What a human sees after JavaScript

Skip to contentRun JavaScript EverywhereNode.js® is a free, open-source, cross-platform JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts.Get Node.js®Get Node.js®Get security supportfor EOL Node.js versionsNode.js is proudly supported by the partners above and more. Create an HTTP ServerWrite TestsRead and Hash a FileStreams PipelineWork with Threads// server.mjs import { createServer } from 'node:http'; const server = createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World!\n'); }); // starts a simple http server locally on port 3000 server.listen(3000, '127.0.0.1', () => { console.log('Listening on 127.0.0.1:3000'); }); // run with `node server.mjs`JavaScriptCopy to clipboard// tests.mjs import assert from 'node:assert'; import test from 'node:test'; test('that 1 is equal 1', () => { assert.strictEqual(1, 1); }); test('that throws as 1 is not equal 2', () => { // throws an exception because 1 != 2 assert.strictEqual(1, 2); }); // run with `node tests.mjs`JavaScriptCopy to clipboard// crypto.mjs import { createHash } from 'node:crypto'; import { readFile } from 'node:fs/promises'; const hasher = createHash('sha1'); hasher.setEncoding('hex'); // ensure you have a `package.json` file for this test! hasher.write(await readFile('package.json')); hasher.end(); const fileHash = hasher.read(); // run with `node crypto.mjs`JavaScriptCopy to clipboard// streams.mjs import { crea

robots.txt

User-Agent: *
Allow: /dist/latest/
Allow: /dist/latest/docs/api/
Allow: /api/
Disallow: /dist/
Disallow: /docs/

Sitemap: https://nodejs.org/sitemap.xml
Sitemap: https://nodejs.org/learn/sitemap.xml