Skip to content

DocsReference

Site audit checks

Every issue the crawler reports, its severity, what it means and how to fix it, and how the health score is worked out.

The site audit reports 117 kinds of issue. This list is generated from the crawler's own catalog, so it always matches what an audit can report. The code in each row is the issue type used by the REST API and the MCP tools.

How the health score is worked out

  1. It counts every URL the crawler tried, except those blocked by robots.txt, since the crawler never fetched them.
  2. The score is the share of those URLs without an error (a critical issue), rounded. Warnings and notices do not lower it. One broken link in the footer puts an error on every page, so it can take the score to 0.
  3. If no page answered with a success status, the score is 0.

Links and Content issues are reported twice, once for indexable pages and once for pages that are not (noindex, canonicalised to another URL or not returning 200). On a non-indexable page they count one severity lower: a broken link on a noindex page is a warning, not an error.

Issues that apply to the whole site, such as a missing sitemap or missing security headers, are reported once, on the start page or the first page of each origin. Checks that compare pages with each other (duplicates, broken internal links, orphan pages) are only as complete as the crawl; orphan pages are reported only when the crawl finished without hitting its page limit.

Critical (18)

Problems that stop pages being crawled, indexed or shown.

Critical: audit checks
IssueWhat it meansHow to fix it
Page blocked the crawlerblocked-pageThe server answered 401/403 or a bot challenge, so the page content could not be audited.Allow the crawler user agent or IP in your firewall/WAF, or confirm the page is meant to be private.
Server error (5xx)server-errorThe page returned a 5xx status. Search engines drop URLs that keep failing.Check server logs for the failing request and fix the application or infrastructure error.
404 pagepage-404The URL returned 404 Not Found. It is counted under 4XX page too; this list is only the pages that are missing.Restore the page, 301-redirect it to the closest equivalent, or update the links that point to it.
4XX pagebroken-pageThe URL returned a 4xx status such as 404 or 410, so search engines drop it and links to it are wasted.Restore the page, redirect it to the closest equivalent, or remove references to it.
robots.txt returns a server errorrobots-txt-unavailablerobots.txt answered 5xx or 429. Google then treats the whole site as disallowed, so the crawler did too.Make /robots.txt return 200 (or 404 if you have none) reliably.
HTTP version does not redirect to HTTPShttp-not-redirected-to-httpsThe http:// version of the site answers without redirecting to https://, so two copies of the site can be indexed.Add a permanent (301) redirect from every http:// URL to its https:// version.
Broken redirectbroken-redirectThe redirect ends at a URL that returns a 4xx or 5xx status or no response.Point the redirect at a live page, or restore the destination.
HTTPS to HTTP redirecthttps-to-http-redirectAn https:// URL redirects to an http:// one, downgrading visitors to an insecure connection.Redirect to the https:// version of the destination.
Canonical URL has no incoming internal linkscanonical-no-incoming-linksOther pages name this URL as their canonical, but no crawled page links to it, so search engines get mixed signals about which URL matters.Link to the canonical URL instead of the canonicalised variants.
Missing titlemissing-titleThe page has no <title> or it is empty.Add a unique, descriptive title element.
Duplicate pages without canonicalduplicate-without-canonicalThe page has the same visible text as other pages and no canonical tag, so search engines have to guess which version to index.Add a canonical tag on every copy pointing at the preferred version, or redirect the copies to it.
Page has links to broken pagebroken-internal-linkThe page links to internal URLs that return a 4xx or 5xx status.Update or remove the links, or restore or redirect the targets.
Orphan page (has no incoming internal links)orphan-pageThe indexable page is in the sitemap but no crawled page links to it.Link to the page from relevant pages, or remove it from the sitemap if it is obsolete.
3XX redirect in sitemapredirect-in-sitemapThe sitemap lists a URL that redirects.Replace it in the sitemap with the redirect destination.
4XX or 5XX page in sitemapbroken-in-sitemapThe sitemap lists a URL that returns an error.Remove the URL from the sitemap or restore the page.
Noindex page in sitemapnoindex-in-sitemapThe sitemap lists a URL that tells search engines not to index it: two signals that contradict each other.Remove the URL from the sitemap, or remove the noindex if the page should rank.
3XX page receives organic trafficredirect-receives-trafficSearch Console shows Google still sending clicks to this URL, but it redirects. Google has not moved its ranking to the target yet, or links and sitemaps keep pointing here.Keep the redirect permanent (301), point internal links, canonicals and sitemaps at the target, and check the target matches what searchers wanted.
4XX page receives organic trafficbroken-page-receives-trafficSearch Console shows Google sending clicks to this URL, but it returns a 4xx error, so those visitors land on an error page.Restore the page, or 301-redirect it to the closest page that answers the same need.

