nPage.dev

How the score works

A plain, fixed method you can explain to a client: what is checked, what each issue costs and what the score leaves out.

Points per issue

Every page starts at 100. Each issue takes points off, by how much it hurts. The score never drops below 0.

−18Error

Keeps the page out of search or AI answers, such as a noindex, a server error or a page blocked in robots.txt.

−8Warning

Costs clicks or rankings, such as a missing meta description or a title that gets cut off.

−2Tip

Worth doing when there is time, such as image sizes or a few extra headings.

The same page gives the same score every time, until the page changes. There is no sampling and no AI guesswork in the score.

What is read

  1. The HTML your server sendsThe way Google and AI crawlers fetch the page.
  2. The rendered page, when neededClient-side React, Vue and Angular apps are loaded in a real browser and scored as rendered.
  3. What crawlers without JavaScript getGPTBot, ClaudeBot and PerplexityBot do not run JavaScript, so the gap is reported.
  4. Links, images and crawler rulesBroken links, image sizes, robots.txt for each AI crawler and llms.txt.

AI readiness

AI readiness is a separate score: the share of these 15 checks that pass. Checks that do not apply to the page are left out.

  • Opens with a clear answer
  • Headings phrased as questions
  • Short, quotable paragraphs
  • Lists or structured answers
  • Concrete facts and numbers
  • Cites outside sources
  • Questions answered right below
  • Every section opens with the point
  • FAQ or HowTo markup
  • Named author
  • Publish or update date
  • Organisation identity
  • AI crawlers may read it
  • llms.txt present
  • Content is in the HTML

Reading ease

Reading ease uses the formula made for the page language, because a formula for English gives misleading scores in other languages. Higher is easier: 60 to 70 is plain language for most adults.

LanguageFormulaCalculation
EnglishFlesch206.835 − 1.015 × words per sentence − 84.6 × syllables per word
DutchFlesch-Douma206.835 − 0.93 × words per sentence − 77 × syllables per word
GermanAmstad180 − words per sentence − 58.5 × syllables per word
FrenchKandel-Moles207 − 1.015 × words per sentence − 73.6 × syllables per word
SpanishFernández-Huerta206.84 − 1.02 × words per sentence − 60 × syllables per word
ItalianFlesch-Vacca217 − 1.3 × words per sentence − 60 × syllables per word

Every check

Each issue has a fixed code, so a fix can be tracked from one scan to the next. These are the 44 codes of the page scan.

bot-protected

Bot protection

Bot protection blocked the request, so we cannot judge the page.

Fix: Allowlist our scan for a while or check the page by hand.

fetch-failed

Could not fetch

The server did not respond or returned an error.

Fix: Check that the URL is correct and the site is reachable.

status-code

Error status

An error status means visitors and search engines cannot see the page.

Fix: Fix the page or redirect to a working URL.

server-error

Server error

With a 5xx error, visitors and Google get no page.

Fix: Check the server logs and fix the cause.

broken-page

Page unreachable

A 4xx status removes the page from search results.

Fix: Fix the page or add a 301 redirect to the right URL.

redirect

Redirect

Every redirect costs load time and part of the link value.

Fix: Link straight to the final destination.

redirect-chain

Redirect chain

Long chains slow the page down and Google does not always follow them to the end.

Fix: Point internal links and the sitemap straight to the final URL.

redirect-once

One redirect

That is fine, but your links and sitemap can point straight to the target.

Fix: Use the final URL in links and the sitemap.

stale-header

Old page

Outdated pages lose trust and rankings.

Fix: Check that the content is still accurate and refresh it if needed.

title-missing

Title missing

The title is the strongest signal for search results.

Fix: Add a unique title of 30 to 60 characters.

title-length

Title length

Titles that are too short say little, and long ones are cut off in Google.

Fix: Keep the title between 30 and 60 characters and put the main keyword first.

meta-missing

Meta description missing

Without a description Google picks a piece of text itself, often a poor one.

Fix: Write a description of 120 to 160 characters that invites a click.

meta-length

Meta length

Long descriptions are cut off, short ones waste space.

Fix: Write between 120 and 160 characters.

h1-missing

H1 missing

The H1 tells visitors and search engines what the page is about.

Fix: Give the page one clear H1.

