What is On-Page SEO score and how is it calculated?
onpage_score
is an OnPage API proprietary metric that estimates the quality of technical page optimization. It considers critical on-page errors and warnings detected on the page.
The score is provided on a 100-point scale. 100 is the highest possible score indicating that the page doesn’t have any critical errors and warnings and thus is well optimized. 0 is the poorest score, meaning that the page accumulates all the possible errors and warnings and thus is not optimized at all.
The metric can be found in the following endpoints:
In the majority of endpoints, onpage_score
provides the score for a single page. However, in the Summary endpoint, the score is related to all pages of a domain. To learn how the onpage_score
of a domain is calculated, refer to this article.
How is On-Page Score calculated?
OnPage API divides on-page issues into two categories: critical errors and warnings. Each issue has its own value that is used as a variable in the calculation.
The score is calculated by the following formula:
Sc = 100 – ∑(En/78) x 55 – ∑(Wn/123) x 45
- Sc — OnPage score of a page;
- 100 — the maximum OnPage score the page can receive;
- En — the value of an error the page has (see the table below);
- 78 — the total value of all errors we take into account;
- 55 — the maximum OnPage score of the Errors category;
- Wn — the value of a warning the page has (see the table below);
- 123 — the total value of all warnings we take into account;
- 45 — the maximum OnPage score of the Warnings category.
Assume that the page failed two checks from the Errors category (let it be high_loading_time
and is_http
) and two checks from the Warnings category (duplicate_title
, no_image_alt
). In this case, the calculation will be performed as in the following example:
1 First, we calculate the score of each check.
Errors:
high_loading_time
10 / 78 * 55 = 7.05.
is_http
8 / 78 * 55 = 5.64
Warnings:
duplicate_title
10 / 123 * 4 = 3.65
no_image_alt
8 / 123 * 45 = 2.92
2 Then, we sum up the check scores.
Errors:
7.05 + 5.64 = 12.69
Warnings:
3.65 + 2.92 = 6.57
3 Finally, we subtract the resulting values from the maximum possible OnPage score:
100 – 12.69 – 6.57 = 80.74
4 The onpage_score
in this case is 80.74
Critical errors:
Error name | Error description | Value if true | Value if false |
high_loading_time | page loads longer than 3 seconds | 10 | 0 |
redirect_loop | page has a redirect chain that starts and ends at the same URL (e.g., Page A redirects to Page B, Page B redirects to Page C, and Page C redirects back to Page A) | 10 | 0 | canonical_to_broken | page with the canonical link element points to a 404 page | 9 | 0 | recursive_canonical | page contains rel=”canonical” tag to another page, which in turn, refers back to the initial page | 9 | 0 | is_http | page has an insecure HTTP protocol | 8 | 0 | no_title | page has no title tag | 7 | 0 | duplicate_title_tag | page has more than one title tag | 5 | 0 | broken_links | page has links to broken pages | 5 | 0 | links_relation_conflict | page has a mix of both follow and nofollow incoming internal links | 5 | 0 | canonical_to_redirect | canonical page points to a page that redirects elsewhere | 3 | 0 | canonical_chain | canonical page points to a page that has a canonical pointing elsewhere | 3 | 0 | duplicate_content | page has duplicate content | 4 | 0 | Total value of all errors = 78 | Maximum OnPage score = 55 |
Warnings:
Warning name | Warning description | Value if true | Value if false |
duplicate_title | page has duplicate title tags | 10 | 0 |
broken_resources | page contains broken resources | 10 | 0 | large_page_size | the size of a page exceeds 256 kbytes | 10 | 0 | duplicate_description | page has duplicate description tags | 9 | 0 | no_image_alt | page has images without alt tags | 8 | 0 | seo_friendly_url | page with SEO-friendly URL | 0 | 7 | flash | page has flash elements | 5 | 0 | no_description | page has an empty description tag | 5 | 0 | duplicate_meta_tags | page has more than one meta tag of the same type | 5 | 0 | no_h1_tag | page has an empty h1 tag | 5 | 0 | irrelevant_description | description tag of a page is irrelevant to its content | 5 | 0 | title_too_long | title tag of a page exceeds 65 characters | 5 | 0 | is_orphan_page | page has no internal links pointing to it | 5 | 0 | irrelevant_title | title tag of a page is irrelevant to its content | 5 | 0 | title_too_short | title tag of a page is shorter than 30 characters | 5 | 0 | no_doctype | page has no doctype | 4 | 0 | high_content_rate | page has the plaintext size to page size ratio of more than 0.9 | 3 | 0 | low_character_count | page has less than 1024 characters | 3 | 0 | high_character_count | page has more than 256,000 characters | 3 | 0 | low_readibility_rate | page scored less than 15 points on the Flesch–Kincaid readability test | 3 | 0 | deprecated_html_tags | page has deprecated HTML tags | 3 | 0 | lorem_ipsum | page has lorem ipsum content | 3 | 0 | Total value of all warnings = 123 | Maximum OnPage score = 45 |