Alle 86 regler
Kontrakten består af 86 maskinelt verificerbare regler fordelt på 14 domæner, og hver regel her på siden er genereret programmatisk fra selve regel-registret — datasættet bag denne demoside er frameworkets egen kildekode.
Teknisk SEO (24)
Reglerne i seo-domænet dækker det klassiske tekniske fundament: titler, beskrivelser, canonicals, struktureret data, sitemaps og URL-hygiejne. Det er her de fleste sites taber terræn — ikke på avancerede tricks, men på basale signaler der mangler eller modsiger hinanden på tværs af tusindvis af sider.
- seo/title — Every page has a well-sized <title> (15–60 characters).
- seo/meta-description — Every page has a meta description of 50–160 characters.
- seo/canonical — Every page declares an absolute canonical URL.
- seo/single-h1 — Every page has exactly one <h1>.
- seo/heading-hierarchy — Headings start at h1 and never skip levels.
- seo/structured-data — Every page carries valid JSON-LD structured data.
- seo/og-tags — Every page has og:title, og:description and og:image.
- seo/lang-attribute — The <html> element declares its language.
- seo/image-alt — Every <img> has an alt attribute.
- seo/descriptive-links — Link anchor text is descriptive, not generic.
- seo/charset — The page declares its character encoding.
- seo/favicon — The page declares a favicon.
- seo/canonical-collisions — No two pages claim the same canonical URL.
- seo/clean-urls — URLs are lowercase, hyphenated and free of encoded spaces.
- seo/root-favicon — The site serves a /favicon.ico at the root.
- seo/canonical-target-health — Canonical URLs point to existing, indexable pages.
- seo/no-parameter-internal-links — Internal links carry no query parameters or tracking tags.
- seo/trailing-slash-consistency — Internal links use one trailing-slash convention site-wide.
- seo/link-count-ceiling — No page carries more than 300 links.
- seo/schema-visible-parity — FAQ structured data matches the visible page content.
- seo/title-variable-ratio — Titles are not dominated by a shared boilerplate prefix.
- seo/breadcrumb-parity — BreadcrumbList schema matches visible content and real pages.
- seo/robots-txt — The site serves a robots.txt.
- seo/sitemap — The site serves an XML sitemap.
Indholdskvalitet (9)
Quality-domænet er pSEO-sitets livsforsikring mod Googles scaled content abuse-politik: tyndt indhold, genbrugte sætninger, dubletter og template-artefakter. Reglerne måler det, kvalitetsbedømmere kigger efter, og fejler builds før mønstrene når at skade hele sitets klassifikation.
- quality/placeholder-leakage — No template artifacts leak into rendered content.
- quality/date-sanity — Structured-data dates are valid, ordered and not in the future.
- quality/thin-content — Main content has at least 250 words.
- quality/duplicate-titles — No two pages share the same <title>.
- quality/duplicate-descriptions — No two pages share the same meta description.
- quality/boilerplate-share — Repeated stock sentences stay a minority of each page.
- quality/intro-differentiation — Lead paragraphs differ between pages beyond token swaps.
- quality/trust-pages — Declared trust pages exist and are linked site-wide.
- quality/near-duplicate-content — No two pages have near-identical main content.
Linkgraf (4)
Graph-domænet behandler den interne linkstruktur som et førsteklasses objekt: ingen forældreløse sider, ingen brudte interne links, kort klikdybde og en URL-taksonomi uden vildfarne stier. For datadrevne sites er grafen deterministisk beregnelig ved build — så den kan håndhæves, ikke bare anbefales.
- graph/url-pattern-per-type — Every page URL matches a declared page-type pattern.
- graph/orphan-pages — Every page receives at least one internal link.
- graph/broken-internal-links — No internal link points to a missing page.
- graph/click-depth — Every page is reachable from the homepage in ≤ 3 clicks.
Performance (8)
Perf-domænet internaliserer de statisk afgørbare dele af Lighthouse: billedformater og -vægt, render-blokerende ressourcer, dimensioner mod layout shift og selvhostede fonte. Målet er ikke en score men disciplin — siden er hurtig, fordi den ikke kan bygges langsom.
- perf/img-dimensions — Every <img> declares width and height.
- perf/no-blocking-scripts — No render-blocking scripts in <head>.
- perf/html-weight — HTML document stays under 100 KB.
- perf/modern-image-formats — Raster images are served as AVIF/WebP, not plain JPEG/PNG.
- perf/responsive-images — Large content images declare srcset/sizes.
- perf/lazy-loading — Below-fold images lazy-load; the LCP candidate does not.
- perf/image-weight — No served image exceeds 150 KB.
- perf/self-hosted-fonts — Fonts are self-hosted, not loaded from third-party CDNs.
Tilgængelighed (8)
A11y-domænet håndhæver WCAG 2.2-krav ud over hvad Lighthouse måler: landmarks, tilgængelige navne, ARIA-integritet, zoom-frihed og skip-links. Tilgængelighed og agent-læsbarhed er næsten samme akse — semantisk HTML tjener både skærmlæsere og sprogmodeller.
- a11y/main-landmark — Every page has exactly one <main> landmark.
- a11y/viewport — Viewport meta exists and does not disable zoom.
- a11y/accessible-names — Every link and button has an accessible name.
- a11y/skip-link — Page offers a skip-to-content link.
- a11y/aria-integrity — ARIA references resolve and aria-hidden hides no focusables.
- a11y/duplicate-ids — No duplicate id values in the document.
- a11y/iframe-title — Every iframe has a descriptive title.
- a11y/no-autoplay-motion — No autoplaying media, marquee or timed refresh.
Agent-parathed (8)
Agent-domænet gør sitet læsbart for AI-assistenter: llms.txt og llms-full.txt, markdown-spejle af hver side, korrekt encoding af danske tegn, svar-først-afsnit og stabile ankre til citationer. Det er det mindst kommodiserede domæne — og det hurtigst voksende discovery-lag.
- agent/llms-txt — The site serves an /llms.txt.
- agent/content-without-js — Page content is present in the HTML without executing JavaScript.
- agent/llms-full-txt — The site serves an /llms-full.txt with the full content.
- agent/utf8-text-files — Agent-facing text files are valid UTF-8 without mojibake.
- agent/markdown-mirrors — Every page has a markdown twin, declared via a link alternate.
- agent/token-efficiency — Visible text makes up a reasonable share of the HTML bytes.
- agent/answer-first — The first paragraph answers the page’s implied query directly.
- agent/stable-heading-anchors — Section headings carry id attributes for deep linking.
Sikkerhed (5)
Security-domænet fjerner de klassiske statiske-site-huller: mixed content, reverse tabnabbing, inline event handlers, manglende SRI og base-tag-kapring. Et zero-JS content-site kan køre en stram CSP uden undtagelser — så det skal det.
- security/no-mixed-content — No resources are loaded over insecure http://.
- security/noopener — target="_blank" links carry rel="noopener".
- security/no-inline-event-handlers — No inline event handlers or javascript: URLs.
- security/sri-external-resources — Cross-origin scripts and stylesheets carry SRI integrity hashes.
- security/no-base-tag — No <base> element.
Grøn web (1)
Green-domænet sætter hårde transfer-budgetter, som en Lighthouse-score kan skjule: en side kan score 100 og stadig veje to megabyte. Budgettet gælder summen af HTML, CSS, JS og billeder per side — målt på de faktiske filer i build-output.
- green/page-weight — Total page weight (HTML + CSS + JS + images) stays under 300 KB.
Privatliv (2)
Privacy-domænet håndhæver GDPR som arkitektur i stedet for som banner: nul samtykke-krævende trackere, nul tredjeparts-origins og selvhostede ressourcer. Et site uden tredjeparter har intet at bede om samtykke til — og dermed ingen cookie-banner overhovedet.
- privacy/no-trackers — No consent-requiring trackers are embedded.
- privacy/third-party-inventory — The site loads no resources from third-party origins.
Internationalisering (2)
I18n-domænet fanger de fejl, der rammer dansk indhold hårdest: mojibake hvor æ, ø og å bliver til æ, ø og Ã¥, amerikanske datoformater på danske sider og sprogdeklarationer der ikke passer til indholdet.
- i18n/no-mojibake — No encoding corruption (mojibake) in visible text.
- i18n/localized-formats — Danish pages use Danish date formats.
Distribution (1)
Distribution-domænet dækker lagene oven på rankings: delingsbilleder, feeds og verifikationsfiler. Første regel håndhæver per-side OG-billeder, så tusind sider ikke deler ét intetsigende preview i sociale medier og chat-apps.
- distribution/og-image-uniqueness — OG images are page-specific, not one shared fallback.
Build-ledger (4)
Ledger-domænet er frameworkets hukommelse på tværs af builds: en committet manifest af URL'er, content-hashes og ankre. Den gør ærlighed maskinelt verificerbar — ingen URL forsvinder lydløst, lastmod må kun rykke sig når indholdet faktisk ændrede sig, og udgivelsestakten holdes under abuse-tærsklen.
- ledger/url-permanence — No previously published URL disappears without a redirect.
- ledger/anchor-stability — Heading anchors never disappear from a shipped page.
- ledger/lastmod-truthfulness — lastmod advances exactly when content actually changed.
- ledger/launch-rate — New-page volume per build stays within the launch ramp.
Servering (5)
Served-domænet verificerer det, HTML'en ikke kan bære: security headers, CSP-kvalitet, HSTS, komprimering og ægte 404-statuskoder. Reglerne kører mod den levende server og parres med adapters-pakken, der genererer host-konfigurationen fra én kanonisk kilde.
- served/security-headers — The full security header suite is present.
- served/csp-quality — CSP contains no unsafe-inline scripts or wildcard sources.
- served/hsts-quality — HSTS is preload-grade (1 year, includeSubDomains, preload).
- served/compression — HTML responses are served compressed (brotli/gzip/zstd).
- served/404-contract — Unknown paths return a real 404 status.
Netværk og forfald (5)
Network-domænet overvåger forfald over tid via pseo monitor: døde eksterne links, rådnende OG-billeder, sitemap-drift, manglende security.txt og TLS-certifikater på vej mod udløb. Born perfect klarer de andre domæner — stays perfect er dette domænes job.
- network/external-link-liveness — External links resolve to working pages.
- network/og-image-liveness — og:image URLs serve real images.
- network/sitemap-reality — Every sitemap URL returns 200 on the live site.
- network/security-txt — The site serves /.well-known/security.txt.
- network/cert-expiry — TLS certificate has more than 21 days of validity.