Seodar

All 195 checks

What a scan looks for, what happens when it fails, and what to do about it. This page is generated from the same catalogue the report reads, so the wording here is the wording you will see on a finding.

The health score starts at 100 and each category can take away at most the points shown. A category with more checks does not weigh more - the cap is the cap, which is why one broken robots.txt can cost more than a dozen missing alt attributes.

195 checks in six categories

Whether a page can be found, fetched and indexed at all. Nothing else matters if this is wrong, which is why it carries the most weight.

90 checks, up to 33 points · 13 critical, 50 warning, 27 info

  • Canonical points at a broken page

    Critical

    You are telling search engines the real version of this page is one that errors, so neither may be indexed.

    Fix: Point the canonical at a working URL, or remove it so the page is its own canonical.

    canonical_to_non200

  • Canonical points to a page excluded from search

    Critical

    You have named an original that is set to noindex, so neither this page nor the one it points at can be shown. The content disappears from search entirely.

    Fix: Either remove the noindex from the target, or canonicalise to a page that can be indexed.

    canonical_to_noindex

  • Form submits over an insecure connection

    Critical

    This page contains a form whose action is an http:// address, so whatever is typed into it travels unencrypted - regardless of the page being served over https.

    Fix: Change the form action to https. Browsers already warn on password fields and will warn on more.

    form_insecure_action

  • HTTP does not redirect to HTTPS

    Critical

    The insecure version stays reachable, splitting your ranking signals across two addresses.

    Fix: Add a site-wide 301 from http:// to https://.

    http_to_https_missing

  • Important tags are outside the head

    Critical

    A title, canonical, robots directive or hreflang placed after the <head> closes is not a weaker signal - search engines ignore it completely. The page looks correct to any audit that only asks whether the tag exists.

    Fix: Move them inside <head>. It is usually a script or a stray element closing the head earlier than the template intended.

    tags_outside_head

  • Many pages name the homepage as their original

    Critical

    Several pages tell Google that the homepage is the real version of them. That is almost always a plugin default, and it removes every one of those pages from search.

    Fix: Check your SEO plugin's canonical setting. Each page should point at itself unless it really is a duplicate.

    canonical_to_homepage

  • Page not found

    Critical

    You are linking to pages that no longer exist, wasting crawl budget and stranding visitors.

    Fix: Either restore the page or update the links pointing at it. Redirect only if a genuine replacement exists.

    http_4xx

  • Page returns a server error

    Critical

    Search engines drop pages that error, and visitors see a broken site.

    Fix: Check your server and application logs for these URLs - a 5xx is always a fault on your side, never the crawler's.

    http_5xx

  • Redirect ends at an error

    Critical

    The redirect works but its destination is broken, so the original URL is effectively dead.

    Fix: Point the redirect at a page that actually returns 200, or remove it and let the URL 404 honestly.

    redirect_to_error

  • Redirect loop

    Critical

    The page can never load: the redirects send visitors and crawlers in a circle.

    Fix: Trace the chain in the finding details and break the cycle - usually two rules that each undo the other.

    redirect_loop

  • Secure page loads insecure files

    Critical

    Browsers block http:// scripts and images on an https:// page, so parts of the page silently do not load - and the padlock goes away for the visitor.

    Fix: Change those script, image and stylesheet URLs to https://. If a third party has no https version, drop it.

    insecure_resources

  • Two pages name each other as the original

    Critical

    Each page says the other is the original. Google cannot resolve that and discards both.

    Fix: Decide which one is the original, point the other at it, and make the original's canonical point at itself.

    canonical_loop

  • A broken page nothing links to any more

    Warning

    This URL answered an error in your previous scan, still answers one now, and nothing on the site links to it - so this scan could not reach it, and the finding that would have told you disappeared. A page in this state is the worst of both: broken for anyone holding the link, and invisible to the report that should have caught it.

    Fix: Decide what the URL is for. If the page should exist, restore it; if it should not, redirect it to whatever replaced it so the people and the links that still point at it land somewhere. Removing the last internal link is not a fix - it only hides the page from your own audit.

    page_gone_unlinked

  • A path segment repeats in the URL

    Warning

    A path like /shop/bags/shop/bags/ is a crawler trap: relative links keep appending, so the number of URLs grows without limit.

    Fix: Fix the relative links on that page. They should resolve from the site root rather than from the current path.

    url_repeated_path

  • Broken page still showing in search

    Warning

    The page answers with an error and Google is still offering it to people. Every one of those impressions is a visitor who arrives at nothing.

    Fix: Restore the page, or redirect it to the closest live equivalent. A 401, 403 or 429 usually means bot protection is answering Google rather than the page being gone.

    error_page_with_traffic

  • Campaign parameters in a crawled URL

    Warning

    Something on your site links to this page with a tracking parameter attached, which makes a duplicate of it for every campaign.

    Fix: Link internally to the clean URL. Tracking belongs on links from outside the site.

    url_tracking_params

  • Canonical points at a page with a different canonical

    Warning

    Search engines follow one canonical step, not a chain, so the signal is likely ignored.

    Fix: Point this page's canonical directly at the final destination.

    canonical_chain

  • Canonical points at a URL robots.txt blocks

    Warning

    You have named an original that search engines are not allowed to fetch. They cannot confirm it, so they resolve the duplication however they choose.

    Fix: Either allow the canonical target in robots.txt, or canonicalise to a page that is allowed.

    canonical_to_blocked

  • Canonical points back to the insecure version

    Warning

    The page is served over https and names an http address as the original, which undoes the move to https for that page.

    Fix: Update the canonical to https. It is usually a hardcoded URL left over from before the migration.

    canonical_https_to_http

  • Canonical points to a redirect

    Warning

    The page you named as the original does not exist at that address - it redirects somewhere else. Google has to follow an extra hop and often ignores the canonical instead.

    Fix: Point the canonical at the final URL, the one that answers 200 directly.

    canonical_to_redirect

  • Content only appears with JavaScript

    Warning

    We had to run a browser to see these pages at all. Google usually renders JavaScript too, but later and not always - and every other crawler, link preview and AI answer engine gets the empty shell.

    Fix: Server-render or pre-render the main content so it is in the HTML that arrives, and keep JavaScript for what happens after the page is readable.

    content_requires_js

  • Every link on this page is nofollowed

    Warning

    A page-level nofollow stops ranking signals flowing through all of its links at once, which is a much bigger effect than nofollowing one link.

    Fix: Remove the page-level nofollow and apply it to individual links if you need it at all.

    meta_nofollow

  • Filtered URL with no canonical

    Warning

    Every filter combination looks like a separate page, so one product list can end up competing with hundreds of near-copies of itself.

    Fix: Add a canonical link on filtered URLs pointing at the unfiltered version of the list.

    param_url_no_canonical

  • hreflang is not reciprocated

    Warning

    Language alternates must point at each other. One-way declarations are discarded.

    Fix: Add a matching hreflang tag on the target page pointing back to this one.

    hreflang_no_return

  • HTML and HTTP header name different originals

    Warning

    Your page declares one canonical in its markup and a different one in the Link: response header. Both are valid ways to say it, so the site has given Google two answers and only one is visible on the page.

    Fix: Decide which is right and remove the other. The header is usually set by a CDN rule nobody remembers.

    canonical_header_conflict

  • Invalid hreflang tag

    Warning

    A malformed language code or relative URL makes the whole hreflang set unreliable, so it may be ignored entirely.

    Fix: Use a valid language code (e.g. en, en-GB, or x-default) and an absolute https:// URL.

    hreflang_invalid

  • JavaScript error when the page loads

    Warning

    An uncaught error stops the script that threw it, so whatever it was about to do never happens - often rendering the content, wiring the navigation or firing analytics.

    Fix: Open the page with the browser console visible and fix the exception; the finding details carry the error text we saw.

    js_errors_on_load

  • Language alternate does not load

    Warning

    One of the translations you declared answers with an error. Google discards a language set when its entries are broken, so the whole group loses its annotations.

    Fix: Fix or remove the broken alternate. A set of three working entries beats four with one dead.

    hreflang_to_non200

  • Language alternate is blocked by robots.txt

    Warning

    One of the declared translations is disallowed, so search engines can never load it to confirm the pairing.

    Fix: Allow the alternate in robots.txt, or take it out of the language set.

    hreflang_to_blocked

  • Language alternate is excluded from search

    Warning

    You are pointing Google at a translation it has been told not to show.

    Fix: Remove the noindex from the translation, or drop it from the language set.

    hreflang_to_noindex

  • Language alternate names a different original

    Warning

    The translation you declared canonicalises somewhere else, so your annotation and its canonical contradict each other. Google follows the canonical and ignores the annotation.

    Fix: Point the hreflang at the canonical URL of the translation rather than at a duplicate of it.

    hreflang_to_canonicalised

  • Language alternate redirects

    Warning

    The translation you declared is not at that address any more. Every entry should be the final URL.

    Fix: Update the hreflang href to the URL that answers directly.

    hreflang_to_redirect

  • Language links do not include this page

    Warning

    Google needs every language version to list itself as well as its siblings, and ignores the whole set when one does not - so the translations earn nothing.

    Fix: Add an hreflang entry pointing at this page's own URL, alongside the entries for the other languages.

    Check one URL with the free hreflang checker

    hreflang_missing_self

  • More than one canonical tag

    Warning

    Two canonical tags are worse than none: search engines discard all of them rather than choosing, so the page is left with no canonical at all - and the report above still shows the first one, which is why this is easy to miss.

    Fix: Keep exactly one <link rel="canonical"> in the head. Two usually means a theme and a plugin are both adding one, or a template outputs it twice.

    canonical_multiple

  • No doctype

    Warning

    Without a doctype the browser falls back to a compatibility mode from the nineties, which changes how the page is laid out and measured.

    Fix: Add <!DOCTYPE html> as the first line of the document.

    doctype_missing

  • No sitemap found

    Warning

    Search engines have to discover every page by following links, so anything weakly linked may never be found.

    Fix: Publish a sitemap.xml and reference it from robots.txt.

    Check one URL with the free xml sitemap checker

    sitemap_missing

  • One page reachable under many filter URLs

    Warning

    A crawler spends its visit on filter combinations instead of your real pages, so new content is found late or not at all.

    Fix: Decide which parameters make a genuinely different page and canonicalise or block the rest. A judgement call: a colour filter usually is not a new page, a category often is.

    param_explosion

  • Page has no internal links to it

    Warning

    It is in your sitemap but nothing on the site links to it, which reads as low importance and makes it hard to find.

    Fix: Link to it from a relevant page - navigation, a hub page, or related content.

    orphan_page

  • Page is hidden from search and points elsewhere

    Warning

    Noindex says drop this page, the canonical says credit a different one. Google may act on either, so which one wins is not something you control.

    Fix: Decide which you meant: keep noindex and remove the canonical, or remove noindex and keep the canonical.

    noindex_canonical_conflict

  • Page is scheduled to drop out of search

    Warning

    An unavailable_after date tells Google to stop showing this page after a given day. These are almost always set once and forgotten.

    Fix: Check the date. If the page should stay, remove the directive.

    robots_unavailable_after

  • Page is set to noindex and still gets clicks

    Warning

    Google is sending people to a page you told it to drop. One of the two is wrong, and the traffic is the part that disappears.

    Fix: Decide which you meant. If the page should rank, remove the noindex; if it should not, expect these clicks to stop and make sure the traffic has somewhere else to land.

    noindex_with_traffic

  • Page language and hreflang disagree

    Warning

    The lang attribute on the page says one language and its own hreflang entry says another. One of the two is wrong and search engines see both.

    Fix: Check which is correct and make them match. It is usually the template's lang that was never changed.

    hreflang_lang_mismatch

  • Page says index in the HTML and noindex in a header

    Warning

    The X-Robots-Tag header and the meta tag disagree, so whether this page exists in search is decided by which one Google happens to act on - not by you.

    Fix: Decide which you meant and remove the other. The header usually comes from a server or CDN rule, so that is where to look first.

    robots_conflict

  • Page says it has nothing, but answers OK

    Warning

    Search engines index it as a real page, so an empty result competes with your actual content and eats crawl budget that should go to pages worth finding.

    Fix: Return 404 or 410 for pages with no content. If the page should exist, give it real content and a title that describes it.

    soft_404

  • Pages get traffic but the crawl never found them

    Warning

    Nothing on your site links to these and they are not in your sitemap, so the only reason we know they exist is that Google sent people to them. They have no route for ranking signals.

    Fix: Link to them from a relevant page, or add them to your sitemap. If they should not exist, redirect them.

    orphan_with_traffic

  • Paginated page canonicals to page one

    Warning

    This page tells search engines it is a duplicate of page 1, so it is dropped from the index - and anything only linked from it goes with it. This is the most common reason products or articles deep in a listing never appear in search.

    Fix: Make each paginated page canonical to itself. Page 2 is not a copy of page 1; it holds different items.

    pagination_canonical_to_first

  • Redirect done with a meta refresh

    Warning

    The page loads, then moves - so it is slower than a server redirect, and search engines treat the signal as weaker than a 301. It also loses the referrer for whoever arrives.

    Fix: Replace it with a 301 at the server or CDN. Keep the meta refresh only where you cannot set a status code at all.

    meta_refresh_redirect

  • Redirect takes more than one hop

    Warning

    Every extra hop costs load time, and some link equity is lost along the way.

    Fix: Redirect the original URL straight to the final destination in one step.

    redirect_chain

  • robots.txt blocks stylesheets or scripts

    Warning

    Search engines render pages. A CSS or JS file they are told not to fetch means they render your page differently from the way a visitor sees it.

    Fix: Allow CSS and JS in robots.txt. Blocking them protects nothing and changes how your pages are judged.

    robots_blocks_assets

  • Same page reachable in different letter cases

    Warning

    A server treats /Product and /product as two pages, so links and ranking signals are split between copies of one thing.

    Fix: Pick one casing - lowercase is the usual choice - and redirect the others to it.

    case_twin

  • Search results cannot show a snippet

    Warning

    nosnippet stops Google printing any description under your result. The listing becomes a bare link, and click-through falls sharply.

    Fix: Remove nosnippet, or use max-snippet with a length if you want to limit rather than forbid it.

    robots_nosnippet

  • Secure page loads insecure resources

    Warning

    Browsers block or warn about the insecure parts, so the page can render broken.

    Fix: Change the http:// references in the details to https://.

    mixed_content

  • Session identifier in the URL

    Warning

    A session parameter makes a new address for every visitor, so the same page is crawled endlessly under different URLs and none of them accumulates anything.

    Fix: Move session state to a cookie, and block the parameter in Search Console if it cannot be removed.

    url_session_id

  • Sitemap lists a noindex page

    Warning

    Contradictory signals: the sitemap asks search engines to index it while the page tells them not to.

    Fix: Pick one - remove the URL from the sitemap, or drop the noindex if the page should rank.

    noindex_in_sitemap

  • Sitemap lists a URL that does not work

    Warning

    A sitemap full of errors reduces how much search engines trust the rest of it.

    Fix: Regenerate the sitemap from live URLs only, and keep it in sync automatically.

    sitemap_non200

  • Temporary redirect where a permanent one was meant

    Warning

    A 302 or 307 tells search engines the move is not permanent, so they keep the old URL and do not transfer the page's standing to the new one.

    Fix: Use 301 for a move that is not coming back.

    redirect_temporary

  • The document has more than one head or body

    Warning

    A second <head> or <body> means the markup was assembled wrongly. Parsers recover differently, so what a search engine reads may not be what a browser shows.

    Fix: Look for a template fragment that brings its own document wrapper.

    document_structure_invalid

  • Two pages claim the same language

    Warning

    More than one URL is declared as the version for the same language. Google picks one arbitrarily, or drops the set.

    Fix: One URL per language. If two pages really are both in that language, they need different region codes or one of them is a duplicate.

    hreflang_lang_ambiguous

  • URL contains a double slash

    Warning

    // in a path is nearly always a bug in how links are built, and each variation is a separate address to search engines.

    Fix: Fix the link template that joins the base URL to the path.

    url_double_slash

  • URL redirects to itself

    Warning

    The page redirects to its own address. Some clients follow that until they give up, and search engines treat it as an error.

    Fix: Look at the redirect rule that matches this URL - it is usually a condition that is always true.

    redirect_self

  • www and non-www both serve the site

    Warning

    Search engines see two copies of every page and split ranking between them.

    Fix: Choose one as primary and 301 the other to it.

    host_duplicate

  • Canonical is a relative path

    Info

    A relative canonical resolves against whatever URL served the page, so the same markup delivered from two addresses produces two different canonicals.

    Fix: Use the absolute URL, including the scheme and host.

    canonical_relative

  • Canonical is set only in the HTTP header

    Info

    The canonical is declared in the response header and not in the page. That works, and it means nobody reading the source will see it - including your own team.

    Fix: Add a matching canonical tag to the page, or write down that the header is where it lives.

    canonical_header_only

  • Extra robots directives on this page

    Info

    Directives like noarchive, nocache or notranslate are set here. Individually minor, together they describe what you have told search engines about this page.

    Fix: Confirm each was intended. They are usually inherited from a template rather than chosen per page.

    robots_secondary_directives

  • Google ranks a page you canonicalised away

    Info

    Your canonical tag names a different page as the original, and Google disagreed. That is the only way to find out that it disagreed.

    Fix: Check whether the canonical target is really the better page. If this one is what people want, canonicalise the other way round.

    canonicalised_with_traffic

  • Images on this page are excluded from image search

    Info

    noimageindex keeps every image on the page out of Google Images.

    Fix: Remove it if image search matters for this page. It is often applied site-wide when only a few pages needed it.

    robots_noimageindex

  • Internal links go through a spelling redirect

    Info

    The link and the destination are the same page written differently - a trailing slash, or a change of case - so every visit pays for a redirect that a template edit would remove.

    Fix: Fix the links to use the final form. Keep the redirect as a safety net.

    redirect_normalisation

  • Language alternates are set only in the HTTP header

    Info

    Your translations are declared in the Link: header rather than in the markup. Valid, and invisible to anyone reading the page source.

    Fix: Nothing to fix if it was deliberate. Worth knowing before somebody adds a second set in the HTML.

    hreflang_header_only

  • Linked pages are blocked by robots.txt

    Info

    You link to pages crawlers are not allowed to fetch, which wastes link equity and may be unintentional.

    Fix: Check whether the robots.txt rule is still wanted, or remove the internal links to those URLs.

    Check one URL with the free robots.txt tester

    robots_blocked_linked

  • No canonical tag

    Info

    Without a canonical, search engines guess which address is the real one whenever the same content is reachable more than one way.

    Fix: Add a self-referencing canonical. On a page with no duplicates it costs nothing and closes the question.

    Check one URL with the free canonical tag checker

    canonical_missing

  • No x-default in the hreflang set

    Info

    Google serves the x-default version to every language your set does not name. Without one, a visitor whose language is not listed gets whichever version Google guesses - often the wrong one.

    Fix: Add <link rel="alternate" hreflang="x-default" href="..."> pointing at your language-selection page, or at the version you want strangers to land on.

    hreflang_no_x_default

  • Page earns traffic with no internal links

    Info

    Real visitors reach this page and no other page on the site points to it, so it earns nothing from the rest of your site.

    Fix: Add a link from a related page. One relevant internal link is usually enough to change how it is treated.

    unlinked_page_with_traffic

  • Page is buried deep in the site

    Info

    More than four clicks from the homepage means less crawl attention and less perceived importance.

    Fix: Add a link from a higher-level page, or flatten the section's structure.

    deep_page

  • Page is not in your sitemap

    Info

    These pages are indexable and linked from your own site, but your sitemap does not list them - so you are telling search engines two different things about what matters. On a large site it is also the difference between a page being found this week and next month.

    Fix: Include them in the sitemap, or check why your generator skipped them. If they are not meant to rank, noindex is the honest signal rather than a quiet omission.

    missing_from_sitemap

  • Page is set to noindex

    Info

    This page will not appear in search results. Often deliberate - surfaced so you can confirm it is.

    Fix: Nothing, if intended. Remove the noindex if the page should rank.

    meta_noindex

  • Page opts out of AI training or AI images

    Info

    A noai or noimageai directive tells AI companies not to use this page. Worth knowing you have it, because it is easy to apply site-wide by accident.

    Fix: If it was deliberate, nothing to do. If it was not, remove the directive - it is usually set in a plugin or at the CDN.

    robots_ai_optout

  • Pages that name a different page as the original

    Info

    These pages tell search engines to index something else instead. That is often correct - pagination and filters - but it is worth knowing how much of the site is in that state.

    Fix: Skim the list. Anything here that should rank on its own needs its canonical pointing at itself.

    canonicalised_page

  • Redirecting URLs are what Google still ranks

    Info

    Google is ranking the old address rather than the new one, so every visit costs an extra hop and the destination never accumulates the signals.

    Fix: Update internal links and the sitemap to point at the destination directly. The redirect stays as a safety net, but nothing should be routing through it.

    redirect_with_traffic

  • Sitemap lastmod dates are unreliable

    Info

    lastmod is the one part of a sitemap that can be checked against reality, so search engines stop trusting the whole file when the dates are wrong. A date in the future, an unparseable value, or the same timestamp on every URL all mean the signal is ignored.

    Fix: Emit the date each page actually changed, in W3C format (2026-08-06 or 2026-08-06T12:00:00+02:00). If your generator cannot do that, omit lastmod entirely - no date is better than a date nobody believes.

    sitemap_lastmod_invalid

  • Standard security headers are not set

    Info

    These four are the cheap ones - they cost nothing to add and they are what a security scan, a procurement questionnaire, or a cautious customer checks first.

    Fix: Set them at the CDN or web server, not per page: Strict-Transport-Security, X-Content-Type-Options, X-Frame-Options, Referrer-Policy.

    security_headers_missing

  • The page you canonicalised to has no internal links

    Info

    You have named another page as the original, and nothing on your site links to that page. The version you want indexed is the one with no support.

    Fix: Review the list and decide page by page.

    canonical_unlinked

  • The same language declared twice

    Info

    One page lists the same language code more than once, which makes the set ambiguous.

    Fix: Remove the duplicate entry. Keep one URL per language.

    hreflang_lang_duplicate

  • URL contains a space

    Info

    Spaces break links in mail clients, chat apps and editors, and they get encoded inconsistently.

    Fix: Replace spaces with hyphens and redirect the old address.

    url_whitespace

  • URL contains capital letters

    Info

    Most servers treat /Page and /page as different addresses, so any link that gets the case wrong creates a duplicate.

    Fix: Use lower case in URLs, and redirect the mixed-case version to it.

    url_uppercase

  • URL contains non-ASCII characters

    Info

    Accented or non-Latin characters are handled differently by different clients, so the same page ends up shared under several encodings.

    Fix: Either encode them consistently or use plain ASCII in new URLs.

    url_non_ascii

  • URL has many query parameters

    Info

    Several parameters usually mean filters, and filters multiply into more URLs than the site has pages.

    Fix: Decide which combinations should be indexed and canonicalise the rest to them.

    url_too_many_params

  • URL is very long

    Info

    Long URLs are harder to share, get truncated in results, and usually mean the path is carrying information the page should carry.

    Fix: Shorten it if the page is new. Do not rewrite established URLs for length alone - the redirect costs more than the URL does.

    url_too_long

  • URL uses underscores between words

    Info

    Google treats hyphens as word separators and underscores as joins, so blue_shoes reads as one word.

    Fix: Use hyphens in new URLs. Existing ones are rarely worth a redirect on their own.

    url_underscores

