squirrelscan
GitHub

Rules Configuration

Enable and disable audit rules with pattern matching

The [rules] section controls which audit rules run during analysis.

Configuration

[rules]
enable = ["*"]
disable = ["images/modern-format", "links/orphan-pages"]

Options

enable

Type: string[] Default: ["*"] (all rules)

Patterns of rules to enable. Supports wildcards and specific rule IDs.

Pattern Syntax:

  • * - All rules
  • category/* - All rules in a category
  • category/rule-name - Specific rule

Examples:

Enable all rules (default):

[rules]
enable = ["*"]

Enable specific categories:

[rules]
enable = ["core/*", "links/*", "images/*"]

Enable specific rules:

[rules]
enable = ["core/meta-title", "core/meta-description", "links/broken-links"]

disable

Type: string[] Default: [] (nothing disabled)

Patterns of rules to disable. Takes precedence over enable.

If a rule matches both enable and disable, it’s disabled.

Examples:

Disable the agent experience rules (ax/*; the older ai/* code matches the same rules):

[rules]
disable = ["ax/*"]

Disable a whole category:

[rules]
disable = ["perf/*"]

Disable specific rules:

[rules]
disable = ["content/word-count", "images/modern-format"]

time_budget_ms

Type: integer (milliseconds: 0, or 1000 or more) Default: unset (2000 ms)

How long one rule may run on one page before it is abandoned and reported as not evaluated on that page (a skipped check, never a failure). A site rule gets this much per page of the site, capped at 60 seconds, or at the budget itself if you set it above that. 0 turns the budget off. A value below 1000 is refused for now: a rule that finishes just past a tight budget can stop the audit (#880).

The budget is a backstop against content built to make a pattern match very slowly, not a performance setting: ordinary pages take a few milliseconds per rule. Raise it if rules time out on ordinary pages on a slow or busy machine. See Rule time budget for what a timed-out rule reports.

[rules]
time_budget_ms = 3000

Rule categories

squirrelscan runs 300+ rules across 22 categories. Each category’s page lists its rules and what each one checks; the rules reference has the per-category counts.

CategoryPatternWhat it covers
Crawlabilitycrawl/*Robots.txt, sitemaps, and crawl directives
Core SEOcore/*Essential meta tags and page structure for search engines
Securitysecurity/*Transport security, headers, cookies, forms and leaked secrets
Site Integrityintegrity/*Signs of compromise: injected pages, phishing kits, malware, SEO spam
Linkslinks/*Internal and external link health and structure
Contentcontent/*Text quality, readability, and content structure
Structured Dataschema/*Structured data and rich snippet eligibility
Imagesimages/*Image optimization and accessibility
Performanceperf/*Page speed and loading performance
Reliabilityreliability/*Runtime errors, broken resources and failed requests
Social Mediasocial/*Open Graph and social sharing metadata
Accessibilitya11y/*Accessible names, ARIA, forms, structure, tables, language and zoom
Mobilemobile/*Mobile-friendliness and responsive design
URL Structureurl/*URL structure, length, and formatting
Internationalizationi18n/*Language declarations and multi-region support
E-E-A-Teeat/*Experience, expertise, authority, trust signals
Legal Compliancelegal/*Privacy policy and legal compliance signals
Local SEOlocal/*Local business schema and NAP consistency
Videovideo/*Video content markup and accessibility
Analyticsanalytics/*Tracking and measurement implementation
Agent Experienceax/*How ready a site is for AI agents to read, discover, and operate on it
Blockingblocking/*Content, links, and trackers that ad blockers and privacy filters block

Use the pattern in enable or disable to switch a whole category on or off. Two categories also answer to an older code: ai/* matches the Agent Experience rules (some of their ids still start with ai/), and adblock/* matches the Blocking rules. A pattern with either code matches the whole category.

Most Agent Experience rules run on your machine on every audit, with no API key. Five read results from squirrelscan’s cloud (ai/site-metadata, ai/page-type-match, ai/llm-parsability, ax/archive-indexing and ax/content-without-js), so they need a signed-in audit whose level includes those cloud checks, and are skipped otherwise. ax/content-without-js also needs the plain crawl HTML of the page to compare with its cloud render, so it is skipped on pages the crawl itself rendered.

Keyword and content gap analysis (gaps/*) is an opt-in cloud add-on, not one of the 22: see Keyword and content gaps.


Configuration examples

SEO-focused audit

Focus on SEO rules only:

[rules]
enable = ["core/*", "content/*", "crawl/*", "url/*", "schema/*"]
disable = []

Accessibility audit

Focus on accessibility and mobile:

[rules]
enable = ["a11y/*", "mobile/*"]
disable = []

Performance audit

Focus on performance and images:

[rules]
enable = ["perf/*", "images/*"]
disable = []

Security audit

Focus on security headers and HTTPS:

[rules]
enable = ["security/*"]
disable = []

All rules except agent experience

Enable everything except the agent experience rules:

[rules]
enable = ["*"]
disable = ["ax/*"]

Fast audit (core only)

Quick audit with just essential checks:

[rules]
enable = ["core/*"]
disable = []

Disable slow rules

Exclude computationally expensive rules:

[rules]
enable = ["*"]
disable = ["ax/*", "perf/cls-hints"]

CI/CD pipeline

Strict subset for automated checks:

[rules]
enable = ["core/*", "security/*", "links/broken-links"]
disable = []

Pattern matching

Wildcards

A * is only supported as the whole pattern (*) or as the whole rule name (category/*). A partial wildcard such as core/og-* matches no rule, so list the rules instead:

[rules]
enable = ["core/*", "social/*"]  # All core and social rules
disable = ["core/og-tags", "social/og-image-size", "social/og-url-match"]  # Except the Open Graph ones

Retired rules

content/quality and ai/ai-content are retired: they never load, whatever enable says, so a disable entry for either one does nothing and can be removed.

Multiple patterns

[rules]
enable = ["core/*", "links/*", "images/*"]
disable = ["images/modern-format", "links/orphan-pages"]

Disable takes precedence

[rules]
enable = ["*"]           # Enable all
disable = ["ax/*"]       # But disable agent experience (wins)

Result: all rules except the agent experience category.

Rule weights

Each rule has a weight (1-10) reflecting its importance:

WeightImportanceExample Rules
10Criticalcore/meta-title, crawl/robots-txt
8Highcore/canonical, links/broken-links
6Mediumimages/alt-text, content/word-count
4Lowurl/hyphens, social/share-buttons
2Infoanalytics/gtm-present

Weights affect the health score calculation.

Type to search…

↑↓ navigate↵ openesc close