C72

AXIOM Audit Report

www.clocktowerassoc.com

Grade CAgent-Impaired

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

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

Dimension Scorecard

Content Survivability

92/ 100
Weight: 25%Weighted: 23.0Pass

Structural Legibility

72/ 100
Weight: 20%Weighted: 14.4Pass

Interactive Manifest Clarity

78/ 100
Weight: 20%Weighted: 15.6Pass

Data Extractability

30/ 100
Weight: 15%Weighted: 4.5Fail

Navigation Traversability

68/ 100
Weight: 10%Weighted: 6.8Warn

Agent Response Fitness

76/ 100
Weight: 10%Weighted: 7.6Pass

Findings Summary — 23 Total

Critical2High2Medium8Low9Info2

Pre-Audit Finding: Critical Content Survivability Failure (Remediated)

Before this audit was conducted, a critical Content Survivability failure was discovered and fixed during the same session. The finding is documented here because it would have fundamentally changed the audit outcome.

The Problem

Every page on the site was returning an empty HTML shell to non-JavaScript consumers:

<html>
  <head><!-- scripts, stylesheets, meta tags --></head>
  <body>
    <div id="__next"></div>
  </body>
</html>

AI agents, which parse raw HTML without executing JavaScript, received zero content from every page. The site was completely invisible to the agentic web.

Root Cause

The site's dark mode context provider wrapped the entire application in _app.tsx and used a common React pattern to prevent hydration mismatches:

// DarkModeContext.tsx (before fix)
export const DarkModeProvider = ({ children }) => {
  const [mounted, setMounted] = useState(false);

  useEffect(() => {
    setMounted(true);
    // ... read localStorage, set theme
  }, []);

  // This line made the entire site invisible to agents
  if (!mounted) {
    return null;
  }

  return (
    <DarkModeContext.Provider value={...}>
      {children}
    </DarkModeContext.Provider>
  );
};

The mounted state starts as false and only becomes true after useEffect fires — which only happens in a browser. During server-side rendering, the provider returned null, suppressing all page content. The build system still labeled pages as "prerendered as static content," but the HTML files contained nothing.

The Fix

The mounted guard was removed. Children render unconditionally with a default state (light mode). The existing inline DarkModeScript in _document.tsx already handles the flash-of-wrong-theme problem by applying the correct CSS class before React hydrates:

// DarkModeContext.tsx (after fix)
export const DarkModeProvider = ({ children }) => {
  const [isDarkMode, setIsDarkMode] = useState(false);

  useEffect(() => {
    // ... read localStorage, set theme (unchanged)
  }, []);

  return (
    <DarkModeContext.Provider value={...}>
      {children}
    </DarkModeContext.Provider>
  );
};

Impact

PageBefore (empty shell)After (pre-rendered)
Homepage2.2 KB22.7 KB
AXIOM Landing18.2 KB*59.5 KB
Services2.2 KB22.1 KB

*The AXIOM page had getStaticProps data serialized in __NEXT_DATA__, inflating the response size despite the empty DOM.

Score Impact

Without this fix, Content Survivability would have scored 0/100 — the textbook "SPA Blank Page" failure pattern described in Section 7.1 of the AXIOM Scoring Framework specification.

Pre-fix AXIOM  = (0 × 0.25) + (72 × 0.20) + (78 × 0.20) + (30 × 0.15) + (68 × 0.10) + (76 × 0.10)
             = 0 + 14.4 + 15.6 + 4.5 + 6.8 + 7.6
             = 48.9 → 49

Pre-fix grade: D — Agent-Hostile. A single line of code was the difference between Agent-Impaired and Agent-Hostile.

Additional Access Barrier (Remediated)

During investigation, Cloudflare's managed robots.txt injection was also discovered to be prepending directives that blocked all major AI crawlers:

User-agent: ClaudeBot
Disallow: /

User-agent: GPTBot
Disallow: /

This was disabled in the Cloudflare dashboard. The site's own robots.txt is permissive (User-agent: * / Allow: /).


Dimension 1: Content Survivability — 92/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 in the raw curl response. The <div id="__next"> contains complete markup on every page.