The title, description and structured data a search engine reads before it reads the page.

26 checks, up to 18 points · 1 critical, 11 warning, 14 info

  • Missing page title

    Critical

    The title is the headline in search results; without one, search engines invent something from the page.

    Fix: Write a unique title of roughly 15-60 characters describing this specific page.

    title_missing

  • Duplicate meta description

    Warning

    The same summary on several pages tells search engines and users nothing distinguishes them.

    Fix: Write a distinct description per page, or remove the duplicates and let search engines excerpt.

    meta_desc_duplicate

  • Duplicate page title

    Warning

    Identical titles make pages look interchangeable, so search engines pick one and ignore the rest.

    Fix: Give each page a title reflecting what is unique about it.

    title_duplicate

  • H1 tag is present but empty

    Warning

    The page has an <h1> element containing nothing. It looks like a heading to a checker and reads as a missing heading to a search engine.

    Fix: Put the page's main heading in it, or remove the empty element.

    h1_empty

  • Missing meta description

    Warning

    Search engines will excerpt the page instead, which is usually less compelling and lowers click-through.

    Fix: Write a 50-165 character summary that reads as an invitation, not a keyword list.

    meta_desc_missing

  • More than one viewport tag

    Warning

    The page declares the viewport twice. Browsers pick one, and which one is not something you control.

    Fix: Keep a single viewport tag. The duplicate usually comes from a theme layered over the template.

    viewport_multiple

  • No H1 heading

    Warning

    The H1 is the page's main heading for both readers and crawlers; without it the topic is ambiguous.

    Fix: Add exactly one H1 stating what the page is about.

    h1_missing

  • No mobile viewport declared

    Warning

    A phone renders the page at desktop width and shrinks it, so the text is unreadable without pinching - and most of your visitors are on a phone.

    Fix: Add <meta name="viewport" content="width=device-width, initial-scale=1"> to the page head.

    viewport_missing

  • The same H1 on several pages

    Warning

    Identical main headings make pages look interchangeable, in the same way identical titles do.

    Fix: Give each page a heading that describes that page.

    h1_duplicate

  • Title and description both duplicated on the same pages

    Warning

    When both match across the same set of pages, it is much stronger evidence that the pages themselves are duplicates rather than that the metadata was rushed.

    Fix: Look at whether these pages should exist separately at all. If they should, both fields need to describe what makes each one different.

    title_and_desc_duplicate

  • Viewport is pinned to a fixed width

    Warning

    This is worse than having none: the page declares a layout width and holds it, so a phone shows a scaled-down desktop page instead of adapting.

    Fix: Replace the pixel width with width=device-width.

    viewport_fixed_width

  • Visitors cannot zoom in

    Warning

    The viewport tag disables pinch zoom. That is a failure of an accessibility requirement as well as an obstacle for anyone reading on a phone.

    Fix: Remove user-scalable=no and any maximum-scale from the viewport tag.

    viewport_blocks_zoom

  • Description will be cut off in search results

    Info

    Same measurement as the title, applied to the description: this one is wider than the space a result gets.

    Fix: Say the useful thing in the first line. The rest is there for search engines rather than for readers.

    Check one URL with the free meta description checker

    meta_desc_truncated_serp

  • H1 is very long

    Info

    A heading past about seventy characters stops working as a heading and starts working as a paragraph.

    Fix: Shorten it. Move the detail into the first sentence underneath.

    h1_too_long

  • Incomplete Open Graph tags

    Info

    A partial set gives a broken share preview: a headline with no picture, or a picture with no headline. Every platform that unfurls links reads these, and the missing half is filled with whatever it can scrape.

    Fix: Ship og:title, og:description and og:image together. The image is the one worth checking - it is what people actually see in a feed.

    og_incomplete

  • Meta description length is off

    Info

    Under 50 characters wastes the space; over 165 gets truncated mid-sentence.

    Fix: Aim for 50-165 characters.

    meta_desc_length

  • More than one H1

    Info

    Multiple top-level headings blur what the page is primarily about.

    Fix: Keep one H1 and demote the others to H2.

    h1_multiple

  • No favicon declared

    Info

    Google shows a favicon beside your result on mobile, and a site with none gets a blank placeholder next to competitors who have one. It is the smallest possible difference in how trustworthy a result looks.

    Fix: Add <link rel="icon" href="/favicon.ico"> to the head. If you already serve /favicon.ico, declare it anyway - an explicit tag is what we and every crawler read first.

    favicon_missing

  • No preview title or image for shared links

    Info

    When somebody shares this page on social media or in a chat app, it appears as a bare URL rather than a card with a headline and picture, and gets far fewer clicks.

    Fix: Add og:title and og:image meta tags. One good image per page beats a site-wide default.

    og_missing

  • Title and description are identical

    Info

    The description adds nothing to the snippet: the reader sees the same sentence twice.

    Fix: Use the description to say what the title could not fit.

    title_equals_meta_desc

  • Title and H1 are identical

    Info

    Two chances to describe the page and both say the same thing. The title works in search results and the H1 works on the page, and they can do different jobs.

    Fix: Write the title for the search result and the H1 for the reader who has already clicked.

    title_equals_h1

  • Title is too long

    Info

    Past roughly 60 characters search results truncate it, and the end of your message is cut off.

    Fix: Tighten to under 60 characters, keeping the distinguishing words first.

    title_too_long

  • Title is very short

    Info

    Under 15 characters rarely says enough for a user to choose your result.

    Fix: Expand it to describe the page's specific subject.

    title_too_short

  • Title will be cut off in search results

    Info

    Measured at the width Google actually renders titles rather than by counting characters. Wide letters take more room than narrow ones, so a short title can still be truncated and a long one can fit.

    Fix: Put the important words first. Everything past the cut is still read by search engines and never seen by a person.

    Check one URL with the free title tag checker

    title_truncated_serp

  • Viewport does not set an initial scale

    Info

    Without initial-scale=1 some browsers choose their own starting zoom, so the page opens at the wrong size.

    Fix: Add initial-scale=1 to the viewport tag.

    viewport_no_initial_scale