h1-multiple

Multiple H1s

Multiple H1s make the topic of the page unclear.

Fix: Keep one H1 and turn the rest into H2s.

h2-many

Many H2s

A lot of subheadings make the page hard to scan.

Fix: Merge headings or split the content over more pages.

img-alt-missing

Alt text missing

Alt text helps search engines, screen readers and Google Images.

Fix: Describe each relevant image briefly and keep the alt text and the file name on the topic of the page. Decorative images get an empty alt.

img-alt-long

Long alt text

Alt texts over 100 characters are not read well.

Fix: Keep alt text short and factual, and on the topic of the page and its file name.

img-dims

Image sizes missing

Without dimensions the page shifts while loading, which hurts Core Web Vitals.

Fix: Set width and height on every image.

img-size

Heavy images

Heavy images slow the page down.

Fix: Compress them and use webp or avif.

canonical-missing

Canonical missing

Without a canonical Google can mix up duplicate versions of the page.

Fix: Add a canonical that points to the page itself.

canonical-other

Canonical elsewhere

Google may then ignore this page in favour of the other one.

Fix: Check that this is intended. If not, point the canonical to this page.

canonical-invalid

Canonical invalid

An invalid canonical is ignored.

Fix: Use a full URL starting with https://.

noindex

Noindex

Google does not include this page in search results.

Fix: Remove noindex if the page should be findable.

js-rendered

JavaScript content

This scan only reads the raw HTML, so the numbers may be too low.

Fix: Check the page in a browser. Server-side rendering makes the content visible to all crawlers.

thin

Thin content

Short pages rarely answer a question in full.

Fix: Add content that really answers the visitor’s question, aiming for 300 words or more.

broken-links

Broken links

Broken links frustrate visitors and waste crawl budget.

Fix: Fix or remove the links.

blocked-links

Links not checkable

This is usually bot protection on the target site.

Fix: Open those links by hand to check them.

soft-404

Soft 404

Google may treat this as a soft 404 and drop the page.

Fix: Return a real 404, or put real content on the page.

no-jsonld

No structured data

JSON-LD helps Google and AI answers understand what the page is.

Fix: Add JSON-LD that fits the page, such as Article, Product or FAQPage.

jsonld-invalid

JSON-LD invalid

Invalid JSON is skipped.

Fix: Validate the block and fix the syntax error.

hreflang

Hreflang without x-default

Without x-default Google does not know which version is the default.

Fix: Add an hreflang="x-default".

og

Open Graph

Shared links then look bare on social media.

Fix: Add og:title, og:description and og:image.

twitter

Twitter Card

Links on X then show no preview card.

Fix: Add twitter:card.

viewport

Viewport missing

Without a viewport the page works poorly on mobile, and Google ranks mobile first.

Fix: Add <meta name="viewport" content="width=device-width, initial-scale=1">.

favicon

Favicon

A favicon makes your result recognisable.

Fix: Add a link rel="icon".

mixed

Mixed content

Browsers block or warn about insecure resources.

Fix: Load everything over https.

dup-title

Duplicate title

Identical titles make pages compete with each other.

Fix: Give every page its own title.

dup-meta

Duplicate meta description

Identical descriptions make pages interchangeable in the results.

Fix: Write a separate description for each page.

orphan

Orphan page

Without internal links visitors and crawlers cannot find the page.

Fix: Link to this page from relevant pages.

sitemap-stale

Old sitemap date

An old lastmod gives Google little reason to come back.

Fix: Update the page or correct the lastmod.

robots-blocked

Blocked by robots.txt

Search engines may not fetch the page, so it does not reach the index.

Fix: Remove the Disallow rule for this page.

ai-blocked

AI crawlers blocked

Blocked AI crawlers cannot cite your site in answers.

Fix: Allow the crawlers in robots.txt if you want to appear in AI answers.

no-llms

No llms.txt

llms.txt is a growing signal for AI answer engines.

Fix: Put an llms.txt in the root with a short description and your most important pages.

What the score does not measure

The score is about the page itself. It does not include rankings, search volume or backlinks. Connect Search Console, GA4, Ahrefs or Semrush in the same chat and prioritize_fixes ranks the fixes by the traffic and revenue they can win.