This is the canonical list of all audit checks in VisibilityIQ. Check IDs are stable — they’re used in API filtering, finding deduplication, and webhook payloads.
| Check ID | Name | Scope | Default Severity |
|---|
indexation.noindex-conflict-meta-header | noindex in meta vs X-Robots-Tag conflict | page | high |
indexation.noindex-unintentional | noindex on important page | page | critical |
canonical.missing-self | Missing self-canonical | page | medium |
canonical.to-redirect | Canonical points to redirect target | page | high |
canonical.to-non-200 | Canonical points to non-200 URL | page | critical |
canonical.loop | Canonical loop detected | page | critical |
canonical.chain | Canonical chain (3+ hops) | page | medium |
canonical.cross-domain | Cross-domain canonical | page | medium |
canonical.mismatch-raw-rendered | Canonical differs between raw and rendered | page | high |
canonical.mismatch-gsc | Canonical differs from GSC selected canonical | page | high |
duplicate.cluster | Duplicate content cluster | cluster | medium |
protocol.http-not-redirecting | HTTP URL not redirecting to HTTPS | site | high |
softfour.candidate | Soft 404 candidate (200 with error content) | page | medium |
| Check ID | Name | Scope | Default Severity |
|---|
robots.blocks-critical-page | robots.txt blocks important page | site | critical |
robots.parse-error | robots.txt has parse errors | site | high |
orphan.sitemap-only | Page only accessible via sitemap | page | medium |
orphan.invisible | Page has no inbound links and not in sitemap | page | high |
links.broken-internal | Broken internal links (4xx/5xx) | page | high |
links.redirecting-internal | Internal links point to redirects | page | low |
links.dead-end | Page has no outbound internal links | page | medium |
crawl.depth-excessive | Important page too deep in hierarchy | page | medium |
crawl.parameter-trap | Crawl trap via parameter expansion | site | medium |
sitemap.url-returns-error | Sitemap URL returns 4xx or 5xx | site | high |
sitemap.url-is-redirect | Sitemap URL redirects (should be final URL) | site | low |
| Check ID | Name | Scope | Default Severity |
|---|
ai-access.robots-block-gptbot | GPTBot blocked in robots.txt | site | high |
ai-access.robots-block-claudebot | ClaudeBot blocked in robots.txt | site | high |
ai-access.robots-block-perplexitybot | PerplexityBot blocked in robots.txt | site | high |
ai-access.robots-block-google-extended | Google-Extended blocked in robots.txt | site | high |
ai-access.robots-block-oai-searchbot | OAI-SearchBot blocked in robots.txt | site | medium |
ai-access.robots-block-bytespider | Bytespider blocked in robots.txt | site | medium |
ai-access.js-only-content | Primary content only available after JS | page | high |
ai-access.llms-txt-missing | llms.txt not present at site root | site | medium |
ai-access.llms-txt-incomplete | llms.txt present but incomplete | site | low |
ai-access.crawl-delay-ai | Excessive crawl-delay for AI user-agents | site | low |
| Check ID | Name | Scope | Default Severity |
|---|
parity.content-absent-raw | Content in rendered DOM absent from raw HTML | page | high |
parity.meta-title-differs | Title differs between raw and rendered | page | high |
parity.meta-description-differs | Meta description differs | page | medium |
parity.meta-robots-differs | Meta robots directive differs | page | critical |
parity.links-absent-raw | Internal links absent from raw HTML | page | high |
parity.structured-data-differs | Structured data differs raw vs rendered | page | medium |
| Check ID | Name | Scope | Default Severity |
|---|
schema.json-ld-syntax-error | JSON-LD syntax error | page | high |
schema.product-missing-required | Product schema missing required fields | template | high |
schema.article-missing-author | Article schema missing author | template | medium |
schema.faq-deprecated | FAQPage on non-primary content | page | low |
schema.visible-text-mismatch | Schema claim doesn’t match visible content | page | high |
schema.duplicate-type | Duplicate schema type on one page | page | low |
schema.eeat-author-missing | No author schema on YMYL page | page | medium |
| Check ID | Name | Scope | Default Severity |
|---|
perf.lcp-poor | LCP in “Poor” band (> 4s) | page | high |
perf.inp-poor | INP in “Poor” band (> 500ms) | page | high |
perf.cls-poor | CLS in “Poor” band (> 0.25) | page | high |
perf.lcp-needs-improvement | LCP needs improvement (2.5–4s) | page | medium |
perf.lcp-image-not-preloaded | LCP image not preloaded | page | medium |
perf.lcp-lazy-loaded | LCP image has lazy loading (slows LCP) | page | high |
perf.image-no-dimensions | Image missing explicit dimensions (CLS risk) | page | medium |
perf.bfcache-ineligible | Page ineligible for back-forward cache | page | medium |
perf.field-lab-mismatch | CrUX field scores significantly worse than Lighthouse | page | high |
| Check ID | Name | Scope | Default Severity |
|---|
security.https-not-enforced | HTTP not redirecting to HTTPS | site | high |
security.mixed-content-active | Active mixed content (scripts over HTTP) | page | high |
security.hsts-missing | HSTS header missing | site | medium |
security.hsts-max-age-short | HSTS max-age too short (< 1 year) | site | low |
security.csp-missing | Content-Security-Policy missing | site | medium |
security.x-content-type-missing | X-Content-Type-Options: nosniff missing | site | medium |
security.cert-expiring-soon | TLS certificate expiring within 30 days | site | high |
security.cert-expired | TLS certificate expired | site | critical |