Audit issue types
Every check a site audit runs, what each means, and how to fix it.
A site audit checks every crawled page against the 27 issue types below, grouped by severity. The issueType argument of get_audit_issues accepts the id in the second line of each row. The explanations and fixes are the same text the dashboard shows.
Critical
| Issue type | Severity | What it means | How to fix it |
|---|---|---|---|
Crawler was blockedblocked-page | critical | The site returned a bot challenge or access denial (e.g. a Cloudflare challenge, 403, or 429) instead of the page. We report this honestly rather than pretending the page is broken — but it means this page could not be audited, and other crawlers like search engines may face similar friction. | If you own this site, allowlist the "IndexZero-Audit" user agent in your WAF/bot-protection settings (on Cloudflare: a WAF custom rule that skips bot protection when the user agent contains "IndexZero-Audit"; on some free tiers you may need to relax bot protection). Then re-run the audit. |
Server error (5xx)server-error | critical | The page returned a 5xx server error. Search engines that repeatedly see server errors will crawl the site less and may drop the page from the index. | Check the server logs for this URL and fix the underlying error. If the page is gone, return a 404/410 or redirect it to a relevant page instead of erroring. |
Broken internal linkbroken-internal-link | critical | This page links to an internal URL that returns an error status (4xx/5xx). Broken links waste crawl budget, leak link equity, and frustrate users — they are among the most common and most damaging technical SEO issues. | Update the link to point at the correct live URL, or remove it. If the target was moved, prefer linking directly to the new URL rather than relying on a redirect. |
Missing title tagmissing-title | critical | The page has no <title>. The title is the strongest on-page relevance signal and the headline shown in search results; without it search engines generate one themselves, usually badly. | Add a unique, descriptive <title> of roughly 50–60 characters that includes the page's primary topic. |
Warnings
| Issue type | Severity | What it means | How to fix it |
|---|---|---|---|
Page returns an error (4xx)broken-page | warning | This crawled URL returned a client error (e.g. 404). If it is referenced from your sitemap or other pages, crawlers keep wasting requests on it. | If the page should exist, restore it. If it is intentionally gone, remove it from the sitemap and internal links, and consider a 301 redirect to the closest live page. |
Duplicate titleduplicate-title | warning | Multiple pages share the same title tag. Search engines use titles to differentiate pages; duplicates make pages compete with each other and depress click-through rates. | Write a unique title for each page describing its specific content. For templated pages, include the distinguishing attribute (name, category, location) in the template. |
Duplicate meta descriptionduplicate-meta-description | warning | Multiple pages share the same meta description, so search results show identical snippets and users cannot tell the pages apart. | Write a unique meta description per page, or remove the duplicated one entirely — search engines will generate a snippet from page content, which beats a wrong duplicate. |
Duplicate page contentduplicate-content | warning | Two or more URLs serve byte-identical visible text. Search engines pick one version to index and ignore the rest, and ranking signals get split across the duplicates. | Consolidate duplicates: pick the canonical URL, add rel=canonical from the others, and 301-redirect duplicate URLs where possible (common causes: trailing-slash variants, URL parameters, http/https or www variants). |
Missing meta descriptionmissing-meta-description | warning | The page has no meta description. Search engines will assemble a snippet from page text, which is often less compelling and hurts click-through rate. | Add a meta description of roughly 70–160 characters that summarizes the page and gives a reason to click. |
Missing H1 headingmissing-h1 | warning | The page has no H1. The H1 tells users and search engines what the page is about; pages without one tend to have weaker topical clarity. | Add a single H1 that states the page's main topic, consistent with the title tag. |
Multiple H1 headingsmultiple-h1 | warning | The page has more than one H1, which dilutes the main-topic signal and usually indicates a templating mistake (e.g. a logo and a headline both marked up as H1). | Keep one H1 for the page's main heading and demote the others to H2/H3 (or unstyled elements for non-headings like logos). |
Redirect chainredirect-chain | warning | Reaching the final page requires two or more consecutive redirects. Each hop adds latency, leaks link equity, and burns crawl budget; long chains may not be followed at all. | Point the first URL (and any internal links) directly at the final destination so there is at most one redirect. |
Redirect loopredirect-loop | warning | This redirect eventually points back to itself, so the URL never resolves. Browsers and crawlers give up with an error. | Trace the redirect rules for this URL and break the cycle so the chain terminates at a real 200 page. |
Conflicting canonical signalscanonical-conflict | warning | The page declares different canonical URLs in its HTML <link rel=canonical> and its HTTP Link header. When signals conflict, search engines ignore both and choose their own canonical. | Pick one canonical URL and declare it in exactly one place (HTML head is the most common); remove or align the other declaration. |
Thin contentthin-content | warning | The page has very little visible text. Thin pages rarely rank, can drag down sitewide quality assessments, and (if the site renders client-side) may indicate content invisible to plain-HTML crawlers. | Either expand the page with genuinely useful content, noindex it, or consolidate it into a stronger page. If the content exists but is rendered by JavaScript, ensure it is server-rendered or pre-rendered. |
Images missing alt textimages-missing-alt | warning | One or more images on the page lack alt attributes. Alt text is an accessibility requirement and the main way search engines understand images. | Add descriptive alt text to meaningful images; use an empty alt (alt="") only for purely decorative ones. |
Orphan pageorphan-page | warning | No crawled page links to this URL — it was only discoverable via the sitemap. Pages without internal links receive little crawl attention and no internal link equity, and users can't find them by browsing. | Link to this page from relevant pages (navigation, related content, hub pages), or remove it from the sitemap if it shouldn't be indexed. |
Page has no outgoing linksno-outgoing-links | warning | The page contains no links at all — a dead end. Link equity that flows into it stops there, crawlers have nowhere to go next, and users have to reach for the back button. | Add links to related pages, the parent category, or the homepage. If the page's navigation is rendered by JavaScript, make sure it also exists in the server-rendered HTML. |
Informational
| Issue type | Severity | What it means | How to fix it |
|---|---|---|---|
Title too longtitle-too-long | info | The title exceeds ~60 characters, so search results will truncate it and the ending may be cut off mid-phrase. | Shorten the title to roughly 50–60 characters, front-loading the most important words. |
Title too shorttitle-too-short | info | The title is under ~10 characters, which is usually too generic to describe the page or attract clicks. | Expand the title into a descriptive phrase (roughly 30–60 characters) that states what the page offers. |
Meta description too longmeta-description-too-long | info | The meta description exceeds ~160 characters, so search engines will truncate the snippet. | Trim the description to roughly 70–160 characters while keeping the core message and call to action. |
Meta description too shortmeta-description-too-short | info | The meta description is under ~70 characters. Short descriptions waste the snippet space search results give you, and search engines often ignore them in favor of text pulled from the page. | Expand the description to roughly 70–160 characters that summarize the page and give a reason to click. |
Heading levels skipheading-order-skip | info | The heading hierarchy skips levels (e.g. an H4 directly after an H2). This weakens document structure for accessibility tools and content parsing. | Adjust heading levels so they descend one step at a time (H1 → H2 → H3) without skipping. |
Slow server responseslow-response | info | The HTML response took over 1.5 seconds. Slow time-to-first-byte drags down every downstream performance metric and reduces crawl rate on large sites. | Investigate server/database time and caching for this route; serving cached or statically generated HTML usually fixes it. |
Page is noindexnoindex-page | info | The page asks search engines not to index it (via robots meta tag or X-Robots-Tag header). That's often intentional — this is a heads-up, not an error. | If this page should rank, remove the noindex directive. If it's intentional (admin, thank-you, filter pages), no action is needed. |
Canonicalized to another URLcanonicalized-page | info | The page declares a different URL as its canonical, telling search engines to index that URL instead. Fine when intentional (parameter pages, syndication) — a problem if this page was meant to rank. | If this page should rank on its own, set its canonical to itself. Otherwise no action is needed. |
Page is deep in the site structuredeep-page | info | The page is 5+ clicks from the homepage. Deep pages get crawled less often and receive less link equity. | Add links from higher-level pages (hubs, category pages, navigation) to flatten the path to this page. |
Thresholds used
- Slow response means the HTML took more than 1.5 seconds.
- Deep page means five or more clicks from the homepage.
- Title length flags under about 10 characters or over about 60.
- Meta description length flags under about 70 characters or over about 160.
- Blocked page covers a bot challenge, a 401, 403, or 429, or a 503 whose body is a challenge page. The crawler identifies as
IndexZero-Audit/1.0; allowlisting that user agent is the fix.