What is actually on the page - enough of it, unique, and readable.

20 checks, up to 16 points · 1 critical, 5 warning, 14 info

  • Identical content on several URLs

    Critical

    Search engines pick one URL and ignore the others, so the ranking for this content is split or lost.

    Fix: Keep one canonical version and either canonical or redirect the rest to it.

    duplicate_content

  • Page answers successfully with no content

    Warning

    The page returns 200 and has no text. To a search engine it is a working page that says nothing.

    Fix: Add the content, or return a 404 if the page should not exist.

    page_empty

  • Placeholder text is published

    Warning

    This page still contains lorem ipsum. It is live, it is indexable, and search engines can see it.

    Fix: Replace the placeholder or take the page down until it is written.

    placeholder_text

  • Same page with and without a trailing slash

    Warning

    Two URLs serve identical content, which is duplicate content created by configuration rather than writing.

    Fix: Pick one form and 301 the other to it, site-wide.

    slash_twin

  • Structured data will not parse

    Warning

    Broken JSON-LD is ignored entirely, so you lose any rich result it was meant to produce.

    Fix: Validate the block - the details name the parse error and its position.

    structured_data_invalid

  • Very little content

    Warning

    Under 200 words rarely answers a search fully, so the page struggles to rank for anything.

    Fix: Expand it, or merge it into a fuller page and redirect.

    thin_content

  • Content has not changed in six months

    Info

    The Last-Modified header says this page has not been touched since then. Assistants and search engines both favour material that has been kept current.

    Fix: Review it. A page that is still correct needs a check and a date; one that is not needs the edit.

    content_stale

  • Hard to read

    Info

    Measured on the Flesch reading-ease scale, this page scores in the range associated with academic writing. Applied to English pages only.

    Fix: Shorter sentences and plainer words. The score moves fastest by splitting long sentences.

    readability_hard

  • Heading levels are out of order

    Info

    Headings are the outline of the page. A section that starts at h2 with no h1 above it, or a jump from h2 to h4, leaves a heading with no parent - which makes the structure harder for a screen reader to navigate and harder for a search engine to read as a hierarchy.

    Fix: One h1 for the page, then descend one level at a time. Going back up is fine: h3h2 is simply the next section starting.

    heading_order_broken

  • Indexable pages that earn nothing

    Info

    These pages are open to search engines and have received no impressions at all. They are candidates for improving, merging, or removing.

    Fix: Work through the list and decide page by page. This is a shortlist to review, not a list of mistakes.

    indexable_page_no_traffic

  • Language attribute is not a language code

    Info

    Browsers and search engines ignore a value they cannot parse, so the page counts as having no language declared - the same as if you had left it out.

    Fix: Use a real code: en, en-GB, sr-Latn-RS. Not a language name, and not an underscore.

    lang_invalid

  • llms.txt does not parse

    Info

    The file is there and is not in the expected format - usually an HTML page served for a missing file rather than a markdown document.

    Fix: Serve it as plain text with a top-level heading, or remove it so tools stop finding a broken one.

    llms_txt_invalid

  • More than one main element

    Info

    A page can only have one main region. With several, the landmark means nothing.

    Fix: Keep one <main> and use <section> or <article> for the parts inside it.

    semantic_main_multiple

  • No character set declared

    Info

    The browser has to guess the encoding, and when it guesses wrong accented letters and quotes come out as mojibake - for some readers and not others.

    Fix: Add <meta charset="utf-8"> as the first thing in the page head.

    charset_missing

  • No language declared

    Info

    Without a lang attribute, screen readers guess pronunciation and search engines guess the audience.

    Fix: Add lang to the html element, e.g. <html lang="en">.

    lang_missing

  • No llms.txt file

    Info

    Some AI tools look for /llms.txt as a map of your site. There is no evidence it affects search - Google's documentation says Search ignores it - so this is housekeeping and not a ranking issue.

    Fix: Add one if you want to describe your site to AI tools. Skipping it costs nothing measurable.

    llms_txt_missing

  • No main element

    Info

    Nothing on the page marks where the content is. Assistants use landmarks to tell an article from the navigation around it, and without one they guess.

    Fix: Wrap the page's own content in <main>. One tag, and it changes nothing visually.

    semantic_main_missing

  • No structured data says who the site belongs to

    Info

    No page declares an Organization, WebSite or Person. That markup is how search engines and assistants connect a site to an entity they already know about.

    Fix: Add Organization or Person markup on the homepage, with the name, logo and official profiles.

    structured_data_identity_missing

  • Page may be too long for AI answers

    Info

    Assistants have a limit to how much of a page they read. Past a few thousand words the end of the page may never be seen by one.

    Fix: If the page covers several topics, split it. If it has to be long, put the answer near the top.

    content_very_long

  • Visitors arrive and leave without engaging

    Info

    Most people who land here leave without staying, converting, or going anywhere else. The page is being found and is not delivering.

    Fix: Check that the page matches what people searched for, and that the answer is above the fold rather than below an introduction.

    engagement_low

