A91

AXIOM Audit Report

www.clocktowerassoc.com (Post-AXIOM)

Grade AAgent-Ready

Previous: 72/100 (Grade C) — +19 points

Date:
February 19, 2026
Auditor:
Clocktower & Associates (self-audit)

Pages: /, /services, /axiom, /axiom/scoring-framework, /about, /contact

Dimension Scorecard

Content Survivability

95/ 100+3
Weight: 25%Weighted: 23.8Pass

Structural Legibility

92/ 100+20
Weight: 20%Weighted: 18.4Pass

Interactive Manifest Clarity

90/ 100+12
Weight: 20%Weighted: 18.0Pass

Data Extractability

85/ 100+55
Weight: 15%Weighted: 12.8Pass

Navigation Traversability

92/ 100+24
Weight: 10%Weighted: 9.2Pass

Agent Response Fitness

88/ 100+12
Weight: 10%Weighted: 8.8Pass

Findings Summary — 11 Total

Critical0High0Medium3Low6Info2

What Changed Between Audits

This audit follows an AXIOM Levels 1–3 implementation on the axiom-implementation branch. The changes targeted every finding from the previous audit's Top 5 Priority Actions, plus additional AXIOM markup. Key implementation items:

#ChangeFiles Touched
1Created AXIOM manifest (axiom.json) with site metadata, capabilities, navigation hierarchy, agent policy, and technical infopublic/axiom.json (new), Layout.tsx
2Rebuilt sitemap.xml — removed 28 phantom URLs, added 7 missing pages, updated all lastmod datespublic/sitemap.xml
3Added JSON-LD structured data — Service with OfferCatalog on /services, BreadcrumbList on spec pagesservices.tsx, SpecLayout.tsx
4Removed bogus SearchAction from WebSite schema (site has no /search endpoint)StructuredData.tsx
5Added ARIA state attributes — aria-expanded, aria-controls on mobile menu; aria-pressed on dark mode toggle; aria-hidden on decorative SVGsHeader.tsx, DarkModeToggle.tsx
6Removed 3 dead href="#" social links from footerFooter.tsx
7Fixed dual h1 on /axiom — markdown headings downgraded via ReactMarkdown components propaxiom/index.tsx
8Added data-axiom-page-type and data-axiom-page-purpose to Layout wrapperLayout.tsx, all page files
9Added data-axiom-role, data-axiom-priority section-level annotations across all pagesservices.tsx, axiom/index.tsx, about.tsx, contact.tsx, index.tsx
10Added data-axiom-action and data-axiom-intent on CTAs and navigation linksaxiom/index.tsx, services.tsx, Header.tsx
11Fixed Button component to pass data-* attributes through to Next.js Link variantButton.tsx

Dimension 1: Content Survivability — 95/100 (Weight: 25%)

Core question: What percentage of the site's meaningful content remains visible and functional without JavaScript execution?

Test Results

All six pages serve fully pre-rendered HTML. Raw curl response contains complete semantic content.

PageRaw HTML SizeSemantic ElementsRendering Method
/20,680 bytesh1, h2, h3, p, section, nav, header, footer, mainAuto-static export
/services22,017 bytesh1, h2, h3, p, section, nav, header, footer, mainAuto-static export
/axiom58,264 bytesh1, h2, h3, p, section, nav, header, footer, mainSSG (getStaticProps)
/axiom/scoring-framework96,328 bytesh1, h2, h3, p, section, nav, header, footer, main, tableSSG (getStaticProps)
/about23,011 bytesh1, h2, h3, p, section, nav, header, footer, mainAuto-static export
/contact15,645 bytesh1, h2, p, section, nav, header, footer, main, formAuto-static export

Navigation Without JavaScript

All navigation links use real <a href> tags with valid paths. Zero href="#" links on any page.

PageTotal LinksReal hrefshref="#" Placeholders
/20200
/services20200
/axiom25250
/axiom/scoring-framework21210
/about18180
/contact18180

Findings