PageBody Word Count__next Has ContentRendering Method
/241Yes (1,820 chars)Auto-static export
/services398Yes (2,799 chars)Auto-static export
/axiom2,631Yes (18,253 chars)SSG (getStaticProps)
/axiom/scoring-framework4,621Yes (33,987 chars)SSG (getStaticProps)
/about423Yes (3,163 chars)Auto-static export
/contact142Yes (966 chars)Auto-static export

Navigation Without JavaScript

All primary navigation links use real <a href> tags with valid paths. Per-page link counts:

PageTotal LinksReal hrefshref="#" Placeholders
/23203
/services22193
/axiom27243
/axiom/scoring-framework23203
/about21183
/contact21183

Findings

#FindingSeverity
CS-1<noscript> tags exist but are empty on all pages — no fallback messagingLow
CS-2Cloudflare obfuscates contact email via data-cfemail encoding — requires JS to decodeMedium
CS-3No phone number or physical address on any pageInfo

Score Justification

≥95% of content present in initial HTML across all pages. Fully SSR/SSG. All navigation links are real <a href> tags. Docked for the Cloudflare email obfuscation (agents cannot read the contact email without JavaScript decoding) and empty <noscript> fallbacks.


Dimension 2: Structural Legibility — 72/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
<article>00000
<aside>00000

Semantic-to-Generic Ratio

PageSemantic Elements<div> + <span>Ratio
/6648.6%
/services75611.1%
/axiom97111.3%
/about96212.7%
/contact54510.0%

Heading Hierarchy

Clean sequential hierarchy on all pages except /axiom. Representative examples:

/ (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 — Dual h1 (issue)

h1: The Agentic Web Is Here. Is Your Site Ready?    ← page heading
  h2: Two Frameworks. One Problem.
  h2: Six Dimensions of Agent Readiness
    ...
h1: The Agentic Web: Why Your Website Is...          ← embedded markdown h1
  h2: A Business Case for Agent-Ready Infrastructure
    ...
  h2: Company [footer]
  h2: Developer Tools [footer]

Findings

#FindingSeverity
SL-1Semantic-to-generic ratio 8.6–12.7% across all pages — heavily div-driven markupMedium
SL-2Zero aria-label or aria-labelledby on any landmark element (multiple <section> tags are unlabeled and indistinguishable)Medium
SL-3Two <h1> elements on /axiom — embedded business case markdown introduces a second document headingMedium
SL-4Footer <h2> headings ("Company", "Developer Tools") pollute the heading outline on every pageLow
SL-5No <article> or <aside> elements used anywhereLow

Score Justification

All primary landmarks present. Heading hierarchy clean except /axiom. lang="en" set on all pages. Semantic ratio falls in the 8–15% band (scoring tier 2). Deductions for missing landmark labels (important when a page has 5+ <section> elements with no way for an agent to distinguish them) and the dual h1 structural ambiguity.


Dimension 3: Interactive Manifest Clarity — 78/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

Element//services/axiom/about/contact
<button>43334
<a href>2322272121
<input>20002
<textarea>10001

Accessible Name Coverage

  • All buttons have text content: 0 empty buttons across all pages
  • All links have text content: 0 empty links across all pages
  • Form labels properly associated: 3 <label> elements with for attributes on / and /contact

ARIA State Attributes

Zero across all pages. No aria-expanded, aria-selected, aria-disabled, aria-pressed, or aria-checked on any element.

Findings

#FindingSeverity
IMC-13 <a href="#"> placeholder links on every page (social media icons in footer — Twitter, LinkedIn, GitHub — all point nowhere)Medium
IMC-2Zero ARIA state attributes site-wide — mobile menu toggle has no aria-expanded, dark mode button has no aria-pressedMedium
IMC-32 onclick attributes on /axiom pageLow
IMC-4Dark mode toggle SVGs missing aria-hidden="true" (2 per page)Low
IMC-5Decorative arrow SVGs in links missing aria-hidden="true" on /services and /axiomLow

Score Justification

Strong native element usage — all CTAs use <button> or <a>, all forms use <input> and <textarea>. No "invisible CTA" pattern. All interactive elements have accessible names. Deductions for the 3 dead social links (an agent that clicks "Twitter" hits a dead end), the complete absence of ARIA state communication, and minor SVG accessibility gaps.


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

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

Structured Data

Schema TypePresent
JSON-LD (any)No — 0 blocks on any page
OrganizationNo
WebSite / WebPageNo
ServiceNo
BreadcrumbListNo
Microdata (itemscope/itemprop)No — detected instances are inside code examples only

Semantic Data Elements

Page<table><dl><ul><ol>
/0030
/services0020
/axiom0262
/axiom/scoring-framework20062
/about0020
/contact0020

Table Accessibility (/axiom/scoring-framework only)

  • 20 tables with <thead> and <th> elements
  • 0 <caption> elements — no table has a programmatic title
  • 0 scope attributes — no <th> declares row/column scope

Findings

#FindingSeverity
DE-1Zero JSON-LD structured data on any page — no Organization, WebSite, WebPage, Service, or BreadcrumbList schemaCritical
DE-2Zero microdata markup on any page — agents cannot programmatically extract typed business dataCritical
DE-3Zero <time datetime> elements — dates are not machine-readableMedium
DE-4Tables on /axiom/scoring-framework lack <caption> and scope attributesMedium
DE-5<dl>/<dt>/<dd> used only on /axiom (2 definition lists) — unused elsewhere for attribute dataLow

Score Justification

No structured data markup of any kind. An agent can read the text content but cannot programmatically extract Organization identity, service offerings, contact information, or page hierarchy as typed data. The content is human-readable but not machine-parseable beyond raw text extraction. Tables exist on the framework page but lack full metadata. The <dl> usage on /axiom is a positive signal but isolated.


Dimension 5: Navigation Traversability — 68/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: 43 Last modified: 2025-06-15 (all pages — 8 months stale)

Missing from sitemap:

  • /axiom
  • /axiom/scoring-framework
  • /axiom/build-spec
  • /showcase
  • /showcase/johnny
  • /showcase/repram
  • /showcase/termlife

Ghost URLs in sitemap (not reachable via any static navigation link):

  • /services/blockchain-development, /services/smart-contracts, /services/software-development, /services/system-architecture, /services/token-launch, /services/web3-development
  • /solutions, /solutions/quellion, /solutions/repram, /solutions/web3
  • /case-studies, /blog, /resources, /resources/developer-resources, /docs
  • /examples, /examples/tdemodapp
  • 17 of 22 tool pages

28 of 43 sitemap URLs are unreachable via static links from the audited pages.

Breadcrumbs

PageBreadcrumb NavBreadcrumbList JSON-LD
/axiom/scoring-frameworkYes (<nav aria-label="Breadcrumb">)No
/axiom/build-specYes (<nav aria-label="Breadcrumb">)No
All other pagesNoNo

Findings

#FindingSeverity
NT-1Sitemap is 8 months stale — all lastmod dates are 2025-06-15High
NT-2Sitemap contains 28 phantom/unreachable URLs from an old site structureHigh
NT-3Sitemap missing 7 live pages (/axiom, /axiom/scoring-framework, /axiom/build-spec, /showcase/*)High
NT-4Breadcrumbs only on 2 spec pages; no BreadcrumbList JSON-LD anywhereMedium
NT-53 placeholder href="#" social links on every pageMedium
NT-61 "Learn More" generic link text on homepageLow
NT-7robots.txt allows all crawlers, including AI agentsPass
NT-8Maximum click depth from homepage: 2Pass

Score Justification

The site's link structure is good — shallow depth, all navigation uses static <a href> tags, no JavaScript-gated navigation. However, the sitemap is significantly stale and actively misleading: it lists pages that don't exist and omits pages that do. An agent relying on the sitemap for discovery would have an inaccurate picture of the site. No breadcrumb schema for the pages that have breadcrumb UI.


Dimension 6: Agent Response Fitness — 76/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)

Clocktower and Associates Clocktower Home Services AXIOM Tools
About Contact Us Open main menu 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.

Company name at character position 0. Value proposition within the first 200 characters. Navigation chrome (15 words) sits between the brand and the heading but does not break coherence.

Boilerplate Analysis

Header (16 words) + Footer (49 words) = 65 words of boilerplate repeated on every page.

PageTotal WordsUnique ContentBoilerplate Ratio
/24117627.0%
/services39833316.3%
/axiom2,6312,5662.5%
/about42335815.4%
/contact1427745.8%

Image Alt Text

All images have alt text. No empty or missing alt attributes.

ImageAlt TextPages
Header logo"Clocktower and Associates Logo"All
Footer logo"Clocktower and Associates company logo - clocktower icon representing technology innovation and consulting services"All
About page logo"Clocktower and Associates full company logo featuring clocktower icon and professional technology consulting branding"/about

Findings

#FindingSeverity
ARF-1/contact boilerplate ratio 45.8% — nearly half the page is navigation and footer chromeMedium
ARF-2Two <h1> elements on /axiom create ambiguity in page topic identificationMedium
ARF-3Homepage boilerplate ratio 27% — thin content page with proportionally heavy chromeLow
ARF-4"Open main menu" hamburger label leaks into the text stream on every pageLow
ARF-5Footer logo alt text is keyword-stuffed and repeated on every pageLow
ARF-6Company name and value proposition appear in first 200 charactersPass
ARF-7No duplicate heading texts on any pagePass
ARF-8All images have descriptive alt textPass
ARF-9Content reads as coherent narrative in DOM order on all pagesPass

Score Justification

Text streams are mostly coherent and read well in linear order. Headings are descriptive and accurately summarize their sections. Content ordering is good — business-critical information appears early. Main deductions for the /contact page being nearly half boilerplate (an agent reading that page gets more chrome than content) and the dual-h1 ambiguity on /axiom.


Summary: Before and After

This audit was conducted during the same session that discovered and fixed two critical access barriers. The score difference tells the story:

Before Fixes

BarrierImpact
Cloudflare managed robots.txt blocking all AI crawlers (ClaudeBot, GPTBot, etc.)Agents never reach the site
DarkModeProvider returning null during SSRAgents that reach the site get an empty HTML shell
Pre-fix AXIOM = (0 × 0.25) + (72 × 0.20) + (78 × 0.20) + (30 × 0.15) + (68 × 0.10) + (76 × 0.10)
            = 48.9 → 49

Grade: D — Agent-Hostile

Content Survivability: 0/100. Every page returned <div id="__next"></div> and nothing else. The site was functionally invisible to the agentic web.

After Fixes

Post-fix AXIOM = (92 × 0.25) + (72 × 0.20) + (78 × 0.20) + (30 × 0.15) + (68 × 0.10) + (76 × 0.10)
             = 71.9 → 72

Grade: C — Agent-Impaired

Content Survivability: 92/100. All pages serve full pre-rendered HTML. The site went from invisible to functional in a one-line code change.

What Remains

The gap between C and B (75+) is primarily Data Extractability. Adding JSON-LD structured data (Organization, WebPage, Service, BreadcrumbList schemas) and updating the sitemap would push the score into the Agent-Functional range without any architectural changes.


Top 5 Priority Actions

PriorityActionDimensionsExpected Impact
1Add JSON-LD structured data — Organization schema site-wide, WebPage per page, Service on /services, BreadcrumbList where breadcrumb UI existsData Extractability+25–35 points on DE; ~+4–5 composite
2Rebuild sitemap.xml — Add missing pages, remove phantom URLs, update lastmod dates, automate generationNavigation Traversability+15–20 points on NT; ~+2 composite
3Add ARIA landmark labels and state attributesaria-label on <section> elements, aria-expanded on mobile menu, aria-pressed on dark mode toggleStructural Legibility, Interactive Manifest Clarity+5–8 points across SL/IMC; ~+2 composite
4Fix the /axiom dual h1 — Downgrade embedded business case h1 to h2 or suppress heading level in the rendering wrapperStructural Legibility, Agent Response Fitness+3–5 points across SL/ARF; ~+1 composite
5Replace or remove placeholder social links — Either connect to real profiles or remove the dead href="#" links from the footerInteractive Manifest Clarity, Navigation Traversability+2–3 points across IMC/NT; ~+1 composite

Projected score after top 2 actions: ~79 — Grade B (Agent-Functional)


This report was generated using the AXIOM Scoring Framework v3.0 scoring methodology. The site audited is our own — because if you're going to sell agent-readiness audits, you should be able to pass one.