Links that go nowhere, images without alternative text, and the shape of the site's own link graph.

22 checks, up to 10 points · 7 warning, 15 info

  • A whole section is cut off from the rest of the site

    Warning

    These pages link to each other and nothing outside the group links in. The section is an island: each page looks linked, and the section as a whole is reachable by nothing.

    Fix: Link into the group from the main site - usually one link to its entry point is enough.

    isolated_cluster

  • An image, stylesheet or script is missing

    Warning

    The page asks for a file that answers with an error. A missing stylesheet or script changes how search engines render the page; a missing image is a hole where content should be.

    Fix: Restore the file or remove the reference. Check the path first - most of these are a build output that moved.

    broken_resource

  • Every link in comes from a page excluded from search

    Warning

    The only pages linking here are set to noindex. That route works while Google still crawls those pages, and it crawls excluded pages less over time.

    Fix: Add a link from a page that is indexed. A hub, a category listing, or the navigation.

    isolated_via_noindex_page

  • Page reachable only as a redirect destination

    Warning

    The only way in is an old URL redirecting here. Nothing links to the new address directly, so the page depends entirely on the redirect staying in place.

    Fix: Update your internal links to point at this URL rather than at the old one.

    isolated_via_redirect

  • Page reachable only through a canonical

    Warning

    Nothing on your site links to this page. We only found it because another page names it as the original, and a canonical is not a link - no ranking signals travel along one.

    Fix: Link to it from a relevant page. If it should not be the canonical target, point the canonical at a page that is actually linked.

    isolated_via_canonical

  • Alt text is a file name

    Info

    An alt of hero-image-2.jpg is the box being filled rather than the image being described. It reads out loud exactly as badly as it looks.

    Fix: Replace it with what the image shows. If the image is decoration, an empty alt is the correct answer.

    alt_text_filename

  • Alt text is a paragraph

    Info

    Alt text over a hundred characters is read out in full before a screen reader moves on, and it is describing rather than replacing the image.

    Fix: Say what the image shows in a sentence. Anything longer belongs in the page text, where everybody can read it.

    alt_text_too_long

  • Embed loads before it is needed

    Info

    An embedded video or map is usually the heaviest thing on the page, and without lazy loading it is fetched even when it is far below the fold - competing with the content somebody is actually reading.

    Fix: Add loading="lazy" to the iframe. One attribute, no behaviour change for anything above the fold.

    iframe_no_lazy

  • Images have no width or height

    Info

    The browser cannot reserve space before an image arrives, so the text jumps as the page loads - the thing Google measures as layout shift.

    Fix: Put width and height attributes on the img tags. The real pixel size; CSS can still resize it.

    img_dimensions_missing

  • Images without alt text

    Info

    Screen-reader users get nothing, and search engines cannot tell what the image shows.

    Fix: Describe each image's content. Leave alt empty only for purely decorative images.

    img_alt_missing

  • Internal link marked nofollow

    Info

    You are telling search engines not to follow a link within your own site, which usually is not intended.

    Fix: Remove rel=nofollow from internal links unless you have a specific reason.

    nofollow_internal

  • Internal links with no text

    Info

    These links carry no words at all - usually an image or an icon with no alternative text. They pass no description to the destination and announce nothing to a screen reader.

    Fix: Add alt text to linked images, or a visually hidden label.

    anchor_text_empty

  • Links labelled click here and read more

    Info

    Link text tells search engines what the destination is about, and it is what a screen reader announces. "Read more" describes neither.

    Fix: Use the destination's subject as the link text.

    anchor_text_generic

  • Links open a new tab without rel=noopener

    Info

    A link with target=_blank hands the page it opens a handle back to yours unless rel says otherwise. A security default rather than an SEO one.

    Fix: Add rel=noopener to links that open in a new tab.

    blank_no_noopener

  • No modern image formats on the page

    Info

    WebP and AVIF are typically a quarter to a half the size of the same JPEG or PNG, and every byte is on the path to the first thing a visitor sees.

    Fix: Export images as WebP or AVIF, or serve them through something that converts on the fly.

    img_legacy_format

  • Page links nowhere else on the site

    Info

    A reader has nowhere to go next, and the authority this page has earned stays here instead of flowing on to your other pages.

    Fix: Add a few relevant internal links - a related article, the parent category, or the obvious next step.

    dead_end_page

  • This page is linked both with and without nofollow

    Info

    The same page is linked one way from one template and another way from another, which is usually a bug rather than a decision.

    Fix: Pick one. Internal links to your own pages should normally be followed.

    mixed_follow_nofollow

