Check Engine / Learn / What Check Engine checks

All 99 Check Engine checks, by area

Check Engine runs 99 checks across 13 areas. This list is generated from the shipped build, so it cannot drift from what the tool actually does. Run checkengine checks and you will get the same list.

Each check produces a finding only when there is something to report, and each finding carries what it costs you, how much work the fix is, and the markup to paste. Areas that do not apply to a site (local business checks on a pure SaaS product, for instance) are marked not applicable rather than scored as passing.

AI search visibility (10)

  • Citable, specific claims ai.citable_facts
  • AI crawler access ai.crawler_access
  • Dead AI crawler directives ai.dead_crawler_directive
  • Server access for AI crawlers ai.edge_access
  • Entity definition and sameAs ai.entity
  • Answer extractability ai.extractability
  • Dates AI engines can read ai.freshness_signal
  • llms.txt ai.llms_txt
  • Content reachable without JavaScript ai.rendering
  • The AI control nothing can detect ai.unmeasurable_optout

Brand consistency (6)

  • Logo presence and markup brand.logo
  • Brand name consistency brand.name_consistency
  • Consistent positioning statement brand.positioning
  • Social profile consistency brand.social_consistency
  • Typography and colour consistency brand.visual_consistency
  • Writing voice consistency brand.voice_consistency

Content quality (11)

  • Generic AI-sounding copy content.ai_slop
  • Pages competing with each other content.competing_pages
  • Freshness signals content.dates
  • Trust and authorship signals content.eeat
  • JavaScript-dependent content content.js_rendering
  • Declared page language content.lang_mismatch
  • Language coverage content.language_scope
  • Placeholder content content.placeholder
  • Readability content.readability
  • Thin content content.thin
  • Topics worth writing about content.topic_gaps

Conversion & landing pages (9)

  • Published email addresses that cannot receive mail cvr.dead_contact
  • Form friction cvr.form_friction
  • Funnel coverage cvr.funnel
  • Title / headline consistency cvr.message_match
  • Calls to action cvr.no_cta
  • Pricing transparency cvr.pricing
  • Social proof cvr.social_proof
  • Phone links that will not dial cvr.unusable_phone
  • Above-the-fold value proposition cvr.value_prop

Crawlability & indexing (19)

  • Broken pages (4xx/5xx) index.broken
  • Googlebot's 2MB fetch limit index.byte_cap
  • Canonical tags index.canonical
  • Conflicting canonical tags index.canonical_conflict
  • Click depth and orphans index.depth
  • Duplicate pages index.duplicate_content
  • Client-side redirects index.meta_refresh
  • Pages blocked from indexing index.noindex
  • Redirect problems index.redirects
  • robots.txt blocks the whole site index.robots_blocks_all
  • XML sitemap index.sitemap
  • Soft 404 handling index.soft_404
  • Soft 404 pages in the crawl index.soft_404_pages
  • URL structure index.url_hygiene
  • www / apex canonicalisation index.www
  • hreflang language codes intl.hreflang_codes
  • hreflang return tags intl.hreflang_return
  • hreflang self-reference intl.hreflang_self
  • hreflang target health intl.hreflang_targets

Links (7)

  • Broken outbound links links.broken_external
  • Insecure internal links links.http_on_https
  • Internal links into and out of each page links.internal_volume
  • Internal links to the pages that sell links.money_page_weak_inlinks
  • Navigation reachable without JavaScript links.nav_not_in_html
  • Outbound link handling links.outbound_quality
  • Pagination handling links.pagination

Local business SEO (6)

  • Local business detection local.applicable
  • Contact and conversion signals local.contact_signals
  • Location targeting in content local.geo_targeting
  • NAP consistency local.nap
  • Review signals local.reviews
  • LocalBusiness schema local.schema

Tracking & campaign readiness (6)

  • Advertising pixels mar.ad_pixels
  • Analytics installed mar.analytics
  • Consent and privacy compliance mar.consent
  • Email list building mar.email_capture
  • Marketing stack inventory mar.stack
  • UTM tagging hygiene mar.utm_hygiene

On-page SEO (6)

  • Internal link anchor text onpage.anchors
  • Meta descriptions onpage.description
  • Heading structure onpage.headings
  • Image optimisation onpage.images
  • Language and viewport declarations onpage.lang
  • Title tags onpage.title

Speed & Core Web Vitals (7)

  • Layout shift risk perf.cls_risk
  • Compression and caching headers perf.compression
  • Image formats perf.modern_images
  • Page weight perf.page_weight
  • Redirect latency perf.redirect_cost
  • Render-blocking resources perf.render_blocking
  • Server response time perf.ttfb

Structured data (6)

  • Incomplete structured data schema.incomplete
  • Invalid JSON-LD schema.invalid
  • Structured data vs visible content schema.mismatch
  • Missing structured data schema.missing
  • Rich result opportunities schema.opportunity
  • Schema price vs visible price schema.price

Security & trust (3)

  • Security headers security.headers
  • HTTPS security.https
  • Mixed content security.mixed_content

Social & sharing (3)

  • Favicon social.favicon
  • Open Graph tags social.open_graph
  • Twitter/X card social.twitter

Where a check has a step-by-step fix

A finding tells you what changed and hands you the markup. For the checks people most often arrive here looking for, there is a longer walkthrough with the reasoning behind the fix:

How a finding is put together

A check that fires produces more than a label. Each finding carries four things, and they are what separate a plan from a list:

  • What it costs you, in plain language. Not "missing meta description" but what happens as a result. Google writing your search snippet from whatever text it finds, often a cookie notice.
  • Severity, where critical is reserved for things that stop the page ranking at all. If everything is critical, nothing is, so the bar is deliberately high.
  • Effort, from minutes to a project. Combined with impact, this is what produces the ordering. A trivial fix on an important page outranks a large fix on a marginal one.
  • The change itself, as markup you can copy. For structured data that means a complete, valid JSON-LD block with your own business details already in the right fields.

Findings are also capped in reach. An issue affecting every page of a large site does not automatically outrank one affecting the homepage, because reach is compressed logarithmically: without that, one trivial nit on a large site drowns out everything that matters.

What is deliberately not here

Per-page backlinks and anchor text. Domain authority and the list of referring domains come from Common Crawl's hyperlink graph, but which individual page links to you, and with what anchor text, lives in archive files far too large to fetch from a laptop. Search volumes. Check Engine finds the queries people actually type, from Google's public autocomplete, and refuses to print a monthly volume it does not have. Each is a real limitation and each is stated in the report rather than papered over.

Comparing audit tools? Each of these pages sets out what the other tool costs and limits, read from its own pages, and when to pick it instead of Check Engine: SE Ranking vs Screaming Frog, Check Engine vs Ahrefs Site Audit and the SEOptimer alternative.