Public scoring scale
How DeskSEO scores a site
Twenty criteria with weights adding up to 100. Each criterion scores zero, partial or full; the final score is the sum of (weight × how fully it is met) divided by the total weight of the items that apply, scaled to 100.
Weights and how each item is scored
Full points when the homepage answers 200 over HTTPS and is HTML. If this fails, every content item (title and below) scores 0.
Full points when http:// redirects with 301 or 308 to https://. A 302/303/307 redirect earns half. Port 80 closed entirely also earns full points.
Full points when the www (or non-www) host 301-redirects to the main host, or does not exist. A 302 earns half. Both answering 200 scores 0 — half if the secondary host's canonical points to the main host.
Time to first byte measured from the checker: up to 0.6 s full points, up to 1.5 s half, slower 0. These are DeskSEO thresholds, not numbers published by Google.
HTML over the wire (compressed) up to 100 KB earns full points, up to 250 KB half.
A title of 10–65 characters earns full points; longer or shorter earns half; none scores 0. Google publishes no character limit; 65 is a truncation warning threshold.
A meta description of 50–170 characters earns full points; outside that range half; none 0.
Exactly one H1 earns full points; several H1s half; none 0.
An absolute https canonical pointing to the page itself earns full points. Minus 0.3 for several different tags, minus 0.3 for a relative URL, minus 0.5 for http://. Pointing to another domain or page scores 0.
Full points when the page has no noindex (meta robots/googlebot or the X-Robots-Tag header) and robots.txt does not block Googlebot from the homepage.
The sitemap is found via the Sitemap line in robots.txt, then /sitemap.xml and /sitemap_index.xml. Valid, with https URLs on the same domain: full points. Minus 0.4 for URLs on another host or on http, minus 0.3 for broken child sitemaps; an empty sitemap keeps 0.3; invalid XML keeps 0.2. For a sitemap index, up to 10 child files are read.
At least one JSON-LD block and none with syntax errors: full points. Some broken blocks: 0.3 (0 if every block is broken).
og:title, og:description and og:image each earn a third. An og:image that fails to load loses a third.
A meta viewport containing width earns full points.
Up to 10% of body images without an alt attribute earns full points; up to 30% half. alt="" (decorative image) counts as present.
Up to 6 internal links, spread across the homepage, are tested (login, cart and search pages are skipped). None broken: full points. One broken: half. Two or more: 0.
Machine-readable words in the body (scripts, styles, noscript, templates and SVG removed): 300+ words full points, 150+ half.
Scored only when the page uses hreflang: valid codes, absolute URLs, and a self-referencing entry. Each problem costs half.
Scored only when the site's IndexNow key is known (the public checker does not ask for it, so this item is always "not applicable" there).
The html tag has a lang attribute: full points.
How the checker measures
- It takes the visitor's path: real DNS resolution, through Cloudflare if the site uses it, with HTTPS certificates verified. It does not pretend to be Googlebot; it identifies itself as
DeskSEOBot. - It fetches the homepage (or the page you enter), http://, the www host, robots.txt, the sitemap, the og:image and up to 6 internal links: roughly 15–25 requests per check.
- It does not run JavaScript. Word counts, H1s and links are what the server's HTML contains — what Google receives on its first crawl pass.
- TTFB is measured from a checker located in Malaysia, so it can differ from your own location by tens or hundreds of milliseconds.
- Only public Internet addresses are fetched: private IP ranges, localhost and ports other than 80/443 are refused.
All 51 issue codes
Critical · 12
- Homepage is unreachable (DNS / connection / SSL) — Your SEO score dropped: a 15-minute triage checklist
- HTTPS certificate error — HTTPS, www and redirect chains: getting one clean URL
- Homepage returns a 5xx error — Your SEO score dropped: a 15-minute triage checklist
- Homepage does not return 200 — Your SEO score dropped: a 15-minute triage checklist
- Homepage is not HTML
- Homepage is a parked / for-sale page, not a real site
- Missing title tag — Title tags and meta descriptions that get clicked
- Canonical points to another host or page — Canonical tags: how to set them and the mistakes that cost rankings
- Homepage is noindex (meta robots / X-Robots-Tag) — noindex, robots.txt and the mistakes that hide a whole site
- robots.txt blocks the whole site — noindex, robots.txt and the mistakes that hide a whole site
- robots.txt blocks the homepage for Googlebot — noindex, robots.txt and the mistakes that hide a whole site
- An internal link returns 5xx
Warning · 18
- http:// does not 301-redirect to https — HTTPS, www and redirect chains: getting one clean URL
- www and non-www both return 200 (duplicate host) — HTTPS, www and redirect chains: getting one clean URL
- TTFB over 1.5 seconds — Server response time (TTFB): what is slow and how to fix it
- Missing meta description — Title tags and meta descriptions that get clicked
- Homepage has no H1 — Title tags and meta descriptions that get clicked
- Missing canonical tag — Canonical tags: how to set them and the mistakes that cost rankings
- Canonical uses http:// instead of https — Canonical tags: how to set them and the mistakes that cost rankings
- More than one canonical tag — Canonical tags: how to set them and the mistakes that cost rankings
- No sitemap.xml found — XML sitemaps that actually help: format, size limits and common errors
- sitemap.xml has XML syntax errors — XML sitemaps that actually help: format, size limits and common errors
- Sitemap contains no URLs — XML sitemaps that actually help: format, size limits and common errors
- Sitemap contains URLs on another host or on http:// — XML sitemaps that actually help: format, size limits and common errors
- A child sitemap (in a sitemap index) is broken — XML sitemaps that actually help: format, size limits and common errors
- JSON-LD has syntax errors — Structured data and Open Graph tags: the minimum every site needs
- og:image does not load — Structured data and Open Graph tags: the minimum every site needs
- Missing meta viewport (mobile)
- Broken internal links on the homepage (sample)
- Thin homepage (under 300 words) — What crawlers see on a JavaScript-rendered site
Minor · 21
- http:// redirects with 302 (temporary) instead of 301 — HTTPS, www and redirect chains: getting one clean URL
- www redirects with 302 instead of 301 — HTTPS, www and redirect chains: getting one clean URL
- Redirect chain of 2+ hops — HTTPS, www and redirect chains: getting one clean URL
- TTFB 0.6–1.5 seconds — Server response time (TTFB): what is slow and how to fix it
- Compressed HTML over 100 KB — Server response time (TTFB): what is slow and how to fix it
- Server does not gzip/brotli-compress HTML — Server response time (TTFB): what is slow and how to fix it
- Title longer than 65 characters — Title tags and meta descriptions that get clicked
- Title shorter than 10 characters — Title tags and meta descriptions that get clicked
- Meta description longer than 170 characters — Title tags and meta descriptions that get clicked
- Meta description shorter than 50 characters — Title tags and meta descriptions that get clicked
- Homepage has more than one H1 — Title tags and meta descriptions that get clicked
- Canonical is a relative URL — Canonical tags: how to set them and the mistakes that cost rankings
- robots.txt missing or broken (not 200/404) — noindex, robots.txt and the mistakes that hide a whole site
- robots.txt does not declare a Sitemap — XML sitemaps that actually help: format, size limits and common errors
- No JSON-LD structured data — Structured data and Open Graph tags: the minimum every site needs
- Missing og:title / og:description / og:image — Structured data and Open Graph tags: the minimum every site needs
- More than 10% of homepage images lack alt text
- hreflang uses a wrong code or a relative URL
- hreflang set has no self-reference
- IndexNow key file /<key>.txt does not return the key
- Missing lang attribute on <html>