org.spiderlint
Settings for spiderlint, a site-wide linter for SEO tags, security headers, TLS and links: shared crawl and rule settings, plus one entry per site under sites, each audited in its own store.
- Namespace:
org.spiderlint - Owner: Damián Búho
- Status: draft
- Docs: https://kiota.ch/damian-buho/spiderlint
Used by
Section titled “Used by”Illustrative fragment — not a complete projectfile document. Consumers MUST round-trip unknown namespaces even when no shape is published.
---# SPDX-FileCopyrightText: 2026 Damián Búho <damian.buho@proton.me>## SPDX-License-Identifier: CC-BY-4.0# SPDX-License-Identifier: MIT
# Shape: org.spiderlint extension namespace# Illustrative fragment — not a complete projectfile document.# See registry.yaml for ownership and status.
org: spiderlint: targets: ["https://example.com/"] # OPTIONAL seed URLs; forbidden beside sites canonical-origin: "https://example.com" # OPTIONAL origin a staging twin’s pages are built for resolver: system # OPTIONAL or a comma list of address[:port] rules: [recommended] # OPTIONAL replaces every group’s rules fetch: auto # OPTIONAL auto | http | browser | adaptive browser: chromium # OPTIONAL chromium | firefox | webkit scope: origin # OPTIONAL origin | host | domain max-pages: 0 # OPTIONAL 0 = no limit max-depth: 0 # OPTIONAL 0 = no limit max-body-size: 10000000 # OPTIONAL bytes keepalive: true # OPTIONAL include: [] # OPTIONAL crawl matching URLs only exclude: [] # OPTIONAL skip matching URLs resources: {fetch: true, max-per-page: 200} # OPTIONAL robots: true # OPTIONAL sitemap: true # OPTIONAL fold: {threshold: 0.8, min: 3} # OPTIONAL or false cache: pages: {ttl: 0} # OPTIONAL per bucket: pages probes resources robots sitemaps origins dns fail-on: error # OPTIONAL error | warning | info | never format: human # OPTIONAL human | json | sarif plugins: [] # OPTIONAL module names; nothing is auto-loaded disabled-rules: [] # OPTIONAL rule IDs override: {error: [], warning: [], info: []} # OPTIONAL severity per rule ID groups: posts: match: ["/posts/**"] # REQUIRED globs or re: regexes; first match wins rules: [seo] # OPTIONAL fetch: browser # OPTIONAL sample: 3 # OPTIONAL or all rulesets: house: description: House rules # OPTIONAL extends: ["spiderlint:seo"] # OPTIONAL when: {} # OPTIONAL fact path to constant or JSON Schema rules: html/title-length: {expect: {maxLength: 70}} # severity, or fact + expect, or unique sites: production: # OPTIONAL any key above except sites; replaces the shared one targets: ["https://example.com/"] preview: targets: ["https://preview.example.com/"] fetch: browser[org.spiderlint]targets = [ "https://example.com/" ]canonical-origin = "https://example.com"resolver = "system"rules = [ "recommended" ]fetch = "auto"browser = "chromium"scope = "origin"max-pages = 0max-depth = 0max-body-size = 10000000keepalive = trueinclude = []exclude = []robots = truesitemap = truefail-on = "error"format = "human"plugins = []disabled-rules = []
[org.spiderlint.resources]fetch = truemax-per-page = 200
[org.spiderlint.fold]threshold = 0.8min = 3
[org.spiderlint.cache.pages]ttl = 0
[org.spiderlint.override]error = []warning = []info = []
[org.spiderlint.groups.posts]match = [ "/posts/**" ]rules = [ "seo" ]fetch = "browser"sample = 3
[org.spiderlint.rulesets.house]description = "House rules"extends = [ "spiderlint:seo" ]
[org.spiderlint.rulesets.house.when][org.spiderlint.rulesets.house.rules."html/title-length".expect]maxLength = 70
[org.spiderlint.sites.production]targets = [ "https://example.com/" ]
[org.spiderlint.sites.preview]targets = [ "https://preview.example.com/" ]fetch = "browser"{ "org": { "spiderlint": { "targets": [ "https://example.com/" ], "canonical-origin": "https://example.com", "resolver": "system", "rules": [ "recommended" ], "fetch": "auto", "browser": "chromium", "scope": "origin", "max-pages": 0, "max-depth": 0, "max-body-size": 10000000, "keepalive": true, "include": [], "exclude": [], "resources": { "fetch": true, "max-per-page": 200 }, "robots": true, "sitemap": true, "fold": { "threshold": 0.8, "min": 3 }, "cache": { "pages": { "ttl": 0 } }, "fail-on": "error", "format": "human", "plugins": [], "disabled-rules": [], "override": { "error": [], "warning": [], "info": [] }, "groups": { "posts": { "match": [ "/posts/**" ], "rules": [ "seo" ], "fetch": "browser", "sample": 3 } }, "rulesets": { "house": { "description": "House rules", "extends": [ "spiderlint:seo" ], "when": {}, "rules": { "html/title-length": { "expect": { "maxLength": 70 } } } } }, "sites": { "production": { "targets": [ "https://example.com/" ] }, "preview": { "targets": [ "https://preview.example.com/" ], "fetch": "browser" } } } }}