Warnings (58)

Problems that hold pages back.

Warnings: audit checks
IssueWhat it meansHow to fix it
Page was rate-limitedrate-limited-pageThe server kept answering 429 Too Many Requests, so the page was not audited.Re-run with a larger delay or lower concurrency, or raise the rate limit for the crawler.
Crawl stopped by rate limitingcrawl-rate-limitedToo many consecutive 429 responses; the crawl gave up early and results are partial.Re-run with a larger delay, or allowlist the crawler on the server.
Page could not be fetchedfetch-failedThe request failed before a response arrived (timeout, DNS, connection, TLS, or a refused target).Check that the URL resolves and responds within the timeout; fix DNS, TLS or server availability.
Slow pageslow-pageTime to first byte plus downloading the HTML took longer than the slow-page threshold.Cache the HTML at the edge, cut server work per request and reduce the size of the document.
Slow server response for AI crawlersslow-response-ai-crawlersThe indexable page took so long to start answering that AI crawlers, which use short timeouts, may give up on it.Serve this page from a cache or CDN so the first byte arrives within about a second.
AI search crawlers blocked by robots.txtai-search-bots-blockedrobots.txt stops crawlers that fetch pages for AI search answers (such as OAI-SearchBot, ChatGPT-User, PerplexityBot or Claude-SearchBot), so those assistants cannot cite the site.Allow the AI search and user agents in robots.txt. Blocking training crawlers (GPTBot, ClaudeBot, Google-Extended) is separate and does not affect citations.
Redirect chainredirect-chainThe URL goes through two or more redirects before reaching its destination.Point the first URL straight at the final destination.
Redirect loopredirect-loopFollowing the redirects returns to a URL already visited, so the page never loads.Fix the redirect rules so the chain ends at a page returning 200.
Page has links to redirectinternal-link-to-redirectThe page links to internal URLs that redirect elsewhere, which costs crawl budget and a little link equity.Update the links to the final destination URLs.
3XX redirectredirect-3xxThe internal URL redirects. Fine on its own, but every link and sitemap entry pointing at it should point at the destination instead.Update links to this URL so they point straight at the redirect target.
302/307 temporary redirecttemporary-redirectThe URL redirects with a temporary status, so search engines may keep the old URL indexed instead of the destination.Use a 301 or 308 if the move is permanent.
Meta refresh redirectmeta-refresh-redirectThe page redirects with a <meta http-equiv="refresh"> tag, which search engines treat less reliably than an HTTP redirect.Replace the meta refresh with a server-side 301 redirect.
Redirect to a non-indexable pageredirect-to-non-indexableThe redirect ends at a page that is noindex or canonicalised to another URL, so the authority it passes on is not used.Point the redirect at the indexable, canonical version of the page.
Redirect to the home pageredirect-to-homepageAn inner URL redirects to the home page. Google usually treats this as a soft 404, so the old page’s links and rankings are lost.Redirect it to the closest matching page, or let it return 404 or 410 if nothing replaces it.
Redirected page has no incoming internal linksredirect-no-incoming-linksThe redirecting URL was found through the sitemap or a canonical, not through links. It is likely an old URL left in a sitemap.Remove the URL from the sitemap and list the destination instead.
Noindex pagenoindex-pageA robots meta tag or X-Robots-Tag header tells search engines not to index the page.Remove the noindex directive if the page should appear in search results.
Nofollow pagenofollow-pageThe robots meta tag or header says nofollow, so search engines ignore every link on the page.Remove nofollow from the robots directive unless the links really should be ignored.
Conflicting canonical signalscanonical-conflictThe HTML canonical and the Link header canonical name different URLs.Send a single canonical URL, or make both sources agree.
Multiple canonical tagsmultiple-canonicalThe page has more than one rel="canonical" link element; search engines may ignore all of them.Keep exactly one canonical link element in the head.
Canonical points to a broken URLcanonical-to-brokenThe canonical target returns a 4xx or 5xx status.Point the canonical at a URL that returns 200.
Canonical points to a redirectcanonical-to-redirectThe canonical target redirects instead of returning the page directly.Point the canonical at the final destination URL.
Canonical points to a non-indexable pagecanonical-to-non-indexableThe canonical target is noindex, blocked by robots.txt, or canonicalised to yet another URL.Point the canonical at an indexable, self-canonical page.
Canonical points from HTTPS to HTTPcanonical-to-httpAn https:// page names an http:// URL as its canonical.Point the canonical at the https:// version.
Multiple title tagsmultiple-titlesThe page has more than one <title> element; search engines pick one, not necessarily yours.Keep exactly one title element in the head.
Title too longtitle-too-longThe title is longer than the recommended maximum and will be truncated in results.Shorten the title to about 60 characters with the key phrase first.
Missing meta descriptionmissing-meta-descriptionThe page has no meta description, so search engines pick their own snippet.Add a meta description summarising the page in 70-160 characters.
Multiple meta descriptionsmultiple-meta-descriptionsThe page has more than one meta description tag.Keep exactly one meta description.
Meta description too longmeta-description-too-longThe meta description exceeds the recommended maximum and will be truncated.Trim the description to about 160 characters.
Meta description too shortmeta-description-too-shortThe meta description is too short to be a useful snippet.Expand the description to at least 70 characters.
Missing viewport meta tagmissing-viewportWithout a viewport meta tag the page is not rendered as mobile-friendly.Add <meta name="viewport" content="width=device-width, initial-scale=1">.
Open Graph tags incompletemissing-open-graphOne of the four required Open Graph tags (og:title, og:type, og:image, og:url) is missing, so shared links get a poor preview.Add og:title, og:type, og:image and og:url meta tags.
Open Graph URL not matching canonicalopen-graph-url-mismatchog:url names a different URL from the canonical (or the page itself), so shares are counted against the wrong URL.Set og:url to the canonical URL.
Thin contentthin-contentThe indexable page has very little visible text.Add useful content, merge the page into a stronger one, or set it to noindex.
Missing alt textimages-missing-altOne or more images have no alt attribute.Add descriptive alt text; use alt="" for decorative images.
Page has broken imagesbroken-imageThe page shows internal images that return a 4xx or 5xx status.Fix the image URLs or restore the missing files.
Page has broken CSSbroken-cssA stylesheet the page loads returns a 4xx or 5xx status, so the page may render without its styles.Fix the stylesheet URL or restore the file.
Page has broken JavaScriptbroken-jsA script the page loads returns a 4xx or 5xx status, so features that depend on it break.Fix the script URL or restore the file.
No outgoing linksno-outgoing-linksThe indexable page has no links, making it a dead end for users and crawlers.Add navigation or contextual links to related pages.
Content needs JavaScript renderingjavascript-rendering-suspectedThe HTML is an empty app shell, so content checks were skipped for this page.Server-render or pre-render the page, or run the audit with JavaScript rendering enabled.
Mixed contentmixed-contentThe HTTPS page loads resources over plain HTTP.Load every resource over HTTPS.
Duplicate titleduplicate-titleSeveral indexable pages share the same title.Give each page a unique title, or canonicalise true duplicates.
Duplicate meta descriptionduplicate-meta-descriptionSeveral indexable pages share the same meta description.Write a unique description for each page.
Duplicate contentduplicate-contentSeveral indexable pages have identical visible text.Consolidate the pages with a redirect or canonical, or differentiate their content.
Page has broken external linksbroken-external-linkThe page links to external URLs that return a 4xx status or do not resolve.Update or remove the links.
Non-canonical page in sitemapnon-indexable-in-sitemapThe sitemap lists a URL that is canonicalised to another URL or blocked by robots.txt.List only indexable, canonical 200 URLs in the sitemap.
Sitemap cannot be readsitemap-unreachableA sitemap named in robots.txt returns an error or is not valid XML.Fix the sitemap URL in robots.txt or make the sitemap return valid XML with status 200.
Sitemap too largesitemap-too-largeA sitemap exceeds 50 MB (uncompressed), the most search engines will read, so it was skipped.Split it into several sitemaps of at most 50,000 URLs and 50 MB each, listed in a sitemap index.
Invalid hreflang valuehreflang-invalid-codeAn hreflang value is not a valid language or language-region code.Use ISO 639-1 language codes with optional ISO 3166-1 region, or x-default.
Hreflang without return linkhreflang-missing-return-linkThe page references an alternate that does not reference it back, so the annotation is ignored.Add a reciprocal hreflang annotation on the alternate page.
Hreflang points to a non-200 URLhreflang-broken-targetAn hreflang alternate redirects or returns an error.Point hreflang annotations at final URLs that return 200.
Hreflang points to a non-canonical pagehreflang-to-non-canonicalAn hreflang alternate is canonicalised to another URL, so the annotation is ignored.Point hreflang annotations at the canonical version of each alternate.
Hreflang points to a noindex pagehreflang-to-noindexAn hreflang alternate is noindex, so it cannot be shown to searchers in that language.Remove the noindex from the alternate or drop it from the hreflang set.
Invalid JSON-LDstructured-data-parse-errorA JSON-LD block is not valid JSON and is ignored by search engines.Fix the JSON syntax; validate with a JSON linter or the Rich Results Test.
Structured data has schema.org validation errorstructured-data-invalidA JSON-LD item lacks @context or a property its type requires.Add the missing properties listed in the issue detail.
Site served over HTTPinsecure-httpPages on this origin are served without HTTPS. Reported once per origin.Serve the site over HTTPS and redirect HTTP to it.
Indexable page became non-indexablebecame-non-indexableThe page was indexable in the previous audit and is not now (noindex, canonicalised, redirected or an error).Confirm the change was intended; otherwise undo it so the page can keep its rankings.
Noindex page receives organic trafficnoindex-page-receives-trafficSearch Console shows clicks to this page, but it is noindex, so it will drop out of Google and lose that traffic.Remove the noindex if the page should rank; otherwise expect the traffic to stop.
Non-canonical page receives organic trafficnon-canonical-receives-trafficSearch Console shows clicks to this URL, but its canonical points to another URL. Google is ranking the page you asked it not to.Check the canonical is right. If it is, make the canonical URL the stronger page: link to it internally and list only it in the sitemap.

Notices (41)

Smaller improvements and things worth knowing.

Notices: audit checks
IssueWhat it meansHow to fix it
Blocked by robots.txtblocked-by-robotsrobots.txt disallows this URL for the crawler, so it was not fetched.Remove the Disallow rule if the page should be crawled and indexed.
Slow server responseslow-responseTime to first byte exceeded the slow-response threshold.Add caching, reduce server work per request, or move closer to users with a CDN.
No robots.txtrobots-txt-missingThe site has no robots.txt, so crawlers get no sitemap location or crawl rules from it.Publish /robots.txt with at least a Sitemap: line.
No llms.txtllms-txt-missingThe site has no /llms.txt, the emerging file that points AI assistants to the pages that matter.Publish /llms.txt listing your key pages with one-line summaries.
AI training crawlers blocked by robots.txtai-training-bots-blockedrobots.txt stops crawlers that collect training data (such as GPTBot, ClaudeBot, Google-Extended or CCBot). That is a choice, not an error, but it is worth knowing.Nothing to do if the block is deliberate; remove the Disallow rules if it is not.
URL too longurl-too-longThe URL is longer than the recommended length, which makes it hard to read and share.Use shorter, descriptive slugs and drop needless folders and parameters.
URL contains uppercase lettersurl-uppercaseURLs are case-sensitive, so uppercase paths invite duplicate URLs and broken links.Use lowercase URLs and redirect uppercase variants to them.
Large HTML documentlarge-htmlThe HTML is unusually large or was cut at the body size limit.Reduce inline scripts, styles and data; paginate or lazy-load long content.
HTTP to HTTPS redirecthttp-to-https-redirectAn internal http:// URL redirects to https://. The redirect is right, but links to the http:// URL should be updated.Change internal links and sitemap entries to the https:// URL.
Redirect to another siteredirect-to-externalA URL on this site redirects to another host. Fine for deliberate outbound links; a mistake when content was meant to stay on the site.Check the target is intended. Link to the other site directly instead of through a redirect.
Noindex follow pagenoindex-follow-pageThe page is noindex but its links are followed. Google eventually stops following links on long-term noindex pages.Make sure the pages it links to are reachable through indexable pages too.
Canonical points to another URLcanonicalized-pageThe canonical URL differs from the page URL, so this page is not the indexed version.Confirm the canonical target is the intended version; otherwise make the canonical self-referencing.
Title too shorttitle-too-shortThe title is too short to describe the page.Expand the title to describe the page topic.
Missing lang attributemissing-langThe <html> element has no lang attribute.Set lang on the html element, for example <html lang="en">.
Twitter card missingtwitter-card-missingThe page has no twitter:card tag, so X shows a plain link when it is shared.Add <meta name="twitter:card" content="summary_large_image">.
H1 tag missing or emptymissing-h1The page has no H1 heading with text.Add one H1 that states the page topic.
Multiple H1smultiple-h1The page has more than one H1 heading.Keep a single H1 and demote the others to H2 or lower.
Heading levels skippedheading-order-skipA heading jumps more than one level down (for example H2 to H4).Use heading levels in order without skipping.
Image file size too largeimage-too-largeThe page uses internal images larger than the size threshold, which slows it down.Compress the images, serve WebP or AVIF, and size them to how they are displayed.
Page has only one dofollow incoming internal linksingle-dofollow-inlinkOnly one crawled page links to this indexable page with a followed link, so it gets little internal link equity.Link to it from more relevant pages.
Page has nofollow outgoing internal linksnofollow-internal-linksThe page marks links to your own pages as nofollow, which wastes the link equity they would pass.Remove rel="nofollow" from internal links.
Page has links with no anchor textlinks-without-anchorSome internal links have no text and no image alt, so neither people nor search engines know where they lead.Give every link descriptive text, or an aria-label and an image alt.
Page is deep in the sitedeep-pageThe page is many clicks away from the start URL.Link to it from higher-level pages to reduce click depth.
Page in multiple sitemapspage-in-multiple-sitemapsThe URL is listed in more than one sitemap.List each URL in one sitemap only.
Indexable page not in sitemappage-not-in-sitemapThe page is indexable but not listed in any discovered sitemap.Add the URL to the XML sitemap.
No XML sitemap foundsitemap-missingNo sitemap was found in robots.txt or at /sitemap.xml.Publish an XML sitemap and reference it from robots.txt.
Hreflang without self-referencehreflang-missing-self-referenceThe page lists alternates but not itself.Add an hreflang annotation for the page itself.
Hreflang without x-defaulthreflang-missing-x-defaultThe page has hreflang alternates but no x-default for searchers whose language is not listed.Add an x-default alternate, usually the language picker or the main version.
HTML lang does not match hreflanghreflang-lang-mismatchThe page language in <html lang> differs from the language its own hreflang annotation declares.Make the html lang attribute and the self-referencing hreflang agree.
Structured data without @typestructured-data-missing-typeA JSON-LD item has no @type, so it cannot be interpreted.Add an @type from schema.org to each item.
Missing Strict-Transport-Security headermissing-hstsThe HTTPS origin does not send HSTS. Reported once per origin.Send Strict-Transport-Security: max-age=31536000; includeSubDomains.
Missing Content-Security-Policy headermissing-content-security-policyNo CSP header is sent. Reported once per origin.Add a Content-Security-Policy header, starting in report-only mode.
Missing X-Content-Type-Options headermissing-x-content-type-optionsThe nosniff header is not sent. Reported once per origin.Send X-Content-Type-Options: nosniff.
No clickjacking protectionmissing-x-frame-optionsNeither X-Frame-Options nor a CSP frame-ancestors directive is sent. Reported once per origin.Send X-Frame-Options: SAMEORIGIN or Content-Security-Policy: frame-ancestors 'self'.
Missing Referrer-Policy headermissing-referrer-policyNo Referrer-Policy header is sent. Reported once per origin.Send Referrer-Policy: strict-origin-when-cross-origin.
HTTP status code changedstatus-code-changedThe URL returns a different status code from the previous audit.Confirm the change was intended, especially a 200 that became a 3xx, 4xx or 5xx.
Title tag changedtitle-changedThe title of this indexable page differs from the previous audit.Nothing to fix if the change was intended. Watch the page’s rankings and click-through rate.
Meta description changedmeta-description-changedThe meta description of this indexable page differs from the previous audit.Nothing to fix if the change was intended. Watch the page’s click-through rate.
H1 tag changedh1-changedThe H1 of this indexable page differs from the previous audit.Nothing to fix if the change was intended. Watch the page’s rankings.
Word count changedword-count-changedThe amount of visible text on this indexable page changed by at least 10% since the previous audit.Nothing to fix if the change was intended. A large drop can mean content failed to load.
Organic traffic droppedorganic-traffic-droppedClicks from Google to this page in the last 28 days fell by half or more against the 28 days before (pages with at least 10 clicks before).Compare its rankings and the search results for its main queries; check for content, title or indexability changes in this audit.