Site audit method

What we measure, and how.

Every value in your audit result, what it means, the line it has to clear and the exact rule we use to check it. Some thresholds are published by Google. Others are our own, and we mark which is which.

Test your site

Who set each threshold

  • Google's published threshold

    Published by Google in its Lighthouse or web.dev documentation, linked on each value.

  • DAPT's threshold

    Our own line. No published standard sets it, so read it as our judgement, not a rule from Google.

  • Yes-or-no rule

    A yes-or-no check with no number to tune.

01

Is it fast on a phone?

We run Google Lighthouse once on a simulated mobile phone with a slowed-down connection, and we time our own download of the page. Together these six values say how quickly the page appears and how heavy it is.

  • Speed tile

    Performance

    Google's overall speed score for the page on a phone, from 0 to 100.

    Threshold

    Good: 90 to 100. Needs improvement: 50 to 89. Poor: 0 to 49.

    Google's published threshold
    Source
    Chrome for Developers: Lighthouse performance scoring(opens in a new tab)
    How we check

    We call Google's PageSpeed Insights API once per audit with the mobile setting and read the Performance category score. Lighthouse reports it from 0 to 1; we multiply by 100 and round to a whole number.

    90 or higher is Good, 50 to 89 is Needs improvement, below 50 is Poor. These are Lighthouse's own colour bands. If the test takes longer than 60 seconds or returns no score, the tile shows Not measured.

  • Speed tile

    Largest Contentful Paint

    How long until the biggest thing on screen, usually a photo or the headline, has appeared.

    Threshold

    Good: 2.5 s or less. Needs improvement: up to 4.0 s. Poor: over 4.0 s.

    Google's published threshold
    Source
    web.dev: Largest Contentful Paint(opens in a new tab)
    How we check

    We read Largest Contentful Paint from the same Lighthouse run, convert it to seconds and round to one decimal. The badge is set from that rounded number, so 2.54 s is shown as 2.5 s and rated Good.

    The rounding is deliberate: a tile that reads 2.5 s must never carry a Needs improvement badge.

    Google's 2.5 s threshold describes real visits, measured at the 75th percentile. We report one simulated lab run on a throttled mid-range phone. Read it as a strong signal, not as the figure Google holds for your site.

  • On-page check, Speed and page weight

    Server responds quickly

    How long your server takes to start sending the page once it is asked for it.

    Threshold

    600 ms or less

    Google's published threshold
    Source
    Chrome for Developers: Reduce initial server response time(opens in a new tab)
    How we check

    We use the server response time Lighthouse measures in the same run (its server-response-time audit). It passes at 600 ms or less, the same line at which Google's Lighthouse audit fails.

    We don't use our own timing here, because our request includes opening a fresh connection. If the speed test did not finish, this check shows Not measured.

  • On-page check, Speed and page weight

    Page loads quickly

    How long it takes us to download the page's HTML from start to finish.

    Threshold

    2.5 s (2,500 ms) or less

    DAPT's threshold
    Source
    DAPT. No published standard sets this number.
    How we check

    We time our own request for the page from our server: from sending the request until the last byte of HTML arrives, including looking up the address and opening a secure connection. It passes at 2,500 ms or less.

    This times the HTML file only, not images, scripts or styles, and it is not a phone test.

  • On-page check, Speed and page weight

    Page size is reasonable

    How much HTML the page sends, before any images or scripts.

    Threshold

    300 KB (307,200 bytes) or less

    DAPT's threshold
    Source
    DAPT. No published standard sets this number.
    How we check

    We measure the page's HTML after decompression. It passes at 307,200 bytes or less. We stop reading at 5 MB, and a page that reaches that limit fails.

    Images, scripts and styles are not counted.

  • On-page check, Speed and page weight

    Files are compressed

    Whether your server shrinks text files before sending them, so they download faster.

    Threshold

    Every sampled file compressed

    Yes-or-no rule
    Source
    Chrome for Developers: Enable text compression(opens in a new tab)
    How we check

    Every request we send asks for gzip or Brotli compression. We read the Content-Encoding header on the page itself and on up to 2 of its scripts or stylesheets.

    It passes when every sampled file reports gzip, br, deflate, zstd or compress. Because we asked for compression, a file that comes back with no encoding header was sent uncompressed, and the check fails. Files we couldn't fetch are left out of the sample; if none could be fetched, it shows Not measured.

02

Can search engines read it?

These checks look at what a search engine sees when it fetches the page: whether the page answers, which address should be indexed, and whether the title and description match what is on the page.

  • Speed tile

    SEO

    Google Lighthouse's score for basic search-engine readiness, from 0 to 100.

    Threshold

    Good: 90 to 100. Needs improvement: 50 to 89. Poor: 0 to 49.

    Google's published threshold
    Source
    Chrome for Developers: Lighthouse SEO audits(opens in a new tab)
    How we check

    We call Google's PageSpeed Insights API once per audit with the mobile setting and read the SEO category score. Lighthouse reports it from 0 to 1; we multiply by 100 and round to a whole number.

    90 or higher is Good, 50 to 89 is Needs improvement, below 50 is Poor. These are Lighthouse's own colour bands. If the test takes longer than 60 seconds or returns no score, the tile shows Not measured.

  • On-page check, Crawl and indexing

    Page answers with status 200

    Whether the page loads normally, rather than returning an error.

    Threshold

    Status 200

    Yes-or-no rule
    Source
    DAPT's own rule.
    How we check

    We request the address you entered and follow at most one redirect. The check passes only when the final answer is HTTP status 200.

    If there is more than one redirect, or we can't connect within 10 seconds, every check that reads the page shows Not measured.

    Status 401, 403 or 429 means the site's bot protection refused our request. We never saw the page, so this check, the load time and the page size show Not measured instead of a fail.

  • On-page check, Crawl and indexing

    Canonical tag points to this page

    Whether the page tells search engines that this address is the one to index.

    Threshold

    Every canonical tag names this page

    Yes-or-no rule
    Source
    Google Search Central: Canonical URLs(opens in a new tab)
    How we check

    We read every link rel="canonical" tag and resolve it against the page address, or against a base tag if there is one. Each must match the page we fetched on scheme, host, port, path and query string. One trailing slash is ignored.

    A page with no canonical tag fails.

  • On-page check, Crawl and indexing

    No meta refresh redirect

    Whether the page sends visitors elsewhere with an old-style timed redirect.

    Threshold

    No refresh tag with a target address

    Yes-or-no rule
    Source
    Google Search Central: Redirects(opens in a new tab)
    How we check

    Fails when a meta http-equiv="refresh" tag names a target address. A refresh that only reloads the same page, with no address, passes.

  • On-page check, Crawl and indexing

    Search-friendly address

    Whether the page address is short and readable.

    Threshold

    No more than 2 query parameters, plus the rules below

    DAPT's threshold
    Source
    Google Search Central: URL structure(opens in a new tab)
    How we check

    Fails if the final address has a session ID parameter (sid, sessionid, phpsessid or jsessionid), more than 2 query parameters, spaces, uppercase letters in the path, or percent-encoded characters in the path. The first problem found, in that order, is the one reported.

  • On-page check, Title and description

    Page title present

    Whether the page has a title, the text that usually becomes the headline in search results.

    Threshold

    At least one non-empty title tag

    Yes-or-no rule
    Source
    Google Search Central: Title links(opens in a new tab)
    How we check

    Passes when the page has at least one title tag with text in it. Titles inside SVG images don't count.

  • On-page check, Title and description

    Title not too long

    Long titles get cut off in search results.

    Threshold

    60 characters or fewer

    DAPT's threshold
    Source
    Google Search Central: Title links(opens in a new tab)
    How we check

    We count the characters in the first non-empty title, after collapsing runs of spaces. It passes at 60 or fewer. Google publishes no character limit for titles. With no title, it shows Not measured.

  • On-page check, Title and description

    Title not too short

    A very short title rarely says enough about the page.

    Threshold

    15 characters or more

    DAPT's threshold
    Source
    DAPT. No published standard sets this number.
    How we check

    Same count as above. It passes at 15 characters or more. With no title, it shows Not measured.

  • On-page check, Title and description

    Only one title tag

    Two title tags leave search engines to guess which one you meant.

    Threshold

    Exactly 1 title tag

    Yes-or-no rule
    Source
    DAPT's own rule.
    How we check

    Passes when there is exactly one title tag outside SVG images. With no title tag, it shows Not measured.

  • On-page check, Title and description

    Title matches the page content

    Whether the title describes what is actually on the page.

    Threshold

    At least 1 title word found in the page text

    DAPT's threshold
    Source
    DAPT. No published standard sets this number.
    How we check

    We take the title's words of 4 or more letters, skip common words such as "about" or "which", and look for them in the page's visible text. One match passes.

    If no word of 4 or more letters is left, it shows Not measured.

  • On-page check, Title and description

    Meta description present and 50–160 characters

    Whether the page has a short summary that search engines can show under the title.

    Threshold

    50 to 160 characters

    DAPT's threshold
    Source
    Google Search Central: Meta descriptions(opens in a new tab)
    How we check

    Passes when there is a meta name="description" tag with 50 to 160 characters, inclusive. One check covers both conditions, and the result says which one failed: missing, too short or too long.

    Google publishes no length limit for descriptions.

  • On-page check, Title and description

    Description matches the page content

    Whether the description describes what is actually on the page.

    Threshold

    At least 1 description word found in the page text

    DAPT's threshold
    Source
    DAPT. No published standard sets this number.
    How we check

    Same method as the title match, applied to the meta description. With no description, it shows Not measured.

  • On-page check, Title and description

    No duplicate meta tags

    Repeated meta tags send search engines mixed signals.

    Threshold

    Each meta name or property at most once

    Yes-or-no rule
    Source
    DAPT's own rule.
    How we check

    Fails when the same meta name or property appears more than once. Two exceptions are allowed: theme-color tags that carry a media attribute, and Open Graph tags that are meant to repeat, such as og:image.

03

Can AI tools read it?

AI answer tools depend on crawlers and indexes, much like search engines. We check whether those crawlers are allowed in, whether the text is there without running JavaScript, and whether the page describes itself in a format machines read directly. The first two make up AEO readiness and the last two GEO readiness. Each meets the target only when both of its checks pass.

  • AI readiness, AEO

    Search and AI crawlers allowed

    Whether your robots.txt file lets the crawlers behind search engines and AI answer tools fetch this page.

    Threshold

    All 5 scored crawlers allowed

    Yes-or-no rule
    Source
    RFC 9309: Robots Exclusion Protocol(opens in a new tab)
    How we check

    We fetch /robots.txt, following up to 5 redirects, and apply the matching rules of RFC 9309 to the path of the page you entered, for each of these 5 crawlers: Googlebot, Bingbot, OAI-SearchBot, PerplexityBot, Claude-SearchBot. Each uses the groups that name it, or the * groups if none does. The longest matching rule wins, and Allow wins a tie.

    It passes when all of them may fetch the page. No robots.txt (status 400 to 499), or more than 5 redirects, means no rules apply, so it passes.

    A server error (500 or above) gets one retry a second later, since a single error may be temporary. If it fails again, the check fails: RFC 9309 requires crawlers to treat an unreachable robots.txt as blocking the whole site.

    We also test Google-Extended with the same rules. When it is blocked, the result shows an information line, and the score does not change.

  • AI readiness, AEO

    Content readable without JavaScript

    Whether the main text is in the page itself, so crawlers that don't run JavaScript can read it.

    Threshold

    An H1 heading and at least 100 words

    DAPT's threshold
    Source
    DAPT. No published standard sets this number.
    How we check

    We read the HTML exactly as the server sends it, without running any scripts, and remove script, style, noscript and template elements. It passes when there is an H1 heading with text and at least 100 words of visible text.

    Status 404 or 410 (the page isn't there), another 400-range status, or a file that isn't HTML fails.

    Status 401, 403 or 429 shows Not measured: the site's bot protection refused our request, so we never saw the content. A server error also shows Not measured.

  • AI readiness, GEO

    Structured data

    Whether the page describes your business and content in schema.org terms that machines read directly.

    Threshold

    At least 1 schema.org type found

    Yes-or-no rule
    Source
    schema.org: Getting started(opens in a new tab)
    How we check

    It passes when the page has at least one JSON-LD block that parses as valid JSON and declares a schema.org @type, or a microdata itemtype from schema.org. We list the types we found.

    We don't check that the properties are complete or that they qualify for Google rich results.

    If we couldn't read the page, including when the site's bot protection refused our request (401, 403 or 429), it shows Not measured.

  • AI readiness, GEO

    Sitemap

    Whether there is a sitemap file listing your pages, which helps crawlers find them.

    Threshold

    A sitemap file answers with status 200

    Yes-or-no rule
    Source
    sitemaps.org: Sitemap protocol(opens in a new tab)
    How we check

    We try up to 3 Sitemap lines from robots.txt, then /sitemap.xml, then /sitemap_index.xml. It passes on the first one that answers 200 and contains a urlset or sitemapindex element. We read the first 256 KB.

    We don't check that this page is listed in it. If every location fails to connect or returns a server error, it shows Not measured.

04

Is the page built right?

These checks cover how the page is put together: accessibility, security, the HTML itself and the files it loads.

  • Speed tile

    Best Practices

    Google Lighthouse's score for general good practice, such as security and avoiding outdated browser features.

    Threshold

    Good: 90 to 100. Needs improvement: 50 to 89. Poor: 0 to 49.

    Google's published threshold
    Source
    Chrome for Developers: Lighthouse Best Practices audits(opens in a new tab)
    How we check

    We call Google's PageSpeed Insights API once per audit with the mobile setting and read the Best Practices category score. Lighthouse reports it from 0 to 1; we multiply by 100 and round to a whole number.

    90 or higher is Good, 50 to 89 is Needs improvement, below 50 is Poor. These are Lighthouse's own colour bands. If the test takes longer than 60 seconds or returns no score, the tile shows Not measured.

  • Speed tile

    Accessibility

    Google Lighthouse's automated score for how usable the page is for people with disabilities, such as screen reader users.

    Threshold

    Good: 90 to 100. Needs improvement: 50 to 89. Poor: 0 to 49.

    Google's published threshold
    Source
    Chrome for Developers: Lighthouse accessibility scoring(opens in a new tab)
    How we check

    We call Google's PageSpeed Insights API once per audit with the mobile setting and read the Accessibility category score. Lighthouse reports it from 0 to 1; we multiply by 100 and round to a whole number.

    90 or higher is Good, 50 to 89 is Needs improvement, below 50 is Poor. These are Lighthouse's own colour bands. If the test takes longer than 60 seconds or returns no score, the tile shows Not measured.

    Automated checks find only part of the accessibility problems a person testing the page would find.

  • Speed tile

    HTTPS

    Whether the page and everything it loads come over a secure connection.

    Threshold

    Yes is Good. No is Poor.

    Google's published threshold
    Source
    Chrome for Developers: Uses HTTPS(opens in a new tab)
    How we check

    From Lighthouse's Uses HTTPS audit in the same run: Yes when the audit passes. Lighthouse fails it if the page or any file it loads uses plain http. There is no middle band, so No rates Poor.

  • On-page check, Security and files

    Served over HTTPS

    Whether the page itself is served over a secure connection.

    Threshold

    Final address starts with https

    Yes-or-no rule
    Source
    DAPT's own rule.
    How we check

    Passes when the final address, after at most one redirect, uses https. Unlike the Lighthouse tile, this looks only at the page, not the files it loads.

  • On-page check, Security and files

    Character encoding declared

    Whether the page says how its text is encoded, so letters and symbols display correctly.

    Threshold

    Declared in the page or the server header

    Yes-or-no rule
    Source
    HTML Standard: The DOCTYPE(opens in a new tab)
    How we check

    Passes with a meta charset tag, a meta http-equiv="content-type" tag that includes a charset, or a charset in the Content-Type header.

  • On-page check, Security and files

    No broken images, scripts or styles

    Whether the files the page relies on actually load.

    Threshold

    0 broken files in the sample

    Yes-or-no rule
    Source
    DAPT's own rule.
    How we check

    We check up to 17 unique images, scripts and stylesheets in the order they appear, with a 6-second limit each. Most are checked with a HEAD request, which asks for the file's headers but not the file itself. The first 2 scripts or stylesheets get a normal request so we can read their compression.

    What we fetch: one audit sends at most 40 requests to your site from our server, never more than 4 at a time. Up to 20 read robots.txt, the page itself and your sitemap, with a 10-second limit each. Up to 20 more check the page's files and, when the page has no icon tag, /favicon.ico. Every redirect and retry counts toward these limits. Separately, Google's PageSpeed service loads the page once in its own browser for the speed results, as a visitor would. A result is reused for 24 hours, so testing the same address again in that time sends nothing.

    A file is broken when it answers with a status outside 200 to 299. Status 401, 403 and 429 count as couldn't be checked instead, because they are often aimed at bots. It fails with any broken file, and passes when none is broken and at least one loaded. A page that references no such files passes.

  • On-page check, Security and files

    Favicon present

    Whether the site has the small icon shown in browser tabs and next to search results.

    Threshold

    An icon tag, or /favicon.ico answers 200

    Yes-or-no rule
    Source
    Google Search Central: Favicons(opens in a new tab)
    How we check

    Passes when the page has a link rel="icon" tag. Otherwise we request /favicon.ico: status 200 passes; 401, 403, 429, a server error or no connection shows Not measured; any other status fails.

  • On-page check, Content and structure

    Main heading (H1) present

    Whether the page has a main heading that says what it is about.

    Threshold

    At least 1 H1 with text

    Yes-or-no rule
    Source
    DAPT's own rule.
    How we check

    Passes when an h1 element contains text.

  • On-page check, Content and structure

    Enough text on the page

    Whether there is enough written content for search engines and AI tools to understand the page.

    Threshold

    300 words or more

    DAPT's threshold
    Source
    DAPT. No published standard sets this number.
    How we check

    We count words in the visible text after removing script, style, noscript and template elements. A word is any run of characters that contains a letter or digit. It passes at 300 or more.

  • On-page check, Content and structure

    Text is easy to read

    Whether the writing is plain enough for most adults to read comfortably.

    Threshold

    Flesch Reading Ease of 50 or higher

    DAPT's threshold
    Source
    DAPT. No published standard sets this number.
    How we check

    We score the visible text with the Flesch Reading Ease formula: 206.835 − 1.015 × (words ÷ sentences) − 84.6 × (syllables ÷ words), rounded to one decimal. Syllables are estimated by counting vowel groups.

    It passes at 50 or higher. With fewer than 100 words, or a lang attribute that isn't English, it shows Not measured. A page with no lang attribute is treated as English.

  • On-page check, Content and structure

    No placeholder text

    Whether template filler text was left on the page.

    Threshold

    None of 3 placeholder phrases

    Yes-or-no rule
    Source
    DAPT's own rule.
    How we check

    Fails when the visible text or the title contains "lorem ipsum", "your text here" or "insert text", in any capitalisation.

  • On-page check, Content and structure

    Every image has alt text

    Whether every image has a text description for screen readers and search engines.

    Threshold

    0 images missing alt text

    Yes-or-no rule
    Source
    HTML Standard: Images and alt text(opens in a new tab)
    How we check

    Fails when any img element has no alt attribute. An empty alt (alt="") passes: it is the HTML standard's way to mark an image as decorative. A page with no images passes.

  • On-page check, Content and structure

    HTML doctype declared

    Whether the page tells browsers to use modern HTML rules.

    Threshold

    Starts with <!DOCTYPE html>

    Yes-or-no rule
    Source
    HTML Standard: The DOCTYPE(opens in a new tab)
    How we check

    Passes when the HTML starts with <!DOCTYPE html>, allowing a byte-order mark, whitespace and comments before it.

  • On-page check, Content and structure

    No outdated HTML tags

    Whether the page uses HTML tags that modern browsers no longer support properly.

    Threshold

    None of 8 obsolete tags

    Yes-or-no rule
    Source
    HTML Standard: Obsolete features(opens in a new tab)
    How we check

    Fails if any of these tags appear: font, center, marquee, blink, big, strike, tt, applet.

  • On-page check, Content and structure

    No frames or Flash

    Whether the page relies on frames or Flash, which crawlers and phones handle badly.

    Threshold

    No frames and no Flash

    Yes-or-no rule
    Source
    HTML Standard: Obsolete features(opens in a new tab)
    How we check

    Fails with any frame or frameset element, or an object or embed element that loads Flash.

  • Bottom of the result

    Last updated

    The newest date we can find that says when the page last changed.

    Threshold

    Reported only

    Reported, not scored
    Source
    DAPT's own rule.
    How we check

    We take the newest of: the Last-Modified header, date meta tags such as article:modified_time, and this page's lastmod in the sitemap. Dates more than one day in the future, or before 1995, are ignored.

05

How to read your result

Every result carries one of four badges: Good, Needs improvement, Poor, or Not measured. Not measured means we could not get a reading we can stand behind, so we never show 0 in its place. Speed scores move a few points between runs, because each audit is a fresh lab test.

  • Good

    Clears the threshold. A passing check shows Pass in the same style.

  • Needs improvement

    Close, but below the Good line. Only Lighthouse scores and LCP have this middle band.

  • Poor

    Misses the threshold. A failing check shows Fail in the same style.

  • Not measured

    We could not get a reading we can stand behind: the site didn't answer, the test timed out, or the rule doesn't apply, such as the readability formula on a page that isn't in English.

We never put 0 in place of a missing value. A 0 is a real result and reads as a failure, so showing one for something we didn't measure would blame your site for our gap.

Expect speed scores to move a few points between runs. Each audit is a fresh lab test, and the network and your server behave slightly differently from one minute to the next.

06

What this test does not measure

It does not measure whether AI tools cite or mention you, which no tool can measure from a web address. It does not measure search rankings, traffic, leads or sales. It tests only the one page you entered.

  • Whether AI tools cite or mention you.

    No tool can measure that from a web address. Answers change with the person asking, how they ask and when.

  • Search rankings, traffic, leads or sales.

    We test how the page is built and served, not how it performs for your business.

  • Any page other than the one you entered.

    Each audit tests one address. Other pages on your site can score differently.

07

Why we don't count GPTBot and ClaudeBot

GPTBot and ClaudeBot collect pages to train AI models. Blocking them is a legitimate business choice, so we don't count it against you. We score the five crawlers that build search and answer indexes: Googlebot, Bingbot, OAI-SearchBot, PerplexityBot, Claude-SearchBot. Google-Extended does both jobs, so we test it and report it without scoring it.