# Free Website SEO Health Check by Jev

> Scan up to 2000 sitemap URLs for crawl errors, HTTP status, metadata gaps, internal links, slow responses, HTTPS, robots.txt, and AEO health by Jev.

- **URL:** https://nqz.ai/website-health-check
- **Cost:** no account, no sign-up, no card. Limited to 2 scans per IP per day.
- **Scope:** up to 2000 same-site URLs per run, discovered from robots.txt and XML sitemaps (nested sitemap indexes followed, up to 50 sitemap files).
- **Method:** a deterministic server-side crawl. No language model judges any page.

## What it is

A diagnostic crawl that fetches robots.txt, discovers same-site XML sitemaps, follows
nested sitemap indexes, and checks each discovered URL. It returns a composite score,
nine independently scored subsections, a prioritised finding list with the affected URLs
attached, page-level evidence, and an evidence-bound remediation prompt.

**It is not a ranking prediction.** A higher score does not guarantee rankings, traffic,
indexing or conversions. The purpose is to surface observable problems, explain why each
matters, and give a verifiable path to repair.

## Subsections, and what each one actually measures

| Subsection | Measured from | Scored |
|---|---|---|
| Crawl & indexability | robots.txt reachability, root-level disallow, declared sitemap locations, nested sitemap indexes | yes |
| HTTP status health | the final response for every discovered URL, grouped 2xx / 3xx / 4xx / 5xx / failed | yes |
| Internal links & architecture | inbound link counts, click depth from the root, orphan candidates (noindex pages excluded), generic anchor text | yes |
| GEO & helpful-content signals | title, H1, meta description, canonical, viewport, word count, noindex, plus authorship (a visible byline AND an author in JSON-LD, counted separately), outbound citations with their `rel`, update language and caveats | yes |
| Duplicate content & keyword cannibalisation | token overlap between page pairs — see below | yes |
| AEO & Decision Engine (DEO) | Schema.org JSON-LD, machine-comparable tables, social preview cards, pricing signals, trust/policy links, conversion CTAs | yes |
| Sitemap accuracy | sitemap URLs compared against the pages that actually resolved | yes |
| Server response performance | server-side elapsed time per page, outliers above 1.5s, median across successful fetches | yes |
| HTTPS & security | HTTPS resolution, robots.txt reachability, insecure HTTP references (mixed content) | yes |
| Mobile & Core Web Vitals | viewport meta tag presence only | **no — see "Not measured"** |

## Duplicate content and keyword cannibalisation

This is scored as its own subsection, and it is reported as page **pairs** rather than as
a count. Two comparisons run across every crawled page:

1. **Near-duplicate.** A token fingerprint is built from the title, H1 and meta description
   together. Any pair whose overlap reaches **0.82** is flagged.
2. **Cannibalisation clue.** The **title alone** is compared, ignoring pages whose title
   carries fewer than 2 meaningful tokens. Any pair at **0.75** or above is flagged,
   because two pages whose titles say nearly the same thing are usually chasing one query.

Tokens are lower-cased, stripped of punctuation, and words of two characters or fewer are
discarded, so stopwords cannot create a false match. Overlap is the intersection over the
union of the two token sets.

The report names both URLs in every flagged pair, with each page's word count, so the
output is a worklist rather than a statistic.

**Neither signal is a verdict.** Similar titles are a reason to open two pages and compare
the query each is meant to answer — not proof that either should be deleted, merged or
redirected. Product, location and comparison series legitimately share title structure.

## Not measured, and deliberately excluded from the score

- **Core Web Vitals (LCP, INP, CLS), mobile usability, tap targets, responsive layout.**
  These need a rendered browser. The crawl checks for a viewport tag and reports the
  subsection as *not measured* rather than scoring it zero, so an unmeasurable category
  cannot drag the composite down. Pair this audit with Lighthouse or Search Console.
- **JavaScript-rendered content.** The crawl sees the HTML returned to a server-side
  request. Content injected after JS execution is not evaluated.
- **Index coverage and the engine-selected canonical.** These require Search Console access.
- **Whether an internal link is broken.** The crawl records links pointing outside the set
  of pages it fetched, but does not request them, so it reports the count without calling
  them broken and without charging the architecture score for it. A link to a healthy page
  that simply is not in the sitemap looks identical, from here, to a dead one.
- **Backlinks, search volume, and competitor data.** Out of scope for this tool.

## Measurement integrity

Observation and interpretation are kept apart. "HTTP 404" is an observation. "Redirect this
or remove it from the sitemap" is a recommendation that depends on context. Coverage is
reported separately from the score, so a 90/100 from a partial crawl is never presented as
equivalent to a 90/100 from full coverage.

## API

```
POST https://nqz.ai/api/website-health-check
Content-Type: application/json

{ "url": "https://example.com" }
```

Returns the composite score, per-subsection scores and signals, per-page evidence, crawl
metrics and a remediation prompt. Rate limited to 2 scans per IP per day; exceeding it
returns HTTP 429 with `retry_after_s`.

## Related

- Human-readable page: https://nqz.ai/website-health-check
- Other free tools: https://nqz.ai/free-ai-tools
- Capability reference for agents: https://nqz.ai/llms-full.txt
