Lighthouse SEO score: crawlability, titles, links, structured data
Thresholds ā reads formFactor, warningBelowScore and failBelowScore. When failBelowScore is not lower than warningBelowScore the audit fails with a single check (401) and Lighthouse does not run.
Lighthouse run ā runs the Lighthouse CLI (version pinned in the image, reported in the 100 check) with the seo category only, the desktop preset or the mobile form factor, and the 37AuditsBot user agent. The run has a time budget derived from the audit's remaining time; a page that does not finish loading inside it is an ERROR (500).
Blocked or unloadable page ā an HTTP 403, 429 or Cloudflare challenge on the document is the platform's blocked response (590). Any other Lighthouse runtime error (NO_FCP, PAGE_HUNG, DNS_FAILURE, ERRORED_DOCUMENT_REQUEST, ā¦) is an ERROR (500) that names the error.
Score ā the SEO score (0ā100) is compared with the thresholds: below failBelowScore is FAIL (400), from failBelowScore up to but excluding warningBelowScore is WARNING (300). A category Lighthouse could not score is an ERROR (501). At or above warningBelowScore the audit succeeds (200).
Audits ā every audit Lighthouse lists under the SEO score becomes a check: a scored audit below Lighthouse's pass mark (0.9) is a FAIL whose code is 400 plus the audit's fixed number in this auditor's catalog (10 audits, 410ā420); an audit Lighthouse reports without a score or leaves to a manual check is an INFORMATION with 100 plus that number. An audit a newer Lighthouse adds gets 490 or 190 until the catalog is updated. Hidden Lighthouse audits and audits that do not apply to the page are not reported. These checks keep their own status but never change the result: the score alone decides it.
Report pin ā every result carries an INFORMATION check (100) with the Lighthouse and Chrome versions, the device profile, the run duration and Lighthouse's benchmark index, because scores are only comparable between runs of the same Lighthouse version.
The Lighthouse navigation is not signed with Web Bot Auth: Lighthouse opens its own browser target and its only header hook adds headers to every request of the page, which breaks cross-origin fetches. Allowlist the 37AuditsBot user agent if the site challenges unsigned bots. With Basic auth the Authorization header is sent on every request the page makes, third-party origins included, so prefer allowlisting over credentials for a staging site that loads third-party scripts.
| Key | Type | Default | Description |
|---|---|---|---|
formFactor | string | desktop | desktop (Lighthouse desktop preset: no CPU slowdown, fast network) or mobile (Moto G Power emulation, simulated 4G and 4x CPU slowdown, the PageSpeed Insights default). Any other value falls back to desktop. |
warningBelowScore | integer (1ā100) | 90 | A SEO score below this value produces a WARNING (300). |
failBelowScore | integer (0ā99) | 50 | A SEO score below this value produces a FAIL (400). Must be lower than warningBelowScore. |
An invalid value (missing, fractional, outside 0ā100) makes the auditor fall back to that preference's default and log a warning. A fail threshold equal to or above the warning threshold is not an invalid value: it makes the audit fail (401) until the thresholds are fixed.
Every row maps to one checkRule* method and one CheckCode.
| CheckCode | Status | When it fires | Recommendation | Why it matters |
|---|---|---|---|---|
37A-LighthouseSeoAuditor-100 | INFORMATION | Always. Records the Lighthouse and Chrome versions, the device profile, the run duration and the benchmark index: Lighthouse 12.8.2 on Chrome 138.0.7204.0 audited the page as desktop in 18 s (benchmark index 2186). | ā (recommendation is null; nothing for the site to change) | ā |
37A-LighthouseSeoAuditor-120 | INFORMATION | Lighthouse leaves audit structured-data to a manual check: Structured data is valid. Message: Check manually: Structured data is valid (Lighthouse SEO audit structured-data; Lighthouse cannot automate it). | Run the Structured Data Testing Tool (https://search.google.com/structured-data/testing-tool/) and the Structured Data Linter (http://linter.structured-data.org/) to validate structured data. Learn more about Structured Data (https://developer.chrome.com/docs/lighthouse/seo/structured-data/). | ā |
37A-LighthouseSeoAuditor-190 | INFORMATION | An audit this catalog does not list (added by a newer Lighthouse) is reported without a score or left to a manual check. Message as above, with the audit's own title and id; inCatalog is false in the data. | Lighthouse's description of the audit, then the first items it found. | ā |
37A-LighthouseSeoAuditor-501 | ERROR | Lighthouse ran but gave the SEO category no score (score: null). | Re-run the audit; if the SEO score stays empty, check the page for errors during load in Lighthouse's report. | ā |
37A-LighthouseSeoAuditor-400 | FAIL | The SEO score is below failBelowScore. Message: Lighthouse SEO score is 42/100 (desktop); the fail threshold is 50. | Raise the SEO score ({score}) by fixing its lowest-scoring audits first: {audit title} ({display value}); ⦠| Pages search engines cannot crawl, index or understand get less organic traffic, so fewer people find the site without paid campaigns. |
37A-LighthouseSeoAuditor-410 | FAIL | Lighthouse audit is-crawlable scores below 0.9: Page is blocked from indexing. Message: Page is blocked from indexing: {display value or item count} (Lighthouse SEO audit is-crawlable, desktop). | Search engines are unable to include your pages in search results if they don't have permission to crawl them. Learn more about crawler directives (https://developer.chrome.com/docs/lighthouse/seo/is-crawlable/). Found: {up to three offending items}. | Search engines are unable to include your pages in search results if they don't have permission to crawl them. |
37A-LighthouseSeoAuditor-411 | FAIL | Lighthouse audit document-title scores below 0.9: Document doesn't have a <title> element. Message: Document doesn't have a <title> element: {display value or item count} (Lighthouse SEO audit document-title, desktop). | The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. Learn more about document titles (https://dequeuniversity.com/rules/axe/4.10/document-title). Found: {up to three offending items}. | The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. |
37A-LighthouseSeoAuditor-412 | FAIL | Lighthouse audit meta-description scores below 0.9: Document does not have a meta description. Message: Document does not have a meta description: {display value or item count} (Lighthouse SEO audit meta-description, desktop). | Meta descriptions may be included in search results to concisely summarize page content. Learn more about the meta description (https://developer.chrome.com/docs/lighthouse/seo/meta-description/). Found: {up to three offending items}. | Meta descriptions may be included in search results to concisely summarize page content. |
37A-LighthouseSeoAuditor-413 | FAIL | Lighthouse audit http-status-code scores below 0.9: Page has unsuccessful HTTP status code. Message: Page has unsuccessful HTTP status code: {display value or item count} (Lighthouse SEO audit http-status-code, desktop). | Pages with unsuccessful HTTP status codes may not be indexed properly. Learn more about HTTP status codes (https://developer.chrome.com/docs/lighthouse/seo/http-status-code/). Found: {up to three offending items}. | Pages with unsuccessful HTTP status codes may not be indexed properly. |
37A-LighthouseSeoAuditor-414 | FAIL | Lighthouse audit link-text scores below 0.9: Links do not have descriptive text. Message: Links do not have descriptive text: {display value or item count} (Lighthouse SEO audit link-text, desktop). | Descriptive link text helps search engines understand your content. Learn how to make links more accessible (https://developer.chrome.com/docs/lighthouse/seo/link-text/). Found: {up to three offending items}. | Descriptive link text helps search engines understand your content. |
37A-LighthouseSeoAuditor-415 | FAIL | Lighthouse audit crawlable-anchors scores below 0.9: Links are not crawlable. Message: Links are not crawlable: {display value or item count} (Lighthouse SEO audit crawlable-anchors, desktop). | Search engines may use href attributes on links to crawl websites. Ensure that the href attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. Learn how to make links crawlable (https://support.google.com/webmasters/answer/9112205) Found: {up to three offending items}. | Search engines may use href attributes on links to crawl websites. Ensure that the href attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. |
37A-LighthouseSeoAuditor-416 | FAIL | Lighthouse audit robots-txt scores below 0.9: robots.txt is not valid. Message: robots.txt is not valid: {display value or item count} (Lighthouse SEO audit robots-txt, desktop). | If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. Learn more about robots.txt (https://developer.chrome.com/docs/lighthouse/seo/invalid-robots-txt/). Found: {up to three offending items}. | If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. |
37A-LighthouseSeoAuditor-417 | FAIL | Lighthouse audit image-alt scores below 0.9: Image elements do not have [alt] attributes. Message: Image elements do not have [alt] attributes: {display value or item count} (Lighthouse SEO audit image-alt, desktop). | Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. Learn more about the alt attribute (https://dequeuniversity.com/rules/axe/4.10/image-alt). Found: {up to three offending items}. | Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. |
37A-LighthouseSeoAuditor-418 | FAIL | Lighthouse audit hreflang scores below 0.9: Document doesn't have a valid hreflang. Message: Document doesn't have a valid hreflang: {display value or item count} (Lighthouse SEO audit hreflang, desktop). | hreflang links tell search engines what version of a page they should list in search results for a given language or region. Learn more about hreflang (https://developer.chrome.com/docs/lighthouse/seo/hreflang/). Found: {up to three offending items}. | hreflang links tell search engines what version of a page they should list in search results for a given language or region. |
37A-LighthouseSeoAuditor-419 | FAIL | Lighthouse audit canonical scores below 0.9: Document does not have a valid rel=canonical. Message: Document does not have a valid rel=canonical: {display value or item count} (Lighthouse SEO audit canonical, desktop). | Canonical links suggest which URL to show in search results. Learn more about canonical links (https://developer.chrome.com/docs/lighthouse/seo/canonical/). Found: {up to three offending items}. | Canonical links suggest which URL to show in search results. |
37A-LighthouseSeoAuditor-490 | FAIL | A scored audit this catalog does not list (added by a newer Lighthouse) scores below 0.9. Message: {Lighthouse title}: {display value or item count} (Lighthouse SEO audit {id}, desktop). | Lighthouse's description of the audit, then the first offending items. | Lighthouse's description of the audit without its learn-more link. |
37A-LighthouseSeoAuditor-300 | WARNING | The SEO score is below warningBelowScore and not below failBelowScore. Message: Lighthouse SEO score is 75/100 (desktop); the warning threshold is 90. | Raise the SEO score ({score}) by fixing its lowest-scoring audits first: {audit title} ({display value}); ⦠| Pages search engines cannot crawl, index or understand get less organic traffic, so fewer people find the site without paid campaigns. |
37A-LighthouseSeoAuditor-401 | FAIL | failBelowScore is equal to or above warningBelowScore; Lighthouse does not run. Message: failBelowScore (90) must be lower than warningBelowScore (50). | Set failBelowScore below warningBelowScore on the auditor's Configuration tab; the defaults are 50 and 90. | With the thresholds inverted no score can be a warning, so the audit would hide regressions until they are already failures. |
37A-LighthouseSeoAuditor-500 | ERROR | Lighthouse could not load the page: the run exceeded its time budget, or Lighthouse reported a runtime error (NO_FCP, PAGE_HUNG, DNS_FAILURE, ERRORED_DOCUMENT_REQUEST, ā¦). Message: Lighthouse could not audit {url}: NO_FCP: The page did not paint any content. | Make {url} load in a browser within the audit's time limit and re-run the audit. Last error was "{error}". | ā |
37A-LighthouseSeoAuditor-200 | SUCCESS | The SEO score is at or above warningBelowScore. Message: Lighthouse SEO score is 95/100 (desktop). At or above the warning threshold of 90. | ā | ā |
37A-LighthouseSeoAuditor-590 | ERROR | The audited page answered HTTP 403, HTTP 429 or a Cloudflare challenge, so 37AuditsBot was blocked before it could read the page. | Allow 37AuditsBot in your firewall or bot protection: allowlist its user agent, or verify its Web Bot Auth signature. See https://www.37audits.com/bot. | While 37AuditsBot is blocked this audit cannot look at the site, so problems on it go unreported. |
The score check carries in data: category, score, formFactor, both thresholds, failingAudits (up to ten audits of the category below Lighthouse's pass mark, lowest score first, each with id, title, score, displayValue), lighthouseVersion, chromeVersion, benchmarkIndex, elapsedSeconds and runWarnings. Each audit check (1NN, 4NN) adds auditId, auditTitle, auditScore (0ā100 or null), scoreDisplayMode, displayValue, weight, group, numericValue, numericUnit, learnMore (Lighthouse's documentation link), inCatalog, itemCount and items (up to ten rows of Lighthouse's details table: DOM nodes reduced to selector, snippet, label and explanation; source locations to url:line:column).
| Status | Description | Test logic |
|---|---|---|
| INFORMATION | Report pin, manual checks and unscored audits | Always one 100 check with the Lighthouse and Chrome versions, device profile, duration and benchmark index; plus one 1NN check per audit Lighthouse leaves to a manual check or reports without a score. |
| SUCCESS | The SEO score is at or above the warning threshold | The score is >= warningBelowScore; the message states the score and counts the failing audits. Every result, whatever its status, also carries one 4NN check per scored audit below 0.9; it never changes the status. |
| WARNING | The SEO score is below the warning threshold and not below the fail threshold | One 300 check; the summary states the score. |
| FAIL | The SEO score is below the fail threshold, or the thresholds are inverted | One 400 check, or a single 401 check when failBelowScore >= warningBelowScore. |
| ERROR | Lighthouse could not audit the page or score the category | 500 when the page did not load inside the budget or Lighthouse reported a runtime error; 501 when the category has no score; 590 when the page blocked 37AuditsBot. |
Lighthouse automates the SEO checks a machine can run on one page load (crawlability (robots.txt, meta robots, HTTP status), the title and meta description, canonical and hreflang links, descriptive link text, legible font sizes, tap target sizes and structured data validity). A perfect score means no automated check failed, not that the page is flawless; manual review still finds problems automation cannot.
The two device profiles render the page at different sizes, so the audits that depend on layout can give different results. Pick the profile that matches the audience and keep it, because the scores of the two profiles are not strictly comparable.
The Lighthouse navigation carries the 37AuditsBot user agent but no Web Bot Auth signature. A site that only admits signed bots answers with a challenge, which this audit reports as blocked (590).
Lighthouse weighs its audits into the score, so a page can score 90 with one audit failing. The result follows the score, as Lighthouse's gauge does: that page is a SUCCESS. The failing audit is still listed as a FAIL check, because the item is what the owner has to fix, but it never changes the status of the result. The check order follows Lighthouse's report: heavier audits first, then the lowest scores.
Each audit keeps its number across Lighthouse upgrades, so a deep link to a code stays valid. An audit a newer Lighthouse adds is reported with 490 (failing) or 190 (informative or manual) and inCatalog: false in its data until the catalog in this auditor is extended; an audit Lighthouse removes keeps its number unused.
This documentation is built and hosted on Mintlify, a developer documentation platform.
Add this auditor to your monitoring setup and start identifying issues on your websites today.