# SEO score > How each page's score is calculated and what each check looks at. Source page: https://docs.jazui.com/panel/seo/en Each cached page has two scores from 0 to 100: **What bots get** (the HTML Jazui serves, with your rules applied) and **Original site** (the page as the browser paints it, before rules). The difference tells you how much Jazui improves your page. It's audited on every render; checks that need the network run in the background and site-wide checks run hourly. The score window has **Fix first** (each problem with the points gained by fixing it), one tab per category, the Google and sharing **Preview**, and the change **History**. ## Calculation Each check comes out **Good** (full weight), **Warning** (half) or **Error** (nothing). Each category scores from 0 to 100 and the total is the weighted average: | Category | Weight | |---|---| | Metadata | 25 | | Content | 20 | | Social | 15 | | Structured data, Links, Images and Technical | 10 each | ## Checks | Category | Check (weight) | What it requires | |---|---|---| | Metadata | Page title (3) | Exists, is unique and has 30–60 characters. | | Meta description (3) | 70–160 characters. | | | Canonical URL (2) | Only one, absolute and pointing to the page itself. | | | Language (1) and Viewport (1) | `lang` on ``; viewport with `width=device-width`. | | | Meta robots (3) | `noindex` is an error; `nofollow`, a warning. | | | Unique title and description on the site (2 + 2) | Not repeated on other pages. | | | Canonical target (2) | Answers 200, no chains or loops. | | | Content | Painted content (3) | At least 50 characters after rendering. | | H1 heading (3) | Exactly one, with text. | | | Heading order (1) | No skipped levels. | | | Amount of text (2) | 300 words or more. | | | Text ratio (1) | At least 10% of the HTML. | | | Social | og:title (2) and og:description (2) | Present. | | og:image (3) | Absolute and, if it declares dimensions, at least 1200×630. | | | og:url (1) | Present. | | | X card (1) | `twitter:card`. | | | Share image (2) | Downloads, isn't SVG and is at least 1200×630. | | | Structured data | Structured data (2) | JSON-LD is present. | | Valid JSON-LD (3) | It can be parsed. | | | Structured data types (3) | Recognized types with their required fields. | | | Links | Internal links (3) | The page links to others on the site. | | Link text (2) | No «click here» or empty links. | | | Internal nofollow (1) | No `nofollow` on internal links. | | | Broken links (2) | Cached internal links aren't broken or redirecting. | | | Linked page (2) | Another page links to it (not an orphan). | | | Images | Alt text (3) | More than half without `alt` is an error. | | Image dimensions (2) | `width` and `height`. | | | Format (1) | WebP, AVIF or SVG. | | | Technical | HTTP status (3) | 200. | | Render time (1) | Up to 3 s good; up to 8 s warning. | | | HTML size (1) | Over 1 MB warning; over 5 MB error. | | | hreflang (1) and reciprocal hreflang (1) | Correct language alternates that link to each other. | | | robots.txt (3) and Sitemap (1) | robots.txt allows the page and a sitemap exists. | | ## Raising the score without touching your code - Missing title, description, Open Graph or structured data: an **Inject into ** rule, or ask [your AI to suggest them](https://docs.jazui.com/llms/en/ai-suggestions.txt) and apply them as a rule in one click. - The page is slow or saved incomplete: raise the **maximum time** or use a **page-ready selector**. - Banners or chats cluttering the content: a **Remove elements** rule. - Anything that depends on your HTML (H1, alt text, internal links) is best fixed on your website.