How quickly the page becomes useful, measured where we can measure it.

16 checks, up to 13 points · 8 warning, 8 info

  • Content moves around while loading, for real visitors

    Warning

    Cumulative Layout Shift is above the poor threshold for a quarter of real loads. This is the metric behind mis-clicks: somebody reaches for a link and an advert pushes it away.

    Fix: Reserve space for images, adverts and embeds by setting explicit dimensions. Fonts that swap late are the other common cause.

    cwv_cls_poor

  • HTML is sent uncompressed

    Warning

    Text compresses to roughly a fifth of its size, so this page is several times bigger over the wire than it needs to be - worst on a mobile connection.

    Fix: Turn on gzip or brotli at the web server or CDN. This is a configuration switch, not a code change.

    compression_missing

  • Resources delay the first paint

    Warning

    Stylesheets and scripts in the head must be downloaded and parsed before anything appears. Lighthouse measured how much time this costs on the sampled pages.

    Fix: Defer what is not needed for the first screen, and inline the small amount of CSS that is.

    lab_render_blocking

  • Scripts in the head block the page from painting

    Warning

    The browser stops building the page until each of these downloads and runs, so the visitor waits on a blank screen for something they cannot see yet.

    Fix: Add defer to scripts that need the page, async to ones that do not, or move them to the end of the body.

    render_blocking_scripts

  • Server responds slowly

    Warning

    Over 800 ms before the first byte delays everything that follows, on every visit. Measured while this crawl was fetching the rest of the site, so a busy origin can raise it.

    Fix: Check these URLs on their own before changing anything - if they are fast when nothing else is running, the crawl was the load. If they are slow either way, look at server-side rendering time, database queries and caching.

    ttfb_slow

  • Slow to respond when people interact, for real visitors

    Warning

    Interaction to Next Paint is over half a second at the 75th percentile. Somebody taps and the page does nothing for long enough that they tap again.

    Fix: Break up long JavaScript tasks and defer work that is not needed before the first interaction.

    cwv_inp_poor

  • Slow to show the main content, for real visitors

    Warning

    Largest Contentful Paint is over four seconds for a quarter of the people who load your site. This is not a lab estimate - it is what Chrome measured on real devices over the last month, and it is the number Google ranks on.

    Fix: Find the largest element above the fold, usually a hero image or a web font, and make it arrive sooner. Preloading it is often the whole fix.

    cwv_lcp_poor

  • Stylesheet blocks the first paint

    Warning

    The browser will not paint anything until it has these stylesheets, so each one is a round trip in front of your content. CSS blocks harder than JavaScript does: a script delays the parser, a stylesheet delays the pixels.

    Fix: Serve one stylesheet for the page, and give anything that is not needed immediately a media attribute (print, or a query that does not match at load) so it is fetched at a lower priority.

    render_blocking_css

  • Font preloaded without crossorigin

    Info

    Fonts are always fetched in CORS mode, whatever the preload says. Without the crossorigin attribute the browser cannot reuse the preloaded copy, so it downloads the font twice - the preload has made the page slower rather than faster.

    Fix: Add crossorigin to the preload: <link rel="preload" as="font" crossorigin href="...">. No value is needed; the bare attribute is correct.

    font_preload_uncorsed

  • Images are larger than they need to be

    Info

    The images are either sized for a bigger screen than the one asking, or served in a format that costs more bytes than a modern one for the same quality.

    Fix: Serve responsive sizes and use WebP or AVIF. This is usually the single largest saving on a content page.

    lab_image_delivery

  • Low performance score in the lab

    Info

    Lighthouse scored a sampled page below fifty on a simulated mobile connection. A lab score is one load on one machine and is not what Google ranks on, so read it as a diagnosis rather than a verdict - the field metrics above are the verdict.

    Fix: Open the finding for the opportunities Lighthouse listed. They are ordered by the time each would save.

    lab_performance_low

  • Most of the CSS is never used

    Info

    The page downloads stylesheet bytes it never applies. On a phone connection that is time spent before anything is visible.

    Fix: Split the stylesheet so each page loads what it uses. A framework's full build on every page is the usual cause.

    lab_unused_css

  • Most of the JavaScript is never used

    Info

    The page downloads and parses script it never runs. Parsing is the expensive half and it happens on the main thread, so it delays interaction as well as loading.

    Fix: Code-split by route, and load third-party widgets only on the pages that use them.

    lab_unused_js

  • Page loads from many other domains

    Info

    Each extra domain is its own DNS lookup and connection before anything from it appears, and any one of them being slow makes your page slow.

    Fix: Drop the ones nobody reads the data from, and self-host what you can - fonts especially.

    third_party_heavy

  • Static files are not cached for long

    Info

    Images, stylesheets and scripts are re-downloaded more often than they need to be, so a returning visitor pays again for bytes that did not change.

    Fix: Set a long max-age on files whose URL changes when their content does. If the URLs are already fingerprinted, a year is safe.

    lab_cache_policy

  • Very large HTML document

    Info

    Over 1.5 MB of HTML alone is slow to download and parse, especially on mobile connections.

    Fix: Move inline data and repeated markup out of the document; paginate very long pages.

    page_heavy

21 checks, up to 10 points · 3 critical, 14 warning, 4 info

  • A control the keyboard cannot reach

    Critical

    A <div> with a click handler, or a role="button" with no tabindex, works for a mouse and does not exist for a keyboard. It is also invisible to a screen reader user, who navigates by exactly the same route.

    Fix: Use a real <button> or <a href>. If it has to stay a div, give it tabindex="0" and a key handler for Enter and Space - which is three things a <button> does for free.

    a11y_keyboard_unreachable

  • A select with no label

    Critical

    A dropdown with no associated label is announced as an unlabelled combo box. On a country picker, a size picker or a delivery option, that is a form somebody cannot complete.

    Fix: Connect it to a <label> with for and id, or give it an aria-label. The first option is not a label - it disappears the moment a choice is made.

    a11y_select_name

  • Form fields with no label

    Critical

    A field with no associated label is read out as an unlabelled text box. On a checkout or a contact form that is the difference between using the site and leaving it.

    Fix: Connect each input to a <label> with for and id, or give it an aria-label. Placeholder text is not a label - it disappears the moment somebody types.

    a11y_form_label

  • A control inside another control

    Warning

    A button inside a link, or a link inside a button. A screen reader announces one control and the browser fires the other, so what the user is told and what happens are two different things.

    Fix: Take one of them out. Two actions in one place need two controls side by side, not one inside the other.

    a11y_nested_interactive

  • A focusable element hidden from assistive technology

    Warning

    aria-hidden="true" on something a keyboard can still reach: the tab order stops on a control a screen reader has been told does not exist, and the user is told nothing at all about where they are.

    Fix: Either remove the aria-hidden, or take the element out of the tab order with tabindex="-1" and inert. Hidden means hidden from everybody.

    a11y_aria_hidden_focus

  • A focused control is hidden behind a sticky element

    Warning

    WCAG 2.2 added this because it is what a sticky header does: the keyboard moves to a link, the browser scrolls it to the top of the window, and the header covers it. The user is on a control they cannot see.

    Fix: Add scroll-margin-top to focusable elements, the height of the sticky header. One rule, usually on a global selector.

    a11y_focus_obscured

  • A scrollable area the keyboard cannot reach

    Warning

    A box with its own scrollbar - a code block, a wide table, a map - that no keyboard can focus is content a keyboard user cannot read. The mouse scrolls it and nothing else does.

    Fix: Give the scrolling element tabindex="0" so it can be focused and scrolled with the arrow keys, and a label saying what it is.

    a11y_scrollable_region

  • ARIA attributes that do not work

    Warning

    ARIA overrides what a browser would otherwise announce, so an invalid role or a required attribute that is missing does more harm than leaving it out. The element is announced as something it is not.

    Fix: Fix the role or the attribute, or remove the ARIA - a plain <button> is announced correctly with no ARIA at all.

    a11y_aria

  • Buttons with nothing to announce

    Warning

    Same as an unnamed link, on a control that does something. A screen reader announces a button with no indication of what pressing it will do.

    Fix: Add visible text or an aria-label. An icon-only button needs the label even though sighted users can see the icon.

    a11y_button_name

  • Nothing shows where the keyboard is

    Warning

    Somebody navigating by keyboard has no cursor. The focus ring is the only thing telling them which control they are on, and outline: none with nothing put in its place removes it - measured on the page with the control actually focused, because a focus style exists only while it is.

    Fix: Give focused controls a visible style: :focus-visible { outline: 2px solid; outline-offset: 2px } is enough, and it only shows for keyboard users. Never outline: none on its own.

    a11y_focus_invisible

  • Tap targets are too small or too close together

    Warning

    WCAG 2.2 asks for 24 by 24 CSS pixels, or enough space around a smaller control. A link in a row of links that is six pixels tall is a link nobody with unsteady hands, a large finger or a trackball can hit reliably - and everybody misses it on a train.

    Fix: Give the control padding until it is 24px in both directions, or leave 24px of clear space around it. Padding is usually enough; the visible box does not have to grow.

    a11y_target_size

  • Text does not stand out enough from its background

    Warning

    Measured against the WCAG contrast requirement in a real browser. Low contrast is the single most common accessibility failure on the web, and it is the one that affects the most people - anyone reading on a phone in daylight, not only people with a diagnosis.

    Fix: Darken the text or lighten the background until the ratio passes. It is almost always one or two values in a stylesheet rather than a per-page fix.

    a11y_contrast

  • The page blocks zooming

    Warning

    user-scalable=no or a maximum-scale below 2 stops somebody pinching to enlarge the text. It is a WCAG failure and a mobile-usability one, and it is a single attribute in the head of every page on the site.

    Fix: Remove user-scalable=no and any maximum-scale below 5 from the viewport meta tag. There is no layout it protects that a media query cannot handle.

    a11y_viewport_zoom

  • The page does not declare its language

    Warning

    Without a valid lang on the html element a screen reader guesses which language to pronounce the page in, and it guesses wrong often enough to make the page unusable.

    Fix: Set lang on the <html> element to a valid code for the page's language.

    a11y_html_lang

  • The page has no title for assistive technology

    Warning

    The title is the first thing announced when a page opens and the label of its browser tab. Without one, every page on the site sounds identical.

    Fix: Add a <title> that describes this page specifically.

    a11y_document_title

  • An iframe with no title

    Info

    A screen reader announces frames by their title. Without one it says "frame", so a page with an embedded video, map and form has three frames and no way to tell them apart.

    Fix: Add a title to each <iframe> saying what is inside it - "Checkout payment form", not "iframe".

    a11y_frame_title

  • Headings skip levels

    Info

    Headings are how somebody using a screen reader navigates a long page. A jump from h2 to h4 breaks the outline they are navigating by.

    Fix: Use headings in order. If a level looks wrong visually, change the styling rather than the level.

    a11y_heading_order

  • Other accessibility issues found

    Info

    Further WCAG A and AA failures found by the automated audit, grouped here so the report stays readable. The rule names travel with the finding.

    Fix: Open the finding for the rule names and the elements involved. Each rule links to Deque's explanation of what it means and how to fix it.

    a11y_other

What is not on this list

Your own rules. A site can add checks of its own - a string that must appear on every page, a meta tag that must never be missing - and those are deliberately kept out of the health score, because that number is ours and has to mean the same thing on every site. How custom rules work

The catalogue grows. When a check is added, an existing scan is not re-scored behind your back - the comparison you were shown yesterday stays the comparison you were shown yesterday, and the new check appears on the next crawl.