#FindingSeverityStatus
CS-1<noscript> tags exist but are empty — no fallback messagingLowUnchanged (not needed with full SSG)
CS-2Cloudflare email obfuscation via data-cfemail — requires JS to decodeInfoUnchanged (Vercel deployment bypasses Cloudflare)

Score Justification

≥95% of content present in initial HTML on all pages. Full SSR/SSG. All navigation uses real <a href> tags. Zero dead placeholder links (was 3 per page in previous audit). Minor deduction for empty <noscript> tags, though SSG makes them unnecessary.

Previous: 92 → New: 95 (+3, dead link removal)


Dimension 2: Structural Legibility — 92/100 (Weight: 20%)

Core question: How easily can an agent identify the core layout — navigation, main content, sidebar, footer — directly from the DOM structure?

Landmark Coverage

Element//services/axiom/about/contact
<header>11111
<nav>11111
<main>11111
<footer>11111
<section>23551
Breadcrumb <nav>1 (/framework, /axiom-specification)

Heading Hierarchy

Clean sequential hierarchy on all pages including /axiom (previously broken).

/ (Homepage) — Clean

h1: Building the Future Through Innovation
  h2: What We Do
    h3: Custom Software Development
    h3: Cloud Infrastructure & DevOps
    h3: Technology Consulting
  h2: Ready to Transform Your Business?
  h2: Company [footer]
  h2: Developer Tools [footer]

/axiom — Fixed (previously had dual h1)

h1: The Agentic Web Is Here. Is Your Site Ready?
  h2: Two Frameworks. One Problem.
    h3: AXIOM
    h3: AXIOM
  h2: Six Dimensions of Agent Readiness
    h3: Content Survivability
    h3: Structural Legibility
    ...
  h2: The Agentic Web: Why Your Website Is...    ← was h1, now h2
    h3: A Business Case for Agent-Ready...        ← was h2, now h3
    ...
  h2: Read the Technical Specifications
  h2: Is Your Infrastructure Agent-Ready?

ARIA Attributes

AttributeCountElements
aria-hidden="true"11Decorative SVG icons across all pages
aria-pressed2Dark mode toggle button (1 per theme state)
aria-label2"Breadcrumb" on spec page nav elements
aria-expanded1Mobile menu toggle button
aria-controls1Mobile menu button → id="mobile-menu"

Previous audit: zero ARIA state attributes site-wide.

Semantic-to-Generic Ratio

PageDiv CountSemantic CountRatio (Semantic:Div)
/1.6:1
/services1.1:1
/axiom0.4:1 (very semantic)
/about0.9:1

All pages well above the 30% threshold for the 90+ scoring band.

Findings

#FindingSeverityStatus
SL-1Footer <h2> headings ("Company", "Developer Tools") pollute heading outline on every pageLowUnchanged
SL-2No <article> or <aside> elements used anywhereLowUnchanged
SL-3Multiple <section> elements without aria-label (except those with data-axiom-role)LowImproved (AXIOM roles provide partial disambiguation)

Score Justification

Full landmark coverage. Clean heading hierarchy on all pages (dual h1 fixed). lang="en" set on <html>. ARIA state attributes on all stateful controls (aria-expanded, aria-pressed, aria-controls). Semantic ratios above 30% site-wide. Breadcrumb navigation with aria-label on spec pages. Minor deductions for footer heading pollution and missing aria-label on some <section> elements.

Previous: 72 → New: 92 (+20)


Dimension 3: Interactive Manifest Clarity — 90/100 (Weight: 20%)

Core question: Can an agent find and invoke the site's key actions — CTAs, forms, interactive controls — through the accessibility tree?

Native Interactive Elements

100% of interactive elements use native HTML elements. Zero custom <div> click handlers.

Element//services/axiom/about/contact
<button>21112
<a href>2020251818
<input>20002
<textarea>10001

CTA Discoverability

All primary CTAs appear in the accessibility tree with descriptive labels:

CTALabelPagesAXIOM Annotation
Contact link (header)"Contact Us"Alldata-axiom-action="contact"
Primary CTA"Start a Conversation"/, /servicesdata-axiom-action="contact"
AXIOM CTA"Request an AXIOM Audit"/axiom (×2)data-axiom-action="contact"
Framework link"Read the AXIOM Scoring Framework"/axiomdata-axiom-action="navigate" data-axiom-intent="Read AXIOM scoring framework"
Spec link"Read the AXIOM Specification"/axiomdata-axiom-action="navigate" data-axiom-intent="Read AXIOM implementation specification"
Service link"Learn about AXIOM"/services

ARIA State Communication

ControlAttributeBehavior
Mobile menu buttonaria-expanded={true/false}Toggles with menu open/close
Mobile menu buttonaria-controls="mobile-menu"Points to menu container
Dark mode togglearia-pressed={true/false}Reflects current theme state
Decorative SVGsaria-hidden="true"Excluded from accessibility tree

Dead Links

Zero href="#" links across all pages. Previous audit found 3 per page (social media placeholders in footer). These were removed entirely.

Findings

#FindingSeverityStatus
IMC-1"Learn about AXIOM" link on /services lacks data-axiom-action annotationLowNew
IMC-2Form submit button uses <button type="submit"> — correct but no data-axiom-action annotationLowNew (minor)
IMC-3"Learn More" generic link text on homepage heroLowUnchanged

Score Justification

All interactions use native elements. 100% accessible name coverage. ARIA state attributes on all stateful controls. Zero dead links (was 3 per page). AXIOM action annotations provide explicit machine-readable intent on primary CTAs. Minor deductions for a few CTAs missing AXIOM annotations and one generic "Learn More" link text.

Previous: 78 → New: 90 (+12)


Dimension 4: Data Extractability — 85/100 (Weight: 15%)

Core question: How well is business-critical data structured in semantic HTML that agents can accurately parse and extract?

Structured Data (JSON-LD)

Schema TypePagesStatus
OrganizationAll pagesPresent — name, url, logo, description, contactPoint
WebSiteAll pagesPresent — name, url, description. SearchAction removed (no /search endpoint).
Service + OfferCatalog/servicesNew — "Web Audit Services" with 4 offers (Accessibility, SEO, AXIOM, GEO)
BreadcrumbList/axiom/scoring-framework, /axiom/build-specNew — 3-level breadcrumb hierarchy

Previous audit: zero JSON-LD on any page.

AXIOM Manifest

PropertyValue
Location/axiom.json (linked via <link rel="axiom-manifest"> in <head>)
Version3.0
Capabilities2 actions: Contact Form (form_submit), Request AXIOM Audit (link_follow)
Navigation7 sections with children, full site hierarchy
Agent Policytier2_allowed: true, tier3_allowed: true, crawl_delay: 1, max_requests_per_minute: 60
Technicalrendering: "hybrid", spa_framework: "Next.js", content_survivability: "full"

AXIOM Page-Level Markup

Pagedata-axiom-page-typedata-axiom-page-purpose
/homepage
/serviceslanding"Browse audit service offerings and request a consultation"
/axiomlanding"Learn about the AXIOM scoring framework and AXIOM build specification for agent-ready web infrastructure"
/axiom/scoring-frameworkdocumentation
/axiom/build-specdocumentation
/aboutlanding
/contactcontact"Send a message to Clocktower and Associates"

AXIOM Section-Level Markup

PageSectiondata-axiom-roledata-axiom-priority
/CTA sectioninteractivehigh
/servicesServices gridprimary-contentcritical
/servicesCTA sectioninteractivehigh
/axiomOverview sectionprimary-contenthigh
/axiomBusiness caseprimary-contentcritical
/axiomCTA sectioninteractivehigh
/aboutCompany overviewprimary-contentcritical
/aboutCTA sectioninteractivehigh
/contactContact form sectioninteractivecritical

Findings

#FindingSeverityStatus
DE-1Zero <time datetime> elements — dates are not machine-readableMediumUnchanged
DE-2Tables on /axiom/scoring-framework lack <caption> and scope attributesMediumUnchanged
DE-3No <dl>/<dt>/<dd> usage for service attribute data on /servicesLowUnchanged
DE-4data-axiom-page-purpose missing on / and /aboutLowNew
DE-5Organization schema sameAs array is empty (no social profile URLs)InfoUnchanged

Score Justification

Massive improvement from the previous audit. Four JSON-LD schema types (Organization, WebSite, Service+OfferCatalog, BreadcrumbList) provide comprehensive structured data. The AXIOM manifest at /axiom.json gives agents a complete machine-readable index of the site's structure, capabilities, and policy. Page-level and section-level AXIOM attributes provide semantic context throughout the DOM. Remaining deductions for missing <time> elements, incomplete table metadata, and a few pages without data-axiom-page-purpose.

Previous: 30 → New: 85 (+55)


Dimension 5: Navigation Traversability — 92/100 (Weight: 10%)

Core question: Can an agent systematically explore the site via static links without requiring complex JavaScript interactions?

Sitemap Analysis

Location: /sitemap.xml (referenced in robots.txt) Total URLs: 33 Last modified: 2026-02-19 (all pages — current)

CategoryURLsCount
Core pages/, /services, /about, /contact4
AXIOM/axiom, /axiom/scoring-framework, /axiom/build-spec3
Showcase/showcase, /showcase/johnny, /showcase/repram, /showcase/termlife4
Developer Tools/tools/*22

Phantom URLs: 0 (was 28 in previous audit) Missing pages: 0 (was 7 in previous audit) Stale dates: 0 (was 43 pages with 8-month-old lastmod)

Breadcrumbs

PageBreadcrumb NavBreadcrumbList JSON-LD
/axiom/scoring-frameworkYes (<nav aria-label="Breadcrumb">)Yes (Home → AXIOM → AXIOM Scoring Framework v3.0)
/axiom/build-specYes (<nav aria-label="Breadcrumb">)Yes (Home → AXIOM → AXIOM Specification v3.0)
All other pagesNoNo

Previous audit: breadcrumb UI existed but no BreadcrumbList JSON-LD.

Link Coverage From Homepage

DestinationReachableClicks
/servicesHeader nav1
/axiomHeader nav1
/tools/*Header nav → Tools hub1
/aboutHeader nav1
/contactHeader nav + hero CTA1
/showcaseFooter link1
/axiom/scoring-framework/axiom → link2
/axiom/build-spec/axiom → link2

Maximum click depth: 2 (spec pages via /axiom).

AXIOM Navigation Index

The axiom.json manifest provides a parallel machine-readable navigation hierarchy with 7 top-level sections and nested children, giving agents an alternative discovery path independent of DOM link crawling.

robots.txt

User-agent: *
Disallow: /api/
Disallow: /_next/
Disallow: /admin/
Allow: /images/
Allow: /static/
Crawl-delay: 1
Sitemap: https://www.clocktowerassoc.com/sitemap.xml

No AI-specific bot blocks. All major agent crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended) are allowed.

Findings

#FindingSeverityStatus
NT-1Breadcrumbs only on 2 spec pages — no breadcrumbs on /services, /about, /contactMediumUnchanged
NT-21 "Learn More" generic link text on homepageLowUnchanged
NT-3robots.txt allows all crawlers, including AI agentsPassUnchanged
NT-4Maximum click depth from homepage: 2PassUnchanged
NT-5Zero href="#" links site-widePassFixed (was 3 per page)
NT-6AXIOM manifest provides complete site navigation hierarchyPassNew

Score Justification

Clean sitemap with zero phantom URLs and current dates. All navigation uses static <a href> links. Breadcrumbs with BreadcrumbList JSON-LD on spec pages. Zero dead links. Permissive robots.txt. AXIOM manifest provides a complete machine-readable navigation index. Maximum click depth of 2. Minor deduction for breadcrumbs only on 2 of 7 page types and one generic link text.

Previous: 68 → New: 92 (+24)


Dimension 6: Agent Response Fitness — 88/100 (Weight: 10%)

Core question: When the site's content is read as plain text — stripped of all visual formatting — does it tell a coherent, useful story that an agent can summarize accurately?

Plain Text Stream (Homepage, First 300 Characters)

Building the Future Through Innovation
Clocktower and Associates delivers enterprise-grade technology solutions,
custom software development, and strategic consulting to help your
business thrive in the digital age.
Learn More
Get in Touch
What We Do

Value proposition within the first 200 characters. Navigation chrome is minimal. Content ordering follows a logical narrative: headline → proposition → CTA → services → CTA → contact form.

Plain Text Stream (/axiom, First 400 Characters)

AXIOM SCORING FRAMEWORK & BUILD SPECIFICATION
The Agentic Web Is Here.
Is Your Site Ready?
AI agents are browsing the web on behalf of your customers right now.
When they visit your site, they don't see your design, your layout, or
your brand. They see your HTML. If your HTML is an empty shell, the agent
moves on. Your competitor gets the sale.
Read the Business Case
Request an AXIOM Audit

2,564 words of content. Clear narrative arc. Business problem stated immediately. CTAs clearly labeled.

Boilerplate Analysis

Header (14 words) + Footer (42 words) = 56 words of boilerplate repeated on every page. Reduced from 65 words after removing dead social links.

PageTotal WordsUnique ContentBoilerplate Ratio
/17612031.8%
/services350+294+~16%
/axiom2,5642,5082.2%
/about380+324+~15%
/contact130+74+~43%

AXIOM Context Hints

Agents reading the page now receive upfront context before parsing content:

  • data-axiom-page-type="homepage" — agent immediately knows the page's role
  • data-axiom-page-purpose="Browse audit service offerings..." — agent knows the page's intent
  • data-axiom-role="primary-content" with data-axiom-priority="critical" — agent knows which sections matter most

Agent-Hostile Patterns

PatternCount
Modal/popup overlays0
Cookie consent banners0
Infinite scroll0
iframes0
Canvas elements0
JS-only click handlers0

Findings

#FindingSeverityStatus
ARF-1/contact boilerplate ratio ~43% — nearly half the page is navigation and footer chromeMediumUnchanged (thin content page)
ARF-2Homepage boilerplate ratio ~32% — thin content page with proportionally heavy chromeLowUnchanged
ARF-3"Open main menu" hamburger label leaks into text stream on every pageLowUnchanged
ARF-4Footer logo alt text is keyword-stuffed and repeated on every pageLowUnchanged
ARF-5All images have descriptive alt textPassUnchanged
ARF-6Content reads as coherent narrative in DOM order on all pagesPassUnchanged
ARF-7Single h1 on all pages — no topic ambiguityPassFixed (was dual h1 on /axiom)
ARF-8AXIOM page-type/purpose attributes provide upfront agent contextPassNew

Score Justification

Text streams are coherent and read well in linear order. Headings are descriptive. Content ordering puts business-critical information first. No agent-hostile patterns (zero modals, cookie banners, infinite scroll). Dual-h1 ambiguity on /axiom is fixed. AXIOM page-level attributes give agents immediate context. Deductions for thin-content pages (/contact, /) having high boilerplate ratios and minor text stream noise from the hamburger menu label.

Previous: 76 → New: 88 (+12)


Score Comparison: Before and After AXIOM

Previous AXIOM = (92 × 0.25) + (72 × 0.20) + (78 × 0.20) + (30 × 0.15) + (68 × 0.10) + (76 × 0.10)
             = 23.0 + 14.4 + 15.6 + 4.5 + 6.8 + 7.6
             = 71.9 → 72

Grade: C — Agent-Impaired
Current AXIOM  = (95 × 0.25) + (92 × 0.20) + (90 × 0.20) + (85 × 0.15) + (92 × 0.10) + (88 × 0.10)
             = 23.75 + 18.40 + 18.00 + 12.75 + 9.20 + 8.80
             = 90.9 → 91

Grade: A — Agent-Ready

Delta by Dimension

DimensionBeforeAfterDeltaPrimary Driver
Content Survivability9295+3Dead link removal
Structural Legibility7292+20ARIA states, dual-h1 fix, landmark improvements
Interactive Manifest Clarity7890+12Dead links removed, ARIA state attributes, AXIOM action annotations
Data Extractability3085+55AXIOM manifest, JSON-LD schemas, AXIOM markup vocabulary
Navigation Traversability6892+24Sitemap rebuild, dead link removal, BreadcrumbList schema, AXIOM nav index
Agent Response Fitness7688+12Dual-h1 fix, AXIOM page context, reduced boilerplate

Finding Severity Comparison

SeverityBeforeAfter
Critical20
High20
Medium83
Low96
Info22
Total2311

What Drove the Score

The 19-point composite jump from C to A was driven by three categories of changes:

1. AXIOM Level 1: Discovery (+35 DE, +10 NT)

The axiom.json manifest was the single highest-impact change. It provides agents with:

  • A complete machine-readable site map (7 sections with children)
  • Declared capabilities (what actions agents can take)
  • Agent policy (crawl rates, tier permissions)
  • Technical metadata (rendering mode, framework)

An agent that fetches /axiom.json before crawling now has a complete understanding of the site's structure and intent without parsing a single page.

2. Structured Data & Sitemap (+20 DE, +15 NT)

  • Service OfferCatalog: Agents can now extract "4 audit services offered" as typed data, not just from prose.
  • BreadcrumbList: Agents understand page hierarchy on spec pages programmatically.
  • Sitemap cleanup: Removed 28 phantom URLs that were actively misleading any agent relying on sitemap-based discovery. Added 7 missing real pages.
  • SearchAction removal: Stopped advertising a search endpoint that doesn't exist.

3. ARIA + AXIOM Markup (+20 SL, +12 IMC, +12 ARF)

  • ARIA states (aria-expanded, aria-pressed, aria-controls) let agents understand the current state of interactive controls.
  • Dead link removal eliminated 3 href="#" links per page — an agent clicking "Twitter" no longer hits a dead end.
  • Dual h1 fix resolved heading ambiguity on the most content-rich page.
  • AXIOM data attributes provide semantic context at page level (data-axiom-page-type), section level (data-axiom-role), and action level (data-axiom-action with data-axiom-intent).

Remaining Improvement Opportunities

PriorityActionDimensionsExpected Impact
1Add <time datetime> elements for any dates (publication dates, lastmod references)Data Extractability+3–5 on DE
2Add <caption> and scope to tables on /axiom/scoring-framework (20 tables)Data Extractability+3–5 on DE
3Add breadcrumbs to all pages (currently only spec pages) with BreadcrumbList JSON-LDNavigation Traversability+3 on NT
4Add data-axiom-page-purpose to / and /aboutData Extractability+1 on DE
5Replace "Learn More" generic link text on homepage with descriptive labelNavigation Traversability, Agent Response Fitness+1 across NT/ARF
6Add more content to /contact to reduce boilerplate ratio below 30%Agent Response Fitness+2 on ARF

Projected ceiling after all improvements: ~94–95 (solid A)


Methodology

FrameworkAXIOM v3.0
ToolsCharlotte Browser Automation (MCP), curl raw HTML analysis, WebFetch for sitemap/robots.txt
Pages/, /services, /axiom, /axiom/scoring-framework, /about, /contact
DeploymentVercel preview (clocktower-and-associates-website-i117jyy5o.vercel.app)
StandardsAXIOM Scoring Framework v3.0, AXIOM Specification v3.0

This report was generated using the AXIOM Scoring Framework v3.0 scoring methodology. The previous audit scored 72 (C) and identified Data Extractability as the critical gap. AXIOM Levels 1–3 implementation closed that gap and pushed every dimension above 85. The site is now Agent-Ready.