Text-only version. View the full version of this page · All text pages

Website Audit

This page measures the publication against the Website Specification checklist, a public list of what a well-built website should do, from basics like page titles and alt text to security headers, privacy, and how well AI tools can read it. The aim is to close the gaps a few at a time, and this page is updated whenever an item changes.

94% 268.5 of 287 applicable points

173 of 173 items reviewed. The 0 not yet reviewed and 38 not applicable are left out of the score. Last updated October 14, 2026.

  • ✓ Pass 120
  • ½ Partial 6
  • ✕ Fail 9
  • ? Not yet reviewed 0
  • – Not applicable 38

Scores by section

SectionPointsScore
Foundations40 / 40100%
SEO27 / 2896%
Accessibility59.5 / 6394%
Security32 / 3884%
Well-Known URIs6 / 6100%
Agent Readiness26 / 26100%
Performance45 / 4992%
Privacy13 / 1493%
Resilience9 / 1275%
Internationalisation11 / 11100%

Showing all 173 items

Foundations

40 / 40 points (100%)

  • ✓ Pass Required

    The HTML doctype

    Every prerendered page starts with <!doctype html>.

  • ✓ Pass Required

    The lang attribute on <html>

    lang="en" on every page.

  • ✓ Pass Required

    <meta charset>

    UTF-8, declared first in <head>.

  • ✓ Pass Required

    <meta viewport>

    width=device-width, initial-scale=1 on every page. Zoom is never disabled.

  • ✓ Pass Required

    The <title> element

    One title per page, "Page title · Commonway System", from each page's frontmatter.

  • ✓ Pass Recommended

    <meta name="description">

    Every page has a description from its frontmatter, also used for Open Graph and search engines.

  • ✓ Pass Recommended

    Canonical URL (rel="canonical")

    Every page names its own trailing-slash address as canonical. The text-only copies point back to the full page.

  • ✓ Pass Recommended

    Favicons and app icons

    SVG favicon, a favicon.ico fallback (16, 32 and 48 px), an Apple touch icon, and 192, 512 and maskable icons in the web manifest, all from the Commonway mark.

  • ✓ Pass Recommended

    <meta name="theme-color">

    Paper (#fdfaf3) in light mode and ink (#141414) in dark mode.

  • ✓ Pass Recommended

    <meta name="color-scheme">

    light dark, so browser-drawn controls and scrollbars match either theme.

  • ✓ Pass Recommended

    Open Graph protocol

    og:title, description, url, type, site_name, locale and image (with alt text) on every page, plus Twitter card tags. Pages with an illustration use it; the rest share a 1200 x 630 Commonway card.

  • ✓ Pass Recommended

    Feed discovery with rel="alternate"

    The Blog feed (/rss.xml) is linked from every page's <head> and from the Link header.

  • ✓ Pass Recommended

    Feed content hygiene

    RSS 2.0 with absolute links, permalink GUIDs, publication dates, descriptions and a self link, built from the same list as the Blog index.

  • ✓ Pass Recommended

    Popover API

    The Display settings ("Aa") panel is a popover: it sits in the top layer and closes on Escape or a click outside, with focus returned to its button, all handled by the browser.

  • – Not applicable Optional

    WebSub: push notification for feeds

    The Blog posts rarely; a hub adds nothing.

  • ✓ Pass Recommended

    CSS anchor positioning

    The Display settings panel lines up with its button using anchor-name and anchor(), and flips sideways if it would run off-screen. A progressive enhancement: other browsers place it below the navbar.

  • ✓ Pass Recommended

    Balanced text wrapping

    text-wrap: balance on headings and captions, pretty on paragraphs and list items.

  • ✓ Pass Recommended

    CSS container queries

    The author photo block on The Commonway System page stacks according to its own width, not the window's.

  • ✓ Pass Optional

    Invoker commands

    The Aa button opens the Display settings popover with commandfor and command="toggle-popover". Browsers without invoker commands use a small click handler instead.

  • – Not applicable Optional

    _for-sale DNS records

    The domain is not for sale.

SEO

27 / 28 points (96%)

  • ✓ Pass Recommended

    robots.txt

    Served at /robots.txt with a Sitemap line. Only the search index's data files are disallowed.

  • ½ Partial Recommended

    XML sitemaps

    Generated at /sitemap.xml from every page at build time. Every <lastmod> is the build date rather than each page's own last change, which makes it a weak freshness signal.

  • – Not applicable Recommended

    Sitemap index files

    About 170 URLs, far below the 50,000 a single sitemap can hold.

  • ✓ Pass Optional

    Image and video sitemap extensions

    The sitemap lists each page's featured illustration with the image extension. The publication hosts no video.

  • ✓ Pass Recommended

    URL structure

    Lowercase, hyphenated, readable, organized by section (/patterns/collectors/default/), always with a trailing slash.

  • ✓ Pass Required

    Redirects (301/302/308)

    Live: http:// and www. go to https://commonwaysystem.org/ with 301s, addresses without a trailing slash 301 to the slash form, and the retired Commercial Arterial page 301s to Stroad. http://www. takes two hops.

  • ✓ Pass Recommended

    Server-side rendering

    Every page is prerendered to complete static HTML at build time.

  • ✓ Pass Avoid

    Soft 404s

    Live: unknown addresses return a real 404 status.

  • ✓ Pass Required

    Meta robots and X-Robots-Tag

    Every page states its robots rule: index, follow (with max-image-preview:large) for content pages, noindex for search, the error page and the text-only copies. Markdown copies carry X-Robots-Tag: noindex.

  • ✓ Pass Required

    Heading hierarchy

    One h1 per page and no skipped levels, checked with axe on all 165 pages in the 2026.09.26 accessibility audit.

  • ✓ Pass Recommended

    Internal linking

    A sidebar per section, Related patterns and Retrofit path links on pattern pages, previous/next links, a Site Map, and descriptive link text throughout. No orphan pages: the build warns if a page is missing from the navigation.

  • ✓ Pass Recommended

    Structured data (JSON-LD)

    Organization and WebSite on every page; TechArticle (with the Pattern ID as identifier), CollectionPage, AboutPage, Blog and BlogPosting per page type; author markup.

  • ✓ Pass Recommended

    Breadcrumbs

    BreadcrumbList structured data on every page below the homepage, built from the sidebar.

  • ✓ Pass Optional

    IndexNow

    Cloudflare Crawler Hints is on (2026.10.14). It sends IndexNow notifications to participating search engines (Bing, Yandex and others) when pages change, and hosts the key itself.

Accessibility

59.5 / 63 points (94%)

  • ✓ Pass Required

    Colour contrast

    axe-core reported no contrast failures on all 165 pages in light and dark mode, desktop and phone width (2026.09.26 audit). New pieces since then (search, Display settings, cookie notice, this page) were scanned the same way. Ratios are computed, not eyeballed, and recorded in the Brand Guide.

  • ✕ Fail Optional

    Automatic contrasting colour

    contrast-color() is not used; every text color is chosen and checked by hand.

  • ½ Partial Recommended

    Forced colours mode

    Badges, chips, cards and pills get outlines when Windows High Contrast (forced colors) replaces their fills; color swatches keep their true colors. Not yet tested in a real forced-colors session.

  • ✓ Pass Required

    Image alt text

    Every image has alt text, or alt="" when it is decorative and a text label carries its meaning.

  • ✓ Pass Required

    Form labels

    The search box, Media filters and every Display setting have visible, programmatically tied labels.

  • ½ Partial Required

    Keyboard navigation

    Every control is a real link, button or input in a logical order, menus and dialogs close with Escape, and search has Ctrl/Cmd+K. A full keyboard-only walkthrough by a person has not been done yet.

  • ✓ Pass Required

    Visible focus indicators

    A teal focus ring on every interactive element (well above 3:1 on both themes), plus an optional thicker yellow ring in Display settings.

  • ✓ Pass Recommended

    Focus not obscured

    scroll-padding keeps focused elements clear of the sticky navbar, the phone "On this page" bar and the cookie notice.

  • ✓ Pass Required

    Skip links

    "Skip to main content" is the first focusable element on every page and moves focus into <main>.

  • ✓ Pass Recommended

    The inert attribute

    The search dialog is a modal <dialog>, which makes the rest of the page inert. On phones, the page behind the open menu drawer is marked inert.

  • ✓ Pass Required

    Semantic HTML and landmarks

    header, labelled nav and aside regions, main and footer navigation on every page.

  • ✓ Pass Recommended

    ARIA: first rule of ARIA

    Native elements first (button, details, dialog, popover); ARIA only for names and states. axe ARIA checks pass.

  • ✓ Pass Required

    Descriptive link text

    Links name their destination; no "click here". External links add "(opens in new tab)" for screen readers.

  • ✓ Pass Avoid

    Empty links and buttons

    No unnamed links or buttons (axe link-name and button-name pass); icon-only buttons have labels.

  • – Not applicable Required

    Accessible form errors

    The publication has no forms that submit or can fail validation.

  • ✓ Pass Recommended

    Status messages

    Search result counts are announced through a status region.

  • – Not applicable Recommended

    Accessible authentication

    No accounts or sign-in.

  • – Not applicable Recommended

    Redundant entry

    No multi-step processes.

  • ✓ Pass Recommended

    Consistent help

    Every page's footer links to Report a Problem, the Site Map and the policies, in the same order.

  • ✓ Pass Required

    Document and parts language

    English throughout, declared on <html>.

  • ✓ Pass Required

    Reduced motion

    Under prefers-reduced-motion the hero is still, page transitions are skipped and smooth scrolling is off. The hero animation also has a Pause button for everyone.

  • ✓ Pass Avoid

    Accessibility overlays

    No overlay widget. Display settings are built into the publication and change its own CSS.

  • – Not applicable Required

    Captions and transcripts

    The publication hosts no audio or video. The Media Gallery links out to each creator's own page.

  • ✓ Pass Required

    Accessible data tables

    Tables use real header cells; the guidance tables also have row headers. Wide tables scroll inside their own box instead of changing the table's display.

  • ✓ Pass Required

    Touch target size

    Targets are at least 24 x 24 CSS pixels; citation badges keep a small look with a 24px hit area.

  • – Not applicable Recommended

    Dragging movements

    Nothing on the publication needs dragging.

  • ✓ Pass Recommended

    Hidden until found

    Collapsed content uses native <details>, which browsers open for find-in-page. Simplified view opens every one.

  • ✓ Pass Recommended

    Mobile-friendly form inputs

    The search box is type="search" with enterkeyhint="search" and no autocorrect.

  • ✓ Pass Recommended

    Native interactive elements

    Every control is a real <button>, <a>, <input>, <details> or <dialog>.

  • ✓ Pass Recommended

    CSS state and relational selectors

    :has(), :focus-visible and :focus-within style the Display settings and search controls by state.

Security

32 / 38 points (84%)

  • ✓ Pass Required

    HTTPS and TLS

    Live: TLS through Cloudflare (Full strict to Netlify), and every http:// address redirects to https://.

  • ✓ Pass Required

    HSTS (Strict-Transport-Security)

    max-age=31536000 with includeSubDomains (includeSubDomains added in this release). Not on the browser preload list.

  • ✓ Pass Recommended

    Mixed content and upgrade-insecure-requests

    Pages load nothing over http://, and the Content Security Policy includes upgrade-insecure-requests.

  • ½ Partial Recommended

    Content Security Policy (CSP)

    A CSP limits scripts, images and connections to the publication itself plus two named outside sources (Google Analytics after consent and Cloudflare's Web Analytics beacon), with frame-ancestors, object-src 'none' and base-uri. It still allows inline scripts, which the static framework output needs.

  • ✕ Fail Recommended

    Reporting API (Reporting-Endpoints)

    No reporting endpoint. Cloudflare adds its own network-error reporting, which reports to Cloudflare, not to the publication.

  • ✓ Pass Recommended

    /.well-known/security.txt

    Published with an email contact, the Report a Problem page, an expiry date and a canonical address. The expiry (2027-10-01) needs renewing each year.

  • ✓ Pass Required

    X-Content-Type-Options: nosniff

    Sent on every response.

  • ✓ Pass Required

    Clickjacking protection (frame-ancestors / X-Frame-Options)

    CSP frame-ancestors 'self' and X-Frame-Options: SAMEORIGIN.

  • – Not applicable Recommended

    Fetch Metadata request headers

    A static publication with no server code to read them.

  • ✓ Pass Recommended

    Cross-origin isolation (COOP / COEP / CORP)

    Cross-Origin-Opener-Policy and Cross-Origin-Resource-Policy are same-origin, and Cross-Origin-Embedder-Policy is credentialless, so pages are cross-origin isolated. Checked on a local build with the real headers: search, every image and Google Analytics after Accept still load. The Cloudflare beacon is added at the edge, so it can only be confirmed live.

  • ✓ Pass Recommended

    Referrer-Policy

    strict-origin-when-cross-origin.

  • ✓ Pass Recommended

    Permissions-Policy

    Camera, microphone, location, payment, USB, motion sensors and ad-interest features are all off.

  • – Not applicable Recommended

    Subresource Integrity (SRI)

    No third-party script or stylesheet tags in the HTML. Google Analytics is added by script only after consent, and Google changes that file without notice, so it can't be pinned with a hash.

  • ✕ Fail Optional

    Digest Fields (Content-Digest, Repr-Digest and Unencoded-Digest)

    Not used.

  • ✕ Fail Recommended

    Trusted Types

    Not enforced.

  • ✓ Pass Avoid

    X-XSS-Protection

    Not sent.

  • ✓ Pass Required

    Cookie attributes: Secure, HttpOnly, SameSite

    The publication sets no cookies of its own. Google Analytics sets its cookies only after consent, with SameSite=Lax and Secure, and they are deleted if consent is withdrawn. Settings live in the browser's local storage.

  • – Not applicable Optional

    Clear-Site-Data

    No accounts, so no sign-out.

  • ✓ Pass Recommended

    DNS CAA records

    Live since 2026.10.14: CAA records limit certificates to the authorities Cloudflare uses (Let's Encrypt, Google Trust Services, SSL.com, Sectigo, DigiCert), for the domain and wildcards. Let's Encrypt also covers Netlify's certificate behind Cloudflare.

  • ✓ Pass Optional

    DNSSEC

    Live since 2026.10.14: the zone is signed by Cloudflare and the DS record is published at the .org registry, so validating resolvers return authenticated answers (the ad flag).

Well-Known URIs

6 / 6 points (100%)

  • ✓ Pass Recommended

    Well-known URIs

    security.txt, gpc.json, api-catalog, traffic-advice, tdmrep.json, ai-catalog.json and the Agent Skills index are published under /.well-known/.

  • – Not applicable Optional

    /.well-known/change-password

    No accounts.

  • – Not applicable Optional

    /.well-known/webauthn

    No passkeys.

  • – Not applicable Optional

    /.well-known/openid-configuration

    Not an identity provider.

  • – Not applicable Optional

    /.well-known/oauth-authorization-server

    Not an OAuth server.

  • – Not applicable Optional

    /.well-known/oauth-protected-resource

    No protected API.

  • ✓ Pass Optional

    /.well-known/gpc.json

    Published, and the cookie notice treats a Global Privacy Control signal as Decline.

  • ✓ Pass Recommended

    /.well-known/api-catalog

    A linkset listing the sitemap, the Blog feed, the llms files, the Agent Skills index, the AI Catalog, the OKF bundle and the schemamap. The publication has no APIs of its own.

  • – Not applicable Optional

    /.well-known/webfinger

    Not a federated service.

  • – Not applicable Optional

    /.well-known/apple-app-site-association

    No iOS app.

  • – Not applicable Optional

    /.well-known/assetlinks.json

    No Android app.

  • – Not applicable Optional

    /.well-known/nodeinfo

    Not a federated service.

  • ✓ Pass Optional

    /.well-known/traffic-advice

    Published, allowing privacy-preserving prefetch proxies.

Agent Readiness

26 / 26 points (100%)

  • ✓ Pass Recommended

    Agent readiness

    Stable URLs, JSON-LD (also per page as .jsonld), the llms files, a Markdown copy of every page, an OKF bundle, an Agent Skill, an AI Catalog, explicit AI-crawler rules and discovery Link headers are all in place.

  • ✓ Pass Recommended

    /llms.txt

    Generated from every page's frontmatter, grouped by section, each link pointing at the page's Markdown copy.

  • ✓ Pass Optional

    /llms-full.txt

    The whole guidebook as one Markdown file, regenerated on every build.

  • ✓ Pass Recommended

    Per-page Markdown source endpoints

    Every page is also available as Markdown at its address plus .md (for example /patterns/collectors/default.md and /index.md), advertised with <link rel="alternate" type="text/markdown">.

  • ✓ Pass Recommended

    robots.txt for AI crawlers

    AI crawlers (GPTBot, ClaudeBot, Google-Extended, PerplexityBot, CCBot and others) are named and allowed. The guidebook is public, and being learned from and cited is part of its purpose.

  • ✓ Pass Optional

    Content Signals in robots.txt

    search=yes, ai-input=yes, ai-train=yes.

  • ✓ Pass Optional

    TDM reservation (TDMRep)

    /.well-known/tdmrep.json states that no text and data mining rights are reserved, matching ai-train=yes.

  • – Not applicable Optional

    Web Bot Auth: verifiable bot identity

    The publication runs no bots.

  • – Not applicable Optional

    auth.md: agent registration instructions

    No accounts or agent-facing API.

  • ✓ Pass Required

    Stable URLs

    Addresses don't change once published; a retired page gets a 301 to its replacement, and Pattern IDs are never reused.

  • ✓ Pass Recommended

    Structured data for agents

    Typed JSON-LD on every page, including each pattern's Pattern ID.

  • ✓ Pass Recommended

    Machine-readable formats

    Markdown and JSON-LD copies of every page, text-only copies, an OKF bundle, sitemap.xml with images, schemamap.xml, an RSS feed, the llms files and an Agent Skill.

  • ✓ Pass Recommended

    HTTP Link headers for discovery

    Every response carries Link headers for the sitemap, feed, llms.txt, api-catalog, AI Catalog and Agent Skills index.

  • – Not applicable Optional

    MCP and tool discovery

    No tools to expose.

  • – Not applicable Optional

    A2A agent cards

    No agents.

  • ✓ Pass Recommended

    Agent Skills discovery

    /.well-known/agent-skills/index.json lists one skill (commonway-system/SKILL.md), with a sha256 digest computed at build time. It explains the Pattern ID scheme, statuses and evidence tiers, and where to read each page.

  • ✓ Pass Optional

    DNS for AI Discovery (DNS-AID)

    Live since 2026.10.14: an HTTPS record at _index._agents.commonwaysystem.org (priority 1, target commonwaysystem.org, alpn h3,h2, port 443), signed with DNSSEC and validated by public resolvers. No _mcp or _a2a records, since the publication runs neither.

  • ✓ Pass Optional

    Agentic Resource Discovery (ARD)

    /.well-known/ai-catalog.json lists the two agent resources the publication actually has, the Agent Skill and the OKF bundle, each with representative queries. Found through an Agentmap line in robots.txt and a rel="ai-catalog" Link header. There is no MCP server or agent to list.

  • – Not applicable Optional

    NLWeb: conversational interface discovery

    No conversational endpoint.

  • – Not applicable Optional

    WebMCP: browser-native tools for agents

    No in-page tools for agents.

  • ✓ Pass Optional

    Open Knowledge Format (OKF) bundle

    The whole guidebook as an OKF v0.2 bundle, regenerated every build: one concept per page with typed front matter (patterns carry their Pattern ID and status), each page's references as sources with their evidence tier, one mirrored concept per cited work (about 300), folder indexes and a change log. Browsable at /okf/index.md or as one download, /okf.tar.gz; linked from llms.txt, the AI Catalog and the api-catalog.

  • ✓ Pass Optional

    Schemamap: discoverable JSON-LD endpoints per resource

    Every page's structured data is also published on its own at its address plus .jsonld (for example /patterns/collectors/default.jsonld), identical to what the page embeds, and indexed with its schema.org types in /schemamap.xml. Each page links to both from its <head>.

Performance

45 / 49 points (92%)

  • ✓ Pass Required

    Core Web Vitals (LCP, INP, CLS)

    Lighthouse lab test on the live publication (mobile, simulated slow 4G, two runs each, 2026.10.14) on the homepage, a pattern page, Design Speed and this page: LCP 1.0 to 1.3 s, CLS 0.03 to 0.09, no blocking time, performance scores 98 to 100. Before this release the same pages measured LCP 3.6 to 4.9 s. Lab data only; no field (Chrome UX Report) data yet.

  • ✓ Pass Required

    Image optimisation

    Images are served as WebP at the size they're shown: 160 and 480 px copies for cards and search results, 768 and 1280 px copies through srcset for the Foundations diagrams (a fifth of the original PNGs' weight). Images carry width and height or an aspect ratio, so nothing shifts as they load. Full-size PNG originals are only used for social previews.

  • ✓ Pass Recommended

    Lazy loading images, iframes, and video

    Card, gallery and diagram images use loading="lazy" and decoding="async". The homepage hero is a canvas, so no image competes for first paint.

  • ✓ Pass Recommended

    Preload, prefetch, preconnect

    Module preloads for each page's code, data preloading on hover, and Speculation Rules prefetch. Everything on the critical path is same-origin, so no preconnect is needed.

  • ✓ Pass Optional

    103 Early Hints

    Early Hints is on in Cloudflare (2026.10.14). Cloudflare sends a 103 response from the preload and preconnect Link headers it has seen for a page; the publication's critical files are all same-origin and fingerprinted, so there is little to hint today.

  • ✓ Pass Required

    Cache-Control headers

    Fingerprinted code and styles are cached for a year as immutable; images for a month; HTML is revalidated on every visit so updates show at once.

  • ✓ Pass Recommended

    Vary: the cache key contract

    Live: Vary: Accept-Encoding on compressed responses.

  • ½ Partial Recommended

    Conditional requests (ETag, Last-Modified, 304)

    Static files carry ETags. HTML pages come through Cloudflare without an ETag or Last-Modified, so they always return in full.

  • ✓ Pass Recommended

    No-Vary-Search response header

    No-Vary-Search: params, since a query string never changes a static page. A prefetched /search/ or /media/ page is reused whatever its query.

  • ✓ Pass Required

    Compression (gzip, brotli, zstd)

    Live: Brotli for HTML, CSS, JavaScript and text.

  • ✓ Pass Recommended

    Web font loading

    All fonts are self-hosted variable files with font-display: swap and per-language subsets. The three optional reading fonts only download if a reader picks one.

  • ✓ Pass Recommended

    Critical CSS and render-blocking resources

    Every page's styles are inlined into its HTML, so no stylesheet request blocks first paint; Lighthouse reports no render-blocking resources. Fonts load without blocking text (font-display: swap).

  • ✓ Pass Recommended

    Script loading: defer, async, module

    All code loads as ES modules (deferred by default). The one small inline script applies saved display settings before first paint, on purpose.

  • ✓ Pass Recommended

    HTTP/2 and HTTP/3

    Live: HTTP/2, with HTTP/3 advertised.

  • ✓ Pass Avoid

    HTTP/1.1 workarounds: sharding, sprites, and bundling

    No domain sharding or image sprites; code is split per page.

  • ✓ Pass Recommended

    Speculation Rules

    Same-site links are prefetched on moderate intent (hover or pointer-down). Markdown copies, text-only pages and the search index are excluded.

  • ✓ Pass Recommended

    Resource hints overview

    Module preloads and Speculation Rules only; nothing is hinted that a page doesn't use.

  • ✓ Pass Optional

    View Transitions

    Moving between pages cross-fades with the View Transitions API. Skipped under reduced motion and in Simplified view.

  • ✓ Pass Recommended

    Back/forward cache (BFCache)

    No unload handlers and no Cache-Control: no-store, so pages are eligible. Not confirmed in a browser's BFCache test panel.

  • ✓ Pass Optional

    Visibility-aware rendering

    The homepage hero animation stops drawing while it is scrolled out of view or the tab is hidden.

  • ✕ Fail Optional

    CSS containment

    Not used.

  • ✕ Fail Optional

    Scroll-driven animations

    Not used.

  • ✓ Pass Recommended

    Scrollbar gutter

    scrollbar-gutter: stable on <html>, so pages don't shift when a scrollbar appears.

  • ✓ Pass Recommended

    Dynamic viewport units (dvh, svh, lvh)

    The Display settings panel sizes itself with dvh (100vh as a fallback), so mobile toolbars don't cut it off.

  • ✕ Fail Optional

    Compression Dictionary Transport

    Not used.

  • – Not applicable Optional

    Server-Timing header

    No server code to time.

Privacy

13 / 14 points (93%)

  • ✓ Pass Required

    Privacy policy

    The Privacy Policy is linked from every page's footer and names every service involved.

  • ✓ Pass Required

    Cookie consent

    Google Analytics loads only after a reader chooses Accept. Accept and Decline look the same, nothing is pre-selected, and the footer's "Cookie settings" reopens the choice.

  • ✓ Pass Recommended

    Global Privacy Control (GPC)

    A GPC signal counts as Decline unless the reader opts in from Cookie settings.

  • ½ Partial Recommended

    Third-party scripts and privacy

    Google Analytics loads only after consent. Cloudflare adds its cookieless Web Analytics beacon to every page. Fonts, channel icons and preview images are all hosted by the publication itself. Both outside services are named in the Privacy Policy.

  • – Not applicable Optional

    Storage Access API

    No embedded cross-site content that needs cookies.

  • ✓ Pass Recommended

    Privacy-respecting analytics

    Cloudflare Web Analytics gives cookieless, aggregate page counts for every visitor; Google Analytics, which uses cookies, runs only for readers who accept it.

  • ✓ Pass Recommended

    Data minimisation

    No accounts, forms or tracking beyond consented analytics. Search runs in the browser and sends nothing anywhere. Settings stay in the reader's browser.

Resilience

9 / 12 points (75%)

  • ✓ Pass Required

    Custom error pages (404, 500)

    A custom "Page not found" page with the normal navigation, a search link and links to every section, served with a real 404 status. It needs JavaScript to show its content; without it the navigation still appears.

  • – Not applicable Recommended

    Maintenance pages and 503

    Static hosting with atomic deploys: there is never a maintenance window.

  • ✓ Pass Recommended

    Graceful degradation when JavaScript fails

    Every page's content, navigation and links are in the prerendered HTML. Search, Display settings and filters need JavaScript, and every page has a text-only copy.

  • ✕ Fail Optional

    Offline support and service workers

    No service worker.

  • ✓ Pass Recommended

    Web app manifest

    manifest.webmanifest with name, description, colors and icons, including a maskable one.

  • ✕ Fail Recommended

    Monitoring and uptime

    No external uptime monitoring yet.

  • – Not applicable Optional

    Deprecation and Sunset

    No API.

  • ✓ Pass Recommended

    Redirect-By header

    Live since 2026.10.14: every redirect carries Redirect-By: Netlify (http:// to https://, www. to the bare domain, missing trailing slashes, and retired pages). Netlify issues the redirects but can't add headers to them, so a Cloudflare response header rule adds it to 301, 302, 307 and 308 responses.

Internationalisation

11 / 11 points (100%)

  • – Not applicable Recommended

    International URL structure

    English only.

  • – Not applicable Recommended

    hreflang for language and regional URLs

    English only.

  • – Not applicable Recommended

    Localised page metadata

    English only.

  • – Not applicable Optional

    hreflang in XML sitemaps

    English only.

  • ✓ Pass Avoid

    Avoid automatic IP-based language redirects

    No such redirects.

  • ✓ Pass Required

    lang attribute on inline content

    No passages in other languages. Dutch terms such as "woonerf" are loanwords used in English.

  • ✓ Pass Optional

    translate attribute for untranslatable content

    Pattern IDs, Retrofit Strategy IDs and the Commonway System name in the footer are marked translate="no", so a translated page keeps them intact.

  • – Not applicable Recommended

    Language switcher

    English only.

  • – Not applicable Recommended

    RTL and bidirectional text

    No right-to-left content.

  • – Not applicable Optional

    Writing modes and CJK line breaking

    No vertical or CJK text.

  • ✓ Pass Recommended

    Locale-aware content

    Dates are written out ("October 14, 2026") and speeds are in mph, matching the US guidance the publication cites.

  • ✓ Pass Recommended

    Plural rules and grammatical number

    Generated counts use the right form ("1 result", "2 results").

  • – Not applicable Optional

    Internationalised Domain Names (IDN)

    ASCII domain.

How to read this

Required and Avoid items are worth 3 points, Recommended items 2, and Optional items 1. A pass earns full points, a partial earns half, and a fail earns none. For Avoid items, a pass means the publication does not do the thing the checklist warns against. Items that don't apply, or haven't been reviewed yet, are left out of the score.

This is a self-assessment, made with Claude (an AI assistant, see the AI Policy) from the publication's source code, its built pages, and the live site's own responses for server-level items like HTTPS, redirects and compression. It is not an independent audit and doesn't claim certification of any kind. Accessibility results come from automated scans plus a manual review; what hasn't been tested yet is listed on the Accessibility Policy page.

Spotted something wrong here? Report a Problem.