Audit rules reference
All 70 checks Crawlens runs after every crawl, what each one means and how to fix it. This is the same text you see next to each issue in the app (v0.20.1).
Severity and health score
- Critical: stops pages from being reached or indexed. Fix first.
- Warning: hurts crawling, indexing or the search result. Fix soon.
- Notice: worth checking; often fine on purpose.
The health score (0–100) is based on the share of crawled URLs with problems. Each URL counts once, by its most severe issue:
100 × (1 − (URLs with a critical issue + 0.5 × URLs with a warning) ÷ all crawled URLs)
Notices don't lower the score. 90 or more shows as Good, 70–89 as Needs work, below 70 as Poor.
Some checks need data a basic crawl doesn't collect, such as rendering, Search Console or server logs. If it's missing, the check shows as Not enough data in the app instead of passing, with the reason. The requirement is listed under each rule below.
No rules match.
Response codes
Internal pages return 4xx
- Why it matters
- Pages that return 404 or another client error cannot rank, waste crawl budget and frustrate visitors who follow links to them.
- How to fix
- Restore the page, 301-redirect it to the closest relevant page, or remove the links pointing to it.
Rule id client-error
Internal pages return 5xx
- Why it matters
- Server errors tell search engines the site is unreliable. Persistent 5xx responses can drop pages from the index.
- How to fix
- Check server logs for the failing URLs and fix the application or hosting error.
Rule id server-error
Pages did not respond
- Why it matters
- The request timed out or failed (DNS, connection, SSL). Search engines see the same failure.
- How to fix
- Check the error for each URL: server capacity, firewall or bot protection, DNS and SSL configuration.
Rule id no-response
Redirect loops
- Why it matters
- A redirect that eventually points back to itself never resolves: browsers show an error and crawlers give up.
- How to fix
- Break the loop so the chain ends at a page that returns 200.
Rule id redirect-loop
Redirect chains (2+ hops)
- Why it matters
- Each extra hop slows users down, and search engines may stop following long chains.
- How to fix
- Point the first URL straight at the final destination with a single 301.
Rule id redirect-chain
Temporary redirects (302/303/307)
- Why it matters
- Temporary redirects signal the move is not permanent, so search engines may keep the old URL indexed.
- How to fix
- Use a 301 or 308 if the move is permanent.
Rule id temporary-redirect
Indexability
Canonical points to a non-200 URL
- Why it matters
- A canonical pointing to a redirect, error or unreachable URL is usually ignored, leaving search engines to guess.
- How to fix
- Point the canonical at the final, 200-status version of the page.
Rule id canonical-to-error
Canonical points to a noindex page
- Why it matters
- This sends conflicting signals: "index that URL instead" and "don't index that URL". The page may drop out entirely.
- How to fix
- Canonicalise to an indexable page, or remove the noindex from the target.
Rule id canonical-to-noindex
Multiple canonical tags
- Why it matters
- When a page declares more than one canonical, search engines may ignore all of them.
- How to fix
- Keep a single canonical, in the HTML head or the HTTP Link header, not both.
Rule id multiple-canonicals
Linked pages blocked by robots.txt
- Why it matters
- Blocked pages can still be indexed from links, but without their content, often showing a bare URL in results.
- How to fix
- Unblock the pages if they should rank, or stop linking to them and use noindex instead of robots.txt.
Rule id blocked-but-linked
Noindex pages
- Why it matters
- These pages ask not to be indexed. Make sure that is intentional.
- How to fix
- Remove the noindex (meta robots or X-Robots-Tag) from pages that should appear in search.
Rule id noindex
Canonicalised pages
- Why it matters
- These pages point their canonical to another URL, so they will not be indexed themselves.
- How to fix
- Confirm the canonical target is the version you want indexed.
Rule id canonicalised
Missing canonical tag
- Why it matters
- Without a canonical, search engines choose one themselves among duplicate or parameterised URLs.
- How to fix
- Add a self-referencing canonical to indexable pages.
Rule id missing-canonical
On-page content
Missing page title
- Why it matters
- The title is the main headline in search results and a strong relevance signal.
- How to fix
- Add a unique, descriptive <title> to every indexable page.
Rule id missing-title
Duplicate page titles
- Why it matters
- Pages sharing a title compete with each other and look identical in search results.
- How to fix
- Write a unique title for each page that reflects its specific content.
Rule id duplicate-title
Missing meta description
- Why it matters
- Without a description, search engines pick a snippet themselves, which is often less compelling.
- How to fix
- Add a meta description summarising the page for searchers.
Rule id missing-meta-description
Duplicate meta descriptions
- Why it matters
- Identical descriptions make different pages look the same in results.
- How to fix
- Write a unique description for each page.
Rule id duplicate-meta-description
Missing H1
- Why it matters
- The H1 tells users and search engines what the page is about.
- How to fix
- Add one H1 that describes the main topic of the page.
Rule id missing-h1
Duplicate content
- Why it matters
- Indexable pages with identical text compete with each other, and search engines pick one to show.
- How to fix
- Consolidate duplicates with a 301 redirect or a canonical to the preferred URL, or make each page unique.
Rule id duplicate-content
Title longer than 60 characters
- Why it matters
- Long titles are usually truncated in search results.
- How to fix
- Keep titles under about 60 characters, with the key words first.
Rule id title-too-long
Title shorter than 30 characters
- Why it matters
- Very short titles miss the chance to describe the page and include relevant terms.
- How to fix
- Expand the title to describe the page, ideally 30–60 characters.
Rule id title-too-short
Meta description length outside 70–160 characters
- Why it matters
- Short descriptions under-use the snippet; long ones get truncated.
- How to fix
- Aim for 70–160 characters.
Rule id meta-description-length
Multiple H1 headings
- Why it matters
- Several H1s can blur what the page is mainly about.
- How to fix
- Use a single H1 and structure the rest with H2–H6.
Rule id multiple-h1
Thin content (under 200 words)
- Why it matters
- Pages with very little text often struggle to rank and may be seen as low quality.
- How to fix
- Add useful content, merge thin pages, or noindex them if they have no search value.
Rule id thin-content
Near-duplicate content
- Why it matters
- Pages whose text is almost the same add little value on their own and may be treated as duplicates.
- How to fix
- Differentiate the pages with unique content, or consolidate them.
Rule id near-duplicate-content
Links & structure
Pages link to broken internal URLs
- Why it matters
- Links to 4xx/5xx URLs lead users and crawlers to dead ends and waste link equity.
- How to fix
- Update each link to point to a working URL, or restore the target page.
Rule id broken-internal-link
Internal links point to redirects
- Why it matters
- Linking to a redirect adds a hop for every visitor and crawler, and dilutes link signals.
- How to fix
- Update the links to point directly to the final URL.
Rule id internal-link-to-redirect
Broken external links
- Why it matters
- Links to dead external pages hurt user experience and look unmaintained.
- How to fix
- Update or remove the links.
- Needs
- "Check external links" turned on
Rule id broken-external-link
Pages more than 4 clicks from the start
- Why it matters
- Deep pages get crawled less often and receive less internal link equity.
- How to fix
- Link to important deep pages from higher-level pages, categories or hubs.
- Needs
- A crawl that follows links (Website mode, or Sitemap mode with "Also follow links")
Rule id deep-page
Pages with no internal links
- Why it matters
- Dead-end pages stop users and crawlers from reaching the rest of the site.
- How to fix
- Add links to related pages, categories or navigation.
Rule id no-internal-outlinks
Internal links with nofollow
- Why it matters
- Nofollow on internal links withholds link signals from your own pages.
- How to fix
- Remove rel="nofollow" from internal links unless there is a specific reason.
Rule id internal-nofollow
Pages with only one internal link
- Why it matters
- Pages linked from a single place are easy to lose and receive little internal link equity.
- How to fix
- Link to these pages from more relevant pages.
- Needs
- A crawl that follows links (Website mode, or Sitemap mode with "Also follow links")
Rule id single-inlink
Images
Images missing alt text
- Why it matters
- Alt text makes images accessible to screen readers and helps them rank in image search.
- How to fix
- Add a short description in the alt attribute; use alt="" for purely decorative images.
Rule id image-missing-alt
Broken images
- Why it matters
- Images that fail to load hurt user experience and look neglected.
- How to fix
- Fix the image URL or restore the missing file.
- Needs
- "Check images" turned on
Rule id broken-image
Security
Pages served over HTTP
- Why it matters
- Browsers mark HTTP pages as "Not secure", and HTTPS is a ranking signal.
- How to fix
- Serve every page over HTTPS and 301-redirect the HTTP versions.
Rule id http-page
Mixed content (HTTP images on HTTPS pages)
- Why it matters
- Browsers block or warn about insecure resources on secure pages.
- How to fix
- Load every resource over HTTPS.
Rule id mixed-content
HTTP version does not redirect to HTTPS
- Why it matters
- If http:// still serves the site, it can be indexed as a duplicate and visitors browse insecurely.
- How to fix
- Add a site-wide 301 redirect from HTTP to HTTPS.
Rule id http-not-redirected
Performance
Poor LCP for real users
- Why it matters
- Largest Contentful Paint over 4 s means visitors wait a long time for the main content. LCP is a Core Web Vital that Google uses in ranking.
- How to fix
- Speed up the server response, preload the hero image and serve it in a modern format at the right size, and remove render-blocking CSS and JavaScript.
- Needs
- Core Web Vitals measured (PageSpeed Insights API key)
Rule id cwv-poor-lcp
Poor INP for real users
- Why it matters
- Interaction to Next Paint over 500 ms means the page feels slow to respond to taps and clicks. INP is a Core Web Vital.
- How to fix
- Break up long JavaScript tasks, defer third-party scripts, and keep event handlers light.
- Needs
- Core Web Vitals measured (PageSpeed Insights API key)
Rule id cwv-poor-inp
Poor CLS for real users
- Why it matters
- Cumulative Layout Shift over 0.25 means content jumps around while the page loads, causing mis-clicks. CLS is a Core Web Vital.
- How to fix
- Set width and height on images and embeds, reserve space for ads and banners, and avoid inserting content above what is already shown.
- Needs
- Core Web Vitals measured (PageSpeed Insights API key)
Rule id cwv-poor-cls
Slow server response (over 1 second)
- Why it matters
- Slow responses hurt user experience and can reduce how much of the site gets crawled.
- How to fix
- Investigate server performance, caching and database queries for these URLs.
Rule id slow-response
Core Web Vitals need improvement
- Why it matters
- At least one Core Web Vital is between the good and poor thresholds for real users. Pages need all three to be good to pass the assessment.
- How to fix
- Check the metric shown for each URL in PageSpeed Insights and work on the opportunities listed there.
- Needs
- Core Web Vitals measured (PageSpeed Insights API key)
Rule id cwv-needs-improvement
Low Lighthouse performance score
- Why it matters
- A lab score under 50 points to heavy pages or slow loading, which usually shows up in real-user experience too.
- How to fix
- Open the URL to see the biggest opportunities Lighthouse found, such as unused JavaScript or oversized images.
- Needs
- Core Web Vitals measured (PageSpeed Insights API key)
Rule id lab-low-score
Pages PageSpeed Insights could not test
- Why it matters
- Google could not load these pages for testing, often because of bot protection, redirects or timeouts. Googlebot may have the same trouble.
- How to fix
- Check the error for each URL, and make sure the page loads for the Lighthouse user agent.
- Needs
- Core Web Vitals measured (PageSpeed Insights API key)
Rule id vitals-failed
Large HTML (over 2 MB)
- Why it matters
- Very large documents are slow to download and parse, especially on mobile.
- How to fix
- Reduce inline code and markup, or split the content.
Rule id large-html
Sitemaps
Non-indexable URLs in sitemaps
- Why it matters
- Sitemaps should list only indexable 200 URLs. Redirects, errors, noindex and canonicalised URLs reduce trust in the sitemap.
- How to fix
- Remove these URLs from the sitemap, or fix the pages so they return 200 and are indexable.
- Needs
- Sitemap mode
Rule id sitemap-non-indexable
Sitemaps that could not be read
- Why it matters
- A sitemap that returns an error or is not valid XML is ignored by search engines.
- How to fix
- Make sure the sitemap URL returns 200 with valid sitemap XML.
- Needs
- Sitemap mode
Rule id sitemap-error
Orphan pages (in sitemap, not linked)
- Why it matters
- Pages that only appear in the sitemap get no internal link equity and are hard for users to find.
- How to fix
- Link to these pages from relevant pages or navigation, or remove them if they are obsolete.
- Needs
- Sitemap mode · A crawl that follows links (Website mode, or Sitemap mode with "Also follow links")
Rule id orphan-page
International
Invalid hreflang codes
- Why it matters
- Search engines ignore hreflang values that are not a valid language (and optional country) code, such as "en-UK" or "english".
- How to fix
- Use ISO 639-1 language codes with optional ISO 3166-1 country codes, e.g. en, en-GB, vi-VN, or x-default.
Rule id hreflang-invalid-code
Hreflang without return links
- Why it matters
- Hreflang only works when both pages point to each other; one-way annotations are ignored.
- How to fix
- Add the reciprocal hreflang on every alternate page.
Rule id hreflang-missing-return
Hreflang points to non-indexable URLs
- Why it matters
- Alternates that redirect, error, are noindexed or canonicalised elsewhere break the hreflang set.
- How to fix
- Point hreflang only at the final, indexable URL of each language version.
Rule id hreflang-to-non-indexable
Hreflang set without a self-reference
- Why it matters
- Each page in an hreflang set should list itself as well as its alternates.
- How to fix
- Add an hreflang entry for the page's own language pointing to its own URL.
Rule id hreflang-missing-self
Hreflang set without x-default
- Why it matters
- x-default tells search engines which page to show users whose language is not covered.
- How to fix
- Add hreflang="x-default" pointing to your language selector or main version.
Rule id hreflang-missing-x-default
Structured data
Invalid JSON-LD
- Why it matters
- A JSON-LD block with a syntax error is ignored entirely, so its rich results are lost.
- How to fix
- Fix the JSON syntax (commas, quotes, brackets) and check it with Google's Rich Results Test.
Rule id structured-data-invalid
Structured data missing required properties
- Why it matters
- Items without the properties Google requires are not eligible for rich results.
- How to fix
- Add the listed properties to each item, or remove markup for types you do not want as rich results.
Rule id structured-data-missing-required
JavaScript
JavaScript changes SEO tags
- Why it matters
- When scripts rewrite the title, description, canonical or robots tags, search engines may index either version, and the raw one is what most other bots see.
- How to fix
- Serve the final tags in the HTML from the server (server-side rendering or static output).
- Needs
- "Render JavaScript" turned on
Rule id js-changes-seo-tags
Links only in rendered HTML
- Why it matters
- Links that exist only after JavaScript runs are discovered later, and not at all by crawlers that do not render.
- How to fix
- Output important navigation and internal links as <a href> in the server HTML.
- Needs
- "Render JavaScript" turned on
Rule id js-links-only-rendered
Content depends on JavaScript
- Why it matters
- Most of the page text appears only after rendering. Indexing is slower and other bots see an almost empty page.
- How to fix
- Render the main content on the server, or pre-render pages that need to rank.
- Needs
- "Render JavaScript" turned on
Rule id js-content-dependent
Pages that failed to render
- Why it matters
- The page could not be rendered in time, so its rendered content could not be checked.
- How to fix
- Check for slow scripts, endless loading or errors in the browser console, or raise the timeout.
- Needs
- "Render JavaScript" turned on
Rule id js-render-failed
Search performance
Landing pages with visits return errors
- Why it matters
- Visitors from any channel (search, ads, email, social) land on these URLs, but they now return an error.
- How to fix
- Restore the page or 301-redirect it to the closest working page, and update campaigns that link to it.
- Needs
- Google Analytics data fetched
Rule id ga-traffic-error
Pages with search traffic return errors
- Why it matters
- These URLs earned clicks from Google search but now return an error, so that traffic is being lost.
- How to fix
- Restore the page, or 301-redirect it to the closest working page so the visits and rankings carry over.
- Needs
- Search Console data fetched
Rule id gsc-traffic-error
Pages with search traffic are not indexable
- Why it matters
- Google sends visitors to these URLs, but they are now noindexed, canonicalised elsewhere, redirected or blocked. Their rankings will fade.
- How to fix
- Check that this is intended. If the page should rank, remove the noindex or point the canonical at itself.
- Needs
- Search Console data fetched
Rule id gsc-traffic-not-indexable
URLs with impressions the crawl did not find
- Why it matters
- Google shows these URLs in search, but the crawl could not reach them by following links: they may be orphaned or linked only from elsewhere.
- How to fix
- Link to the pages that should rank from relevant internal pages; redirect or remove the ones that should not exist.
- Needs
- Search Console data fetched · A crawl that follows links (Website mode, or Sitemap mode with "Also follow links")
Rule id gsc-not-crawled
Landing pages with visits the crawl did not find
- Why it matters
- People land on these URLs (from campaigns, old links or search), but they are not linked from the site, so the crawl never reached them.
- How to fix
- Link to the ones that matter from relevant pages; redirect retired campaign or legacy URLs to current pages.
- Needs
- Google Analytics data fetched · A crawl that follows links (Website mode, or Sitemap mode with "Also follow links")
Rule id ga-not-crawled
Low click-through rate for the ranking position
- Why it matters
- These pages rank on page one but get far fewer clicks than usual for their position, often because the title or description does not appeal.
- How to fix
- Rewrite the title and meta description to match what searchers want; add structured data for rich results where it fits.
- Needs
- Search Console data fetched
Rule id gsc-low-ctr
Pages ranking just below page one (positions 11–20)
- Why it matters
- Pages on page two get few clicks, but a small improvement can move them onto page one.
- How to fix
- Strengthen these pages: better content for the main queries, more internal links from strong pages, and a sharper title.
- Needs
- Search Console data fetched
Rule id gsc-striking-distance
Indexable pages with no search impressions
- Why it matters
- These pages did not appear in Google search at all in the period: they may not be indexed, or target no searched topic.
- How to fix
- Inspect the URL in Search Console. Improve, merge or remove pages that serve no search purpose.
- Needs
- Search Console data fetched
Rule id gsc-no-impressions
Log files
Googlebot gets errors (server logs)
- Why it matters
- Googlebot requested these URLs and got a 4xx or 5xx response. Errors waste crawl budget, and repeated server errors make Google crawl the site less.
- How to fix
- Fix server errors first. Redirect or restore pages that Google still requests but no longer exist, or remove the links that point to them.
- Needs
- Server logs imported
Rule id log-googlebot-errors
Indexable pages Googlebot did not crawl (server logs)
- Why it matters
- In the period the logs cover, Googlebot never requested these pages, so changes to them are not picked up and new pages may not get indexed.
- How to fix
- Link to these pages from strong, frequently crawled pages, list them in the XML sitemap, and check they are not too deep in the site.
- Needs
- Server logs imported
Rule id log-not-crawled-by-google
URLs Googlebot crawls that the crawl did not find (server logs)
- Why it matters
- Google keeps requesting these URLs, but the site does not link to them: old pages, parameter variants or orphaned content that use up crawl budget.
- How to fix
- Redirect retired URLs, link to orphaned pages that should rank, and block crawl traps (e.g. endless parameters) in robots.txt.
- Needs
- Server logs imported · A crawl that follows links (Website mode, or Sitemap mode with "Also follow links")
Rule id log-orphan-crawled
See which of these your site has
New to Crawlens? Start with your first crawl.