Every check, grouped by area. The severity shown is the default for the check, and a finding can carry a lower one. A rule of thumb is a practical guide for a threshold, not a standard.
| Id | Severity | Check | Why it matters | How to fix | Rule of thumb |
|---|---|---|---|---|---|
SEO-TITLE-001 |
error | Page has no title | The title is the main heading shown in search results and browser tabs. Without one, search engines pick their own text. | Add a unique <title> that describes the page in about 50 to 60 characters. | None |
SEO-TITLE-002 |
info | Title is very short or very long | Very short titles say little about the page. Search results cut long titles off, so the end may never be seen. | Aim for a title between 10 and 60 characters that puts the main words first. | Fails below 10 or above 60 characters. Search results truncate by pixel width, so 60 characters is a rule of thumb. |
SEO-TITLE-003 |
warning | Title is shared with other pages | Pages with the same title are hard to tell apart in search results and in browser tabs. | Give each page its own title that describes what is unique about it. | None |
SEO-TITLE-004 |
warning | Page has more than one title | Browsers and search engines have to choose between the titles, and they may choose the wrong one. | Keep a single <title> element in the document head and remove the rest. | None |
SEO-DESC-010 |
warning | Page has no meta description | Search engines often use the meta description as the snippet under the title. Without one they choose text from the page. | Add a <meta name="description"> that summarises the page in one or two sentences. | None |
SEO-DESC-011 |
info | Meta description is very short or very long | A very short description gives searchers little reason to click. Search results cut long descriptions off. | Write a description between 50 and 160 characters that says what the page offers. | Fails below 50 or above 160 characters. Snippet length varies by device and query, so 160 characters is a rule of thumb. |
SEO-DESC-012 |
warning | Meta description is shared with other pages | Identical descriptions make different pages look the same in search results. | Write a description for each page that reflects its own content. | None |
SEO-H1-020 |
warning | Page has no h1 heading | The h1 tells readers and search engines what the page is about. | Add one <h1> that states the topic of the page. | None |
SEO-H1-021 |
info | Page has more than one h1 heading | HTML allows more than one h1, but a single one keeps the page outline clear for readers and search engines. | Use one <h1> for the page topic and <h2> or lower for sections. | None |
SEO-CANON-030 |
warning | Page has no canonical link | A canonical link tells search engines which URL to index when the same content is reachable at several addresses. | Add <link rel="canonical"> pointing at the preferred URL of the page, usually the page itself. | None |
SEO-CANON-031 |
error | Page has conflicting canonical links | When the canonical links disagree, search engines may ignore them and choose for themselves. | Keep one canonical link per page. Check whether a plugin or theme adds a second one. | None |
SEO-CANON-032 |
error | Canonical points to a broken or redirecting URL | A canonical that does not return a normal page sends search engines to a dead end, so the page may drop out of the index. | Point the canonical at the final URL of a page that returns status 200. | None |
SEO-CANON-033 |
warning | Canonical points to a different origin | A canonical on another host or scheme asks search engines to index that other site instead of this page. | Use a canonical on the same scheme and host as the page, unless the move is intended. | None |
SEO-INDEX-040 |
info | Page is set to noindex | Search engines will not list a noindex page. This is listed so you can confirm it is intended. | If the page should appear in search, remove the noindex directive from the meta robots tag and the X-Robots-Tag header. | None |
SEO-INDEX-041 |
error | A noindex page is listed in the sitemap | The sitemap says the page should be indexed while the page says it should not, so the two signals contradict each other. | Remove the page from the sitemap, or remove the noindex directive. | None |
SEO-INDEX-042 |
error | A sitemap URL is blocked by robots.txt | The sitemap offers a URL that robots.txt forbids crawlers to fetch. Search engines cannot read a page they may not crawl. | Remove the URL from the sitemap, or change the robots.txt rule that blocks it. | None |
SEO-INDEX-043 |
error | The start page is set to noindex | A noindex start page keeps the home of the site out of search results. | Remove the noindex directive from the start page meta robots tag and X-Robots-Tag header. | None |
SEO-LANG-050 |
warning | Page has no lang attribute | The lang attribute tells browsers, search engines and screen readers which language the page is in. | Add a lang attribute to the <html> element, for example <html lang="en">. | None |
SEO-VIEW-051 |
error | Page has no viewport meta tag | Without a viewport tag, phones show the page zoomed out as a desktop layout, which is hard to read and use. | Add <meta name="viewport" content="width=device-width, initial-scale=1"> to the head. | None |
SEO-OG-060 |
info | Open Graph tags are missing | Open Graph tags control the title, text and image shown when the page is shared on social networks and in chat apps. | Add og:title, og:description and og:image meta tags to the head. | None |
SEO-LD-070 |
warning | Structured data is not valid JSON | Search engines skip a JSON-LD block they cannot parse, so the page loses any rich results it was meant to earn. | Fix the syntax of the JSON-LD block. A JSON validator will point at the error. | None |
SEO-ROBOTS-080 |
warning | No robots.txt file | Crawlers look for robots.txt first. Without one they assume everything may be crawled and they cannot find the sitemap from it. | Publish a robots.txt at the root of the site, even a short one that links to the sitemap. | None |
SEO-ROBOTS-081 |
error | robots.txt blocks the whole site | It tells search engine crawlers not to fetch any page of the site. | Remove the Disallow: / rule for the all-crawlers group, unless the site is meant to stay private. | None |
SEO-ROBOTS-082 |
error | robots.txt returns a server error | When robots.txt answers with a server error, search engines may stop crawling the site until it recovers. | Make robots.txt answer with status 200, or status 404 if you have none. Check the server logs for the error. | None |
SEO-MAP-090 |
warning | No sitemap found | A sitemap helps search engines find every page, especially new pages and pages with few links to them. | Publish a sitemap.xml and list it in robots.txt. | None |
SEO-MAP-091 |
info | robots.txt does not reference the sitemap | A Sitemap line in robots.txt lets every crawler find the sitemap without being told about it. | Add a line such as Sitemap: https://example.com/sitemap.xml to robots.txt. | None |
SEO-MAP-092 |
error | A sitemap URL does not return status 200 | The sitemap should list only live pages. Broken or redirecting entries waste crawl effort. | Remove the URL from the sitemap, or list its final address. | None |
SEO-MAP-093 |
error | A sitemap file could not be parsed | Search engines ignore a sitemap they cannot read, so none of its URLs are submitted. | Check that the file is valid sitemap XML and is served with status 200. | None |
SEO-MAP-094 |
info | A sitemap URL is not linked from any crawled page | A page that nothing links to is hard for visitors and crawlers to reach. It may be an orphan. | Link the page from a relevant page or the navigation, or remove it from the sitemap if it is retired. | Only evaluated when the crawl was not cut short, because an uncrawled page might hold the missing link. |
SEO-THIN-100 |
info | Page has little text | Pages with very little text give search engines little to rank. Some pages, such as contact or gallery pages, are fine this way. | If the page should rank, add useful text that answers what visitors come for. | Fails below 150 words of visible text. This is a rule of thumb and may be fine for contact or gallery pages. |
| Id | Severity | Check | Why it matters | How to fix | Rule of thumb |
|---|---|---|---|---|---|
HEALTH-LINK-001 |
error | Broken internal link | Visitors and search engines who follow the link reach an error page instead of content. | Fix the link to point at a working page, or restore the missing page and redirect it if it moved. | A link whose target answered 429 or 503 during the audit is reported as not verified, because the answer says nothing about whether the page exists. |
HEALTH-LINK-002 |
warning | Internal link points at a redirect | Each redirect adds a round trip for visitors and crawlers. | Update the link to point straight at the final address. | None |
HEALTH-REDIR-010 |
warning | Redirect chain has more than one hop | Every extra hop slows the page down and gives crawlers another chance to give up. | Redirect the first address straight to the final address. | None |
HEALTH-REDIR-011 |
error | Redirect loop or too many redirects | Browsers and crawlers give up on a loop, so the page cannot be reached at all. | Remove the redirect that points back at an earlier address in the chain. | Fails on a loop, or on a chain of more than 10 hops, which the crawler stops following. |
HEALTH-HTTPS-020 |
error | HTTP is not upgraded to HTTPS | Plain HTTP traffic can be read and changed on the way, and browsers label such sites as not secure. | Install a certificate, serve the site over HTTPS, and redirect every HTTP address to its HTTPS version. | None |
HEALTH-HTTPS-021 |
error | Mixed content on an HTTPS page | Browsers block or warn about resources loaded over HTTP on a secure page, so the page can look broken. | Change the resource addresses to HTTPS, or remove them. | None |
HEALTH-HTTPS-022 |
warning | HTTPS page links to an internal page over HTTP | Visitors who follow the link leave the secure version of the site and may hit an extra redirect. | Change the link to use https://. | None |
HEALTH-HOST-023 |
warning | www and apex hosts both answer without a redirect | Two hosts serving the same site can split links and ranking signals between them, and create duplicate pages. | Pick one host as the main one and redirect the other to it. | None |
HEALTH-404-030 |
warning | Missing pages return 200 (soft 404) | Search engines may index error pages as real content, and broken links are harder to find. | Make the server return status 404 for addresses that do not exist. | None |
HEALTH-FAV-040 |
info | No favicon | Browsers ask for a favicon to show in tabs and bookmarks. Without one they show a generic icon, and the requests end in 404 errors. | Add a favicon link to the page head, or serve a file at /favicon.ico. | None |
HEALTH-HDR-050 |
warning | No Strict-Transport-Security header | Without this header, browsers may still try plain HTTP first, which leaves a window for downgrade attacks. | Send Strict-Transport-Security with a max-age of at least six months on every HTTPS response. | None |
HEALTH-HDR-051 |
info | No Content-Security-Policy header | A content security policy limits where scripts and other resources can load from, which reduces the damage of injected code. | Add a Content-Security-Policy header. Start in report-only mode if the site loads many third-party resources. | None |
HEALTH-HDR-052 |
warning | No X-Content-Type-Options nosniff header | Without nosniff, some browsers guess file types and may run a file as a script when it was not meant to be one. | Send X-Content-Type-Options: nosniff on every response. | None |
HEALTH-HDR-053 |
info | No Referrer-Policy header | Without a policy, browsers decide how much of the page address is shared with other sites when a visitor clicks a link. | Send a Referrer-Policy header such as strict-origin-when-cross-origin. | None |
HEALTH-HDR-054 |
info | No clickjacking protection | Without X-Frame-Options or a frame-ancestors rule, other sites can embed the page in a frame and trick visitors into clicking hidden controls. | Send X-Frame-Options or add a frame-ancestors rule to the Content-Security-Policy. | None |
HEALTH-EXT-060 |
warning | Broken external link | Links that lead nowhere frustrate visitors and make the site look neglected. | Update or remove the link. | Statuses 401, 403, 405, 429 and 503, and any status outside 100 to 599, are reported as could not verify (info), because many sites refuse automated requests. |
HEALTH-FETCH-070 |
warning | Page timed out or was cut short | The audit only saw part of the page, and slow pages are also slow for visitors and crawlers. | Check the server for slow responses, and reduce the page size if it hit the size cap. | None |
| Id | Severity | Check | Why it matters | How to fix | Rule of thumb |
|---|---|---|---|---|---|
PERF-RESP-001 |
warning | Slow server response | A slow first response delays everything that follows, and visitors notice. | Look at server work before the HTML is sent: slow queries, missing page caching, or an underpowered host. | Fails above 800 ms. This is one measurement from the auditing machine, so treat it as a guide and not a benchmark. |
PERF-HTML-010 |
warning | HTML document is very large | Large documents take longer to download and parse, especially on slow mobile connections. | Remove inline data and repeated markup, and load long lists in parts. | Fails above 500 KB (500000 bytes) of decoded HTML. A rule of thumb, not a hard limit. |
PERF-COMP-020 |
error | HTML is served without compression | Compression usually cuts the size of HTML by a large share, so pages download faster. | Turn on gzip or Brotli compression for HTML responses in the web server or CDN. | Only documents over 1 KB (1024 bytes) are checked, because compressing tiny files gains little. |
PERF-COMP-021 |
warning | Script or stylesheet served without compression | Text assets compress well. Sending them as they are wastes bandwidth and slows rendering. | Turn on gzip or Brotli compression for JavaScript and CSS files. | Only files over 1 KB (1024 bytes) are checked. |
PERF-CACHE-030 |
warning | Static asset is not cached for long | Without a cache lifetime, returning visitors download the same files again on every visit. | Send Cache-Control with a max-age of at least one hour, and a year for files whose names change when they change. | Fails when there is no max-age and no Expires, when max-age is under 3600 seconds, or on no-store. Only measured assets on the audited origin are checked. |
PERF-WEIGHT-040 |
warning | Page is heavy | Heavy pages load slowly on mobile connections and use up visitors' data. | Compress and resize images first, then remove scripts and fonts the page does not need. | Fails above 2 MB (2000000 bytes) and up to 5 MB, counting the HTML and the assets that were measured. Assets that were not measured are not counted, and the finding says how many. |
PERF-WEIGHT-041 |
error | Page is very heavy | Pages this large take a long time to load on slow connections and use a lot of mobile data. | Compress and resize images first, then remove scripts and fonts the page does not need. | Fails above 5 MB (5000000 bytes), counting the HTML and the assets that were measured. This replaces the 2 MB warning for the same page. |
PERF-REQ-042 |
info | Page references many resources | Each script, stylesheet and image is another request, which adds delay on slow connections. | Combine small files, drop unused ones, and lazy load images below the fold. | Fails above 80 unique scripts, stylesheets and images. A rule of thumb. |
PERF-IMG-050 |
warning | Large image | Images are often the largest part of a page. | Resize the image to the size it is shown at and compress it, or use a modern format such as WebP or AVIF. | Fails above 300 KB (300000 bytes) and up to 1 MB. A rule of thumb. |
PERF-IMG-051 |
error | Very large image | An image this large can take seconds to load and uses a lot of mobile data. | Resize the image to the size it is shown at and compress it, or use a modern format such as WebP or AVIF. | Fails above 1 MB (1000000 bytes). This replaces the 300 KB warning for the same image. |
PERF-IMG-052 |
warning | Images without width and height | Without both attributes the browser cannot reserve space, so the page jumps as images load. | Add width and height attributes that match the image's own size, and let CSS scale it. | Decorative images are counted too, because layout shift applies to them as well. |
PERF-IMG-053 |
info | Images below the fold are not lazy loaded | Images far down the page compete with the content visitors see first. | Add loading="lazy" to images that start below the first screen. | Counts images after the third in the document. Position in the document is a proxy for being below the fold. |
PERF-IMG-054 |
info | Large JPEG or PNG | Modern formats such as WebP and AVIF are often smaller at the same quality. | Convert the image to WebP or AVIF, and keep the old format as a fallback only if needed. | Fails for JPEG and PNG files over 100 KB (100000 bytes). A modern format may be smaller, but not always. |
PERF-BLOCK-060 |
warning | Render-blocking script in the head | A script in the head without async or defer stops the browser from showing the page until it has loaded and run. | Add defer, or async for independent scripts, or move the script to the end of the body. | None |
PERF-BLOCK-061 |
info | Many stylesheets in the head | The browser waits for every stylesheet in the head before it draws the page. | Combine stylesheets, or inline the critical rules and load the rest later. | Fails above 4 stylesheets in the head. A rule of thumb. |
Static checks only. This is not an accessibility audit: contrast, keyboard use, focus order and screen reader behaviour are not tested.
| Id | Severity | Check | Why it matters | How to fix | Rule of thumb |
|---|---|---|---|---|---|
A11Y-ALT-001 |
warning | Image without an alt attribute | Screen readers have nothing to say about an image with no alt attribute, and may read out the file name instead. | Add an alt attribute that describes the image. Use alt="" for images that are only decoration. | Images marked aria-hidden="true" or role="presentation" are not counted, because screen readers skip them. |
A11Y-LABEL-010 |
warning | Form control without a label | People using screen readers cannot tell what a field is for, and a label also gives a larger target to click. | Add a label element that points at the field, or an aria-label or aria-labelledby attribute. | Hidden, submit, button, reset and image inputs are not counted. Image inputs need alt text instead. |
A11Y-LINK-020 |
warning | Link without an accessible name | A link with no text, label or image alt is announced as just link, so people using screen readers cannot tell where it goes. | Add link text, or an aria-label, or alt text on the image inside the link. | None |
A11Y-LINK-021 |
info | Generic link text | People who move through a page by its links hear them out of context, so click here and read more tell them nothing. | Write link text that says where the link goes or what it does. | Compares the link text, lower-cased and without trailing punctuation, with: "click here", "here", "read more", "more", "learn more", "link", "this". |
A11Y-BTN-030 |
warning | Button without an accessible name | A button with no text or label is announced as just button, so people using screen readers cannot tell what it does. | Add text inside the button, or an aria-label. | None |
A11Y-HEAD-040 |
info | Heading levels are skipped | People who move through a page by its headings expect the levels to nest, and a gap suggests missing content. | Use the next heading level down, and pick levels for structure and not for size. | Fails when a heading is more than one level deeper than the heading before it. |
A11Y-FRAME-050 |
info | Iframe without a title | Screen readers announce an iframe by its title, so without one people cannot tell what the embedded content is. | Add a short title attribute that says what the frame contains. | None |