AI Discoverability Implementation Audit: chrisbrock.io
An evidence-backed assessment of the conditions this site controls that help AI answer engines understand, trust, cite, and recommend the organization. This report does not guarantee placement, ranking, citation, traffic, or revenue in any search or AI answer product.
58.1%44.75 of 77 resolvable pointsGrade CMaterial discoverability frictionConfidence: moderate
Audited domain
chrisbrock.io
Audit date (UTC)
2026-09-01
Pages sampled
25 of a 25 page limit, depth 2
Rubric version
0.8
Reviewer
Chris Brock (signed 2026-08-30); assisted review by Claude Code
The full audit record, with identifiers, tooling, authorization and retention, is in scoring methodology.
Fit classification: Foundation fit. Retrieval, identity, or trust foundations need work before any measurement or monitoring spend is justified.
chrisbrock.io scored 58.1% (44.75 of 77 resolvable points) adjusted rubric points at moderate confidence. Of 33 checks in rubric version 0.8: 12 substantial, 9 inconclusive, 8 partial, 3 minimal, 1 missing. 33 open item(s) were ranked into an implementation backlog.
The three highest-value actions
#1 CI-02 Claim support. For each material claim, put its provenance next to it. An external source is strongest. Where none exists -- which is the normal case for a private operating figure -- a first-person attestation is still a source: name who is asserting it, the period it covers, the scope it covers, and the basis ("our internal figures", "verifiable on reference check"). Removing a true claim is the last resort, not the first.
#2 CR-06 Body text is machine-readable prose. Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
#3 CI-01 Direct answer passages. Give each priority question its own heading and a self-contained two-to-four sentence answer directly beneath it.
What this report is. A measurement of conditions this site controls, each supported by a captured, timestamped observation you can reproduce. What it is not. A prediction of whether any AI answer product will cite this site, and not a promise of ranking, traffic, leads, or revenue.
Overall score, adjusted denominator, and confidence
58.1
44.75 points awarded of 77 adjusted (raw rubric 100)
Grade C Material discoverability friction Confidence: moderate
Execute a structured 30-day remediation backlog
Confidence basis. 77 of 100 rubric points were resolvable (77% coverage); 9 check(s) worth 23 points are inconclusive; 0 scored check(s) carry low confidence.
Why the denominator is not 100
The raw rubric is 100 points. 23 point(s) were removed because those checks could not be scored either way.
Not applicable (the check does not apply to this site): none. Inconclusive (collection or scope prevented a decision, so the check is unresolved rather than failed): CR-01, CR-02, CR-05, CR-06, EN-04, SD-01, SD-03, SD-04, MR-02.
Neither group was scored as zero. A zero is reserved for a check rated Missing, which requires evidence.
Weighted for Professional services
Against the weights for this market the score is 59.5, 1.4 points above the baseline. The baseline above stays the headline number and is what a re-audit compares, so changing market profile can never look like progress.
Dimension scores. The bar repeats the percentage column; no meaning is carried by colour alone.
Dimension
Rubric weight
Adjusted weight
Awarded
Percentage
Grade
Visual
CR Crawl and retrieval accessibility If a retrieval system cannot fetch your pages reliably, nothing else on this list matters. Everything downstream depends on this working.
15
4
2.5
62.5%
C
EN Entity clarity An engine has to decide which organization a page is about before it can recommend that organization. Conflicting names and missing contact facts force it to guess, and it may guess wrong.
15
12
8
66.7%
C
CI Citation readiness This is the largest single block of points because it is the mechanism. Answer engines reuse passages that stand on their own; copy that needs the surrounding page to make sense is rarely quoted.
20
20
9.75
48.8%
F
TA Topical coverage and authority Coverage decides whether you are a candidate answer at all. A question with no owned page cannot be answered from your site by anything.
15
15
9.25
61.7%
C
TE Trust and evidence Assurance is a precondition for being recommended. An engine asked to suggest a provider has little reason to name one whose operator, credentials, and outcomes cannot be checked.
15
15
9.25
61.7%
C
SD Structured data Structured data is the one place you state your identity in a form nothing has to infer from prose. It is also the cheapest of these to fix.
10
3
2.25
75%
B
AC AI and agent controls Crawler treatment should be a decision you made rather than a default nobody chose. It is worth few points because it is usually already fine, and catastrophic on the rare occasion it is not.
5
5
3.25
65%
C
MR Measurement readiness Without a baseline fixed before results are known, any later movement can be explained after the fact. This is what makes a re-audit mean something.
5
3
0.5
16.7%
F
What to do
24 finding(s) are open, in the order we would take them. The order weighs how much each one matters, how many rubric points it holds, and roughly how much work it is, so stopping halfway still leaves the work that mattered most done. We do not estimate hours. We can see what your site is missing; we cannot see your codebase or your release process. Doing all of it is not a guarantee of placement, ranking, citation, recommendation, traffic, or revenue.
How to read this. The measurements are the tool's; the judgements are a person's; the score is arithmetic over both. No part of this report was written or rated by a language model.
automated means the tool observed it and the observation is reproducible from the evidence record. operator means a named reviewer read that evidence and made a judgement, with the reason recorded beside it. Weigh them differently. You should.
Everything below is self-contained: the findings, the instructions, the evidence ids, and a standing rule against inventing anything to satisfy them. Paste it into the tool working on your site.
You are fixing a website against an AI discoverability audit. If you are running in a terminal or an editor with access to the site's repository, read the files yourself and make the edits directly. Work the findings in the order given.
You are applying an evidence-backed AI discoverability audit to a website.
Target: https://chrisbrock.io
Audit: aud_20260901T114635Z_7f382c48
Rubric: v0.8 (scored by adia/0.1.0)
Score: 44.75 of 77 resolvable rubric points (58.1%), moderate confidence
Fit: Material discoverability friction
Every item below came from a captured, timestamped observation of the live
site, not from a model's impression of it. The evidence ids in brackets refer
to records in the audit's JSON appendix.
## Rules
1. Work in order. The list is ranked by impact, effort, confidence, and
dependency; an item that depends on another is listed after it.
2. Keep changes minimal and local. Do not redesign anything the audit did not
flag, and preserve the site's existing voice, structure, and build setup.
3. NEVER INVENT A FACT. Several fixes below could be "completed" by making
something up. Where an item says so, leave a clearly marked TODO for the
site owner rather than filling in a plausible value. A fabricated
testimonial, credential, statistic, or citation is worse than the gap it
replaces, and this audit exists to remove unsupported claims, not add them.
4. Do not add any claim about ranking, citation, traffic, or revenue.
5. If a fix is ambiguous, say so and stop rather than guessing.
Every count below describes the **25 page(s) this run read**, which stopped at a configured bound (max_pages=25) with URLs still queued. A later run that reads a different number of pages will report different counts for the same site, so compare these against a run of the same size, not against a bigger one, where finding more of a defect is what a bigger sample does.
## Fixes, in order
### 1. [CRITICAL] CI-02 Claim support
**Observed.** 41 distinct material claim candidate(s) were detected across 17 page(s) in 72 occurrence(s): compliance (16), superlative (9), money (7), percentage (7), count (2). Of those, 1 sit on a page carrying an external link that could serve as a source, 0 carry a first-person attestation in their own context (a stated basis plus at least two of asserting party, period and scope), and 40 carry neither. Links to the organization's own social or code profiles are excluded from the source count: they identify the publisher, not the origin of a number.
**Why it matters.** An unsupported number is a liability in an AI answer: it can be repeated without its caveats, and it cannot be defended when a buyer asks where it came from. What closes that gap is stated provenance, which a hyperlink is only one form of.
**Do this.** For each material claim, put its provenance next to it. An external source is strongest. Where none exists -- which is the normal case for a private operating figure -- a first-person attestation is still a source: name who is asserting it, the period it covers, the scope it covers, and the basis ("our internal figures", "verifiable on reference check"). Removing a true claim is the last resort, not the first.
*Evidence: ev_02acb40138951a1a, ev_37df1c06d90f71ac, ev_5cfea00370e86080, ev_26dae81084395fbd. 3.75 rubric points at stake.*
> **Do not fabricate.** Do not invent a source, statistic, or methodology. A claim may be supported by a first-person attestation instead of an external source, but the attestation is itself a factual assertion: writing "our internal figures, verifiable on reference check" next to a number you were not told the provenance of is fabrication, not formatting. Leave a marked TODO naming the four things the owner must supply -- who is asserting it, the period, the scope, and the basis -- and remove the claim only if the owner says it cannot be stood behind.
> Depends on: CI-04
### 2. [UNRESOLVED] CR-06 Body text is machine-readable prose
**Observed.** No template syntax was found in the visible text of 25 sampled page(s). Rated inconclusive rather than complete: that would say that no page on the site prints template syntax as body text, and this run collection stopped at a configured bound (max_pages=25) with URLs still queued, so it can only speak for the 25 page(s) it read. This is a limit of the collection, not a finding about the site.
**Why it matters.** A passage made of markup cannot be quoted, summarised, or cited. The page looks populated to the CMS and to a word count, and carries nothing an engine can use.
**Do this.** Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
*Evidence: ev_26dae81084395fbd, ev_181923593d69d1ad, ev_b43822a0840b8666, ev_184a171e0dda1ab0. 1 rubric points at stake.*
### 3. [MAJOR] CI-01 Direct answer passages
**Observed.** 1 heading(s) across the sample are phrased as questions. 3 of 25 pages open with a definitional sentence in the first 400 characters. Of 8 operator-supplied priority questions, 6 have a page matching 60% or more of their key terms. Weakly covered questions: 'What does a fractional CIO actually do for a small company?' (best match 0% at https://chrisbrock.io/); 'How much does a fractional or interim CIO cost?' (best match 33% at https://chrisbrock.io/).
**Why it matters.** An answer engine reuses passages that stand on their own. Copy that requires the surrounding page to make sense is rarely quotable.
**Do this.** Give each priority question its own heading and a self-contained two-to-four sentence answer directly beneath it.
*Evidence: ev_5cfea00370e86080, ev_37df1c06d90f71ac, ev_26dae81084395fbd, ev_181923593d69d1ad. 2.5 rubric points at stake.*
> Depends on: CI-03
### 4. [MAJOR] CI-04 Source attribution
**Observed.** 2 of 25 sampled pages link to an external destination that could serve as a source (8.0%). 53 external link(s) were found in total, but own social and code profiles are excluded from the source count. 0 link(s) point at a standards body, government, academic, or research host. 9 page(s) exceed 600 words while citing no external source.
**Why it matters.** Attribution is how a claim survives being repeated. A page that cites its sources gives an engine a reason to trust the passage it is about to reuse.
**Do this.** Cite the standard, study, or filing next to the claim it supports, with the source name and date visible in the text rather than only in a link.
*Evidence: ev_02acb40138951a1a, ev_37df1c06d90f71ac, ev_26dae81084395fbd, ev_181923593d69d1ad. 2.25 rubric points at stake.*
> **Do not fabricate.** Do not invent citations. Link only sources you can verify exist and actually support the nearby claim.
### 5. [MAJOR] MR-01 Baseline question set
**Observed.** 8 priority question(s) were recorded at intake.
**Why it matters.** Without a question set fixed before results are known, any later movement can be explained after the fact.
**Do this.** Agree and version a question set covering buying questions, brand variations, comparison questions, and geography, dated before the first measurement.
*Evidence: ev_1a94ac29449f2fa0. 1.5 rubric points at stake.*
### 6. [MAJOR] TA-01 Priority-question coverage
**Observed.** Of 8 priority questions, 6 have at least one page covering half or more of their key terms, and 6 have a substantive page of 400 words or more. Questions with no matching page: 'What does a fractional CIO actually do for a small company?'; 'How much does a fractional or interim CIO cost?'. 4 question(s) have three or more substantive pages competing to answer them.
**Why it matters.** Coverage decides whether the site is a candidate answer at all. A question with no owned page cannot be answered from this site by any engine.
**Do this.** Write one substantive owning page for each uncovered priority question, and consolidate pages that compete for the same question.
*Evidence: ev_1a94ac29449f2fa0, ev_2414ab046b888d58, ev_26dae81084395fbd, ev_181923593d69d1ad. 2 rubric points at stake.*
> Depends on: CI-01
### 7. [MINOR] CR-04 Canonical and duplicate control
**Observed.** 25 of 25 sampled indexable pages declare a canonical URL. Host and protocol variants: http://chrisbrock.io/ -> HTTP 200 at http://chrisbrock.io/; https://www.chrisbrock.io/ -> HTTP 200 at https://www.chrisbrock.io/. 2 variant origin(s) served a 2xx response without redirecting to the canonical origin, so the same content is reachable at more than one address: http://chrisbrock.io/, https://www.chrisbrock.io/.
**Why it matters.** When one page answers at several addresses, retrieval systems must guess which address to hold and cite. Consolidating on one origin removes that guess.
**Do this.** Redirect every non-canonical host and protocol variant to the canonical origin with a 301, and declare a self-referencing canonical on every page.
*Evidence: ev_26dae81084395fbd, ev_181923593d69d1ad, ev_b43822a0840b8666, ev_184a171e0dda1ab0. 1 rubric points at stake.*
> Depends on: CR-01
### 8. [MINOR] EN-02 Product and service identity
**Observed.** Of 5 operator-supplied offerings, 2 are named in the title or a heading of at least one sampled page, and 0 have exactly one such owning page. 1 offering(s) have a page whose URL names them but whose title and headings do not: 'Fractional and interim CIO leadership' at https://chrisbrock.io/situations/fractional-cio. Offerings with no matching sampled page: 'AI adoption with measured return on investment'; 'Ecommerce platform consolidation'. No Product, Service, or SoftwareApplication entity is declared in structured data on any sampled page.
**Why it matters.** An engine can only recommend an offering it can name, locate at a stable URL, and define. Offerings that live only in prose are hard to recommend specifically.
**Do this.** Give each offering one page with a stable URL, a one-sentence definition, a named audience, and structured data that ties it to the organization.
*Evidence: ev_5cfea00370e86080, ev_2414ab046b888d58, ev_26dae81084395fbd, ev_181923593d69d1ad. 2 rubric points at stake.*
> Depends on: EN-01
### 9. [UNRESOLVED] CR-02 Robots and crawler directives
**Observed.** robots.txt was retrieved and parsed: 1 group(s) covering user-agents *, 1 declared sitemap(s). The group matching this crawler allows 1 and disallows 0 path pattern(s). No sampled page declared a noindex directive in markup or headers. Rated inconclusive rather than complete: that would say that no page on the site is blocked or carries a conflicting noindex, and this run collection stopped at a configured bound (max_pages=25) with URLs still queued, so it can only speak for the 25 page(s) it read. This is a limit of the collection, not a finding about the site.
**Why it matters.** Crawl directives decide what any retrieval system is permitted to hold. A directive that blocks content the owner wants cited removes that content from every engine at once.
**Do this.** Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
*Evidence: ev_631ef8e431bf6b57. 1.5 rubric points at stake.*
### 10. [MINOR] TA-03 Comparative and decision content
**Observed.** 11 of 25 sampled pages contain comparison language, 6 state a limitation or fit boundary, and 0 use a table. No competitors were supplied at intake.
**Why it matters.** Buyers ask comparison questions, and so do the people prompting answer engines. A site that never states who it is not for cannot be matched to who it is for.
**Do this.** Publish one honest comparison or decision page with a criteria table, and state explicitly where the offering is not the right fit.
*Evidence: ev_2414ab046b888d58, ev_37df1c06d90f71ac, ev_26dae81084395fbd, ev_181923593d69d1ad. 2 rubric points at stake.*
### 11. [MINOR] TE-03 Customer and outcome evidence
**Observed.** 10 of 25 sampled pages reference customers, clients, or engagements in their own text rather than in a block repeated across the sample; 10 state an outcome-shaped result; 8 long quotation(s) that could be testimonials were found; and 3 page(s) mention a baseline or measurement period.
**Why it matters.** Outcome claims without a baseline and a scope cannot be checked, and an engine that repeats them exposes the business to a claim it cannot defend.
**Do this.** Publish at least one case example with the situation, the intervention, the measurement window, the baseline, and the result, with the customer's permission recorded.
*Evidence: ev_2414ab046b888d58, ev_37df1c06d90f71ac, ev_26dae81084395fbd, ev_181923593d69d1ad. 2 rubric points at stake.*
> **Do not fabricate.** Do not invent customers, testimonials, names, logos, or outcomes. Leave a marked TODO for the site owner. A fabricated testimonial is fraud, not a fix.
> Depends on: TE-01
### 12. [MAJOR] MR-03 Recheck discipline
**Observed.** No recheck schedule for the rubric, crawl sample, question set, competitors, and evidence was recorded at intake.
**Why it matters.** Changing method between reports without disclosure makes movement uninterpretable.
**Do this.** Fix a recheck cadence and record the rubric version, crawl sample, and question set used for each run so score movement can be attributed to the site rather than the method.
*Evidence: ev_1a94ac29449f2fa0. 1 rubric points at stake.*
> Depends on: MR-01
### 13. [MINOR] AC-01 Intentional crawler treatment
**Observed.** No named AI crawler has an explicit robots.txt group; all are covered by the wildcard group. The wildcard group allows 1 and disallows 0 path pattern(s). Stated owner intent at intake: 'Chris wants the site retrievable and citable by mainstream search and AI answer engines. No crawler exclusion is intended for public content.'.
**Why it matters.** Crawler treatment should be a decision, not an accident. Defaults that nobody chose are the common case, and they are the easiest thing to get wrong in either direction.
**Do this.** Decide explicitly which AI crawlers may retrieve the site, record the decision, and express it in robots.txt so a future deploy cannot silently change it.
*Evidence: ev_fac7362013e17212, ev_631ef8e431bf6b57. 0.5 rubric points at stake.*
### 14. [MINOR] TA-02 First-hand experience
**Observed.** 10 of 25 sampled pages carry 600 or more words. First-hand markers were detected on 4 page(s): first person operator on 1, measurement on 3, artifact on 0. 1 link(s) to public code or dataset repositories were found.
**Why it matters.** First-hand detail is the part of a page a competitor cannot copy and a summariser cannot generate. It is the strongest reason for an engine to prefer this source.
**Do this.** Publish the method, the numbers, and the artifact behind at least one claim per topic: a repository, a dataset, a template, or a documented before-and-after measurement.
*Evidence: ev_5cfea00370e86080, ev_37df1c06d90f71ac, ev_26dae81084395fbd, ev_181923593d69d1ad. 1 rubric points at stake.*
> **Do not fabricate.** Do not invent research, case evidence, or first-hand experience. Only restructure experience the site already describes.
> Depends on: TA-01
### 15. [MINOR] TE-02 Expertise and credential support
**Observed.** 16 distinct credential-shaped claim(s) were detected across 7 page(s) in 37 occurrence(s); 2 appear within 120 characters of a date. No unexplained logo-wall pattern was detected.
**Why it matters.** A credential without a scope, a date, and a responsible entity cannot be verified, and an unverifiable claim is a risk rather than an asset when repeated by a machine.
**Do this.** State the issuing body, the scope, the date, and the entity the credential belongs to next to every credential claim.
*Evidence: ev_37df1c06d90f71ac, ev_02acb40138951a1a, ev_26dae81084395fbd, ev_181923593d69d1ad. 2 rubric points at stake.*
> **Do not fabricate.** Do not invent or upgrade a credential, certification, audit, or partnership. These are verifiable facts about a real organization and getting one wrong is a legal problem.
### 16. [UNRESOLVED] CR-01 Stable successful retrieval
**Observed.** 25 of 25 sampled URLs returned a successful response (100.0%). Median response time was 1106 ms. Rated inconclusive rather than complete: that would say that no page on the site returns an error or comes back empty, and this run collection stopped at a configured bound (max_pages=25) with URLs still queued, so it can only speak for the 25 page(s) it read. This is a limit of the collection, not a finding about the site.
**Why it matters.** Answer engines can only use content they can retrieve reliably. Intermittent errors and empty successful responses both reduce the amount of a site that any retrieval system will hold.
**Do this.** Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
*Evidence: ev_26dae81084395fbd, ev_181923593d69d1ad, ev_b43822a0840b8666, ev_184a171e0dda1ab0. 1.5 rubric points at stake.*
### 17. [UNRESOLVED] SD-01 Valid core entities
**Observed.** 25 of 25 sampled pages carry JSON-LD (100.0%), producing 67 entit(ies). Declared types: Person (25), WebSite (25), Article (6), Review (6), BreadcrumbList (5). Core identity types present: Person, WebSite. Rated inconclusive rather than complete: that would say that every page on the site carries valid structured data, and this run collection stopped at a configured bound (max_pages=25) with URLs still queued, so it can only speak for the 25 page(s) it read. This is a limit of the collection, not a finding about the site.
**Why it matters.** Structured data is the one place a site states its identity in a form a machine does not have to infer from prose.
**Do this.** Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
*Evidence: ev_26dae81084395fbd, ev_181923593d69d1ad, ev_b43822a0840b8666, ev_184a171e0dda1ab0. 1.5 rubric points at stake.*
### 18. [MINOR] CI-03 Stable passage structure
**Observed.** Across 25 sampled pages the median page carries 2 heading(s). 25 declare exactly one H1, 5 give at least one heading an id that can be linked directly, and 8 use a table or list. 2 page(s) exceed 400 words with fewer than three headings: https://chrisbrock.io/about, https://chrisbrock.io/blog/shadow-it-and-your-data. 3 page(s) skip a heading level: https://chrisbrock.io/blog: h1 followed by h3; https://chrisbrock.io/reading: h1 followed by h3; https://chrisbrock.io/blog/fostering-innovation-within-it-teams: h1 followed by h3.
**Why it matters.** Headings and anchors are the unit an engine extracts. A page with no internal structure can only be cited whole, which usually means it is not cited at all.
**Do this.** Give every page one H1, a descriptive H2 for each distinct answer, and a stable id on each H2 so a passage can be linked directly.
*Evidence: ev_26dae81084395fbd, ev_181923593d69d1ad, ev_b43822a0840b8666, ev_184a171e0dda1ab0. 1 rubric points at stake.*
### 19. [MINOR] EN-01 Organization identity consistency
**Observed.** Structured-data identity names: 'Chris Brock' on 25 page(s). Declared og:site_name values: 'Chris Brock'. 2 contact value(s) appear in structured data: email=mailto:cb@chrisbrock.io, address(structured). 25 distinct meta description(s) were served across 25 pages.
**Why it matters.** An engine has to decide which entity a page is about before it can recommend that entity. Conflicting names and missing contact facts force it to guess.
**Do this.** State one organization or person name, one description, and one contact path consistently in visible content and in structured data on every page.
*Evidence: ev_02acb40138951a1a, ev_37df1c06d90f71ac, ev_26dae81084395fbd, ev_181923593d69d1ad. 1 rubric points at stake.*
> **Do not fabricate.** Do not invent a legal entity name, address, or contact detail.
### 20. [UNRESOLVED] SD-03 Page-specific markup
**Observed.** 6 of 6 sampled article-style pages declare an Article type in structured data (100.0%). 5 of 25 sampled pages declare BreadcrumbList markup. Rated inconclusive rather than complete: that would say that every article on the site carries article markup, and this run collection stopped at a configured bound (max_pages=25) with URLs still queued, so it can only speak for the 25 page(s) it read. This is a limit of the collection, not a finding about the site.
**Why it matters.** Page-type markup tells a retrieval system what a page is, which is what lets an article be treated as dated, authored evidence rather than undated site copy.
**Do this.** Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
*Evidence: ev_26dae81084395fbd, ev_181923593d69d1ad, ev_b43822a0840b8666, ev_184a171e0dda1ab0. 1 rubric points at stake.*
> Depends on: SD-01
### 21. [UNRESOLVED] SD-04 Metadata consistency
**Observed.** Across 25 sampled pages: 25 declare a title, 25 a meta description, 25 an html lang attribute, and 25 Open Graph titles. No metadata inconsistency was found in the sample. Rated inconclusive rather than complete: that would say that no page on the site has inconsistent metadata, and this run collection stopped at a configured bound (max_pages=25) with URLs still queued, so it can only speak for the 25 page(s) it read. This is a limit of the collection, not a finding about the site.
**Why it matters.** When a page describes itself differently in its title, its social metadata, and its structured data, an engine has to choose one description and may choose the wrong one.
**Do this.** Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
*Evidence: ev_26dae81084395fbd, ev_181923593d69d1ad, ev_b43822a0840b8666, ev_184a171e0dda1ab0. 1 rubric points at stake.*
> Depends on: SD-01
### 22. [MINOR] TE-01 Ownership and accountability
**Observed.** About-style page(s) found: 1. Contact path(s) found: 1. 1 distinct mailto destination(s) and 1 form(s) appear in the sample. 25 organization or person entit(ies) are declared in structured data.
**Why it matters.** Accountability is a precondition for being recommended. An engine asked to suggest a provider has little reason to name one whose operator and contact path are unclear.
**Do this.** Name the operating entity, the responsible people, and a working contact path on a linked page, and mirror those facts in structured data.
*Evidence: ev_37df1c06d90f71ac, ev_d76db615ec2be435, ev_05b6bc243d937501, ev_26dae81084395fbd. 1 rubric points at stake.*
### 23. [MINOR] CI-05 Content freshness signals
**Observed.** 15 of 25 sampled pages expose a date in visible text, structured data, or a time element (60.0%). 6 of 6 article-style pages carry a date. No contradiction was found between visible and structured dates in the sample.
**Why it matters.** A dated page can be judged current. An undated page has to be treated as possibly stale, which is a reason not to cite it.
**Do this.** Show a visible published and updated date on every article, and emit the same values as datePublished and dateModified in structured data.
*Evidence: ev_26dae81084395fbd, ev_181923593d69d1ad, ev_b43822a0840b8666, ev_184a171e0dda1ab0. 0.75 rubric points at stake.*
### 24. [MINOR] SD-02 Entity relationships
**Observed.** 50 of 67 entit(ies) declare an @id (74.6%), producing 2 distinct identifier(s). 43 relationship reference(s) were found across 3 relationship type(s). 25 entit(ies) declare sameAs links to external profiles.
**Why it matters.** Stable identifiers let an engine merge the same organization or person across pages instead of treating each mention as a new entity.
**Do this.** Give every entity a stable @id, reference the same identifiers across pages, and add sameAs links to owned external profiles.
*Evidence: ev_26dae81084395fbd, ev_181923593d69d1ad, ev_b43822a0840b8666, ev_184a171e0dda1ab0. 0.75 rubric points at stake.*
> Depends on: SD-01
### 25. [MINOR] TE-04 Policy and limitation clarity
**Observed.** Privacy policy reference(s): 2. Terms reference(s): 0. 1 form(s) appear in the sample. 25 page(s) show evidence of third-party analytics being loaded. No terms or service-boundary page was found in the sample.
**Why it matters.** Policies set the boundaries a buyer and an agent both need before acting. Their absence is a friction point at exactly the moment a recommendation would convert.
**Do this.** Publish a dated privacy policy covering analytics and form data, and a terms or engagement-scope page that matches what is actually sold.
*Evidence: ev_05b6bc243d937501, ev_d76db615ec2be435, ev_26dae81084395fbd, ev_181923593d69d1ad. 0.75 rubric points at stake.*
### 26. [MINOR] CR-03 Sitemap quality
**Observed.** 3 sitemap document(s) were retrieved; 3 parsed cleanly and 0 did not. 68 unique URL(s) are listed. 0 of 68 entries carry a lastmod value (0.0%). 25 listed URL(s) were sampled and returned a successful response.
**Why it matters.** A sitemap is the cheapest way to tell every retrieval system which URLs are canonical and when they last changed.
**Do this.** Correct the entries identified in the evidence and ensure lastmod reflects real content changes.
*Evidence: ev_631ef8e431bf6b57, ev_7319da06a1333440, ev_01466bf10e8fce8d, ev_123930a05a4a98e9. 0.5 rubric points at stake.*
> Depends on: CR-02
### 27. [MINOR] TA-04 Internal topic relationships
**Observed.** Across 25 sampled pages the median page links to 8 other sampled page(s). 0 sampled page(s) received no internal link from any other sampled page, and 12 received exactly one.
**Why it matters.** Internal links are how evidence pages get discovered and how a crawler learns which pages a site treats as important. An orphaned page carries its authority nowhere.
**Do this.** Link every evidence and educational page from the commercial page it supports, and from a topic index.
*Evidence: ev_26dae81084395fbd, ev_181923593d69d1ad, ev_b43822a0840b8666, ev_184a171e0dda1ab0. 0.75 rubric points at stake.*
> Depends on: TA-01
### 28. [MINOR] EN-03 People and authorship identity
**Observed.** 25 Person entit(ies) and 12 structured author reference(s) were found. Meta author values: 'Chris Brock'. 6 of 6 article-style pages carry an author attribution. 25 Person entit(ies) link to external profiles via sameAs.
**Why it matters.** Expertise content that no identified person stands behind is difficult to weigh, and difficult to defend when a buyer asks who wrote it.
**Do this.** Attribute every substantive page to a named person with a linked biography, role, and credentials, and connect that person to the organization in structured data.
*Evidence: ev_37df1c06d90f71ac, ev_02acb40138951a1a, ev_26dae81084395fbd, ev_181923593d69d1ad. 1 rubric points at stake.*
> **Do not fabricate.** Do not invent an author, biography, role, or credential.
> Depends on: EN-01
### 29. [UNRESOLVED] EN-04 External identity reconciliation
**Observed.** The site links out to 4 distinct external host(s); 2 sameAs URL(s) are declared in structured data. No owned profiles were declared at intake, so nothing could be reconciled.
**Why it matters.** Owned profiles that the site never links, and profiles carrying an old brand, split one identity into several that an engine must reconcile on its own.
**Do this.** Link every owned profile from the site and declare it in sameAs, and retire or update profiles carrying a former brand.
*Evidence: ev_26dae81084395fbd, ev_181923593d69d1ad, ev_b43822a0840b8666, ev_184a171e0dda1ab0. 1.5 rubric points at stake.*
> **Do not fabricate.** Do not invent external profiles or links to them.
> Depends on: EN-01
### 30. [UNRESOLVED] CR-05 Rendered content availability
**Observed.** Raw HTML (no JavaScript execution) already carries a median of 396 words and a median of 3 script element(s) per sampled page. 24 of 25 pages carry 150 or more words before rendering, and 25 expose an H1 in raw HTML. 0 page(s) include noscript content.
**Why it matters.** Content that exists only after client-side execution is unavailable to any retrieval path that does not render, and unreliable for those that do.
**Do this.** Serve primary claims, headings, navigation, and supporting evidence in the initial HTML response.
*Evidence: ev_26dae81084395fbd, ev_181923593d69d1ad, ev_b43822a0840b8666, ev_184a171e0dda1ab0. 1.5 rubric points at stake.*
> Depends on: CR-01
### 31. [UNRESOLVED] MR-02 Referral and conversion attribution
**Observed.** Public markup and response headers indicate 2 analytics or measurement provider(s): google-analytics.com, googletagmanager.com. Whether referrals from AI answer surfaces can be isolated and tied to qualified outcomes cannot be determined from public pages.
**Why it matters.** Reporting mentions or impressions without connecting them to qualified behaviour cannot justify continued spend.
**Do this.** Configure a referral segment for AI answer surfaces and connect it to a defined qualified-outcome event, or record the implementation backlog to do so.
*Evidence: ev_26dae81084395fbd, ev_181923593d69d1ad, ev_b43822a0840b8666, ev_184a171e0dda1ab0. 1 rubric points at stake.*
> Depends on: MR-01
### 32. [MINOR] AC-02 Machine-readable guidance quality
**Observed.** 2 machine-readable guidance file(s) are served: /llms.txt (1925 bytes, 11 link(s)), /.well-known/security.txt (187 bytes, 2 link(s)). 1 link(s) inside the link-index files point off the audited domain. /.well-known/security.txt is not a link index, so outbound links in it are not counted: prose quotes URLs, and a site publishing work it did for somebody else has to name that site. These conventions are voluntary. Serving them is not a ranking or citation guarantee, and no engine is known to require them.
**Why it matters.** A machine-readable index is cheap to publish and cheap to get wrong: a stale one misleads, and an overstated one invites claims the site cannot support.
**Do this.** Keep the guidance file generated from the same source as the sitemap so it cannot go stale.
*Evidence: ev_cd0267b89a631aa6, ev_de23964c65dfad3f, ev_5a2b08d3801bceba, ev_bbb2e4646545eeb3. 1 rubric points at stake.*
### 33. [MINOR] AC-03 Agent-facing transaction boundaries
**Observed.** 1 page(s) expose a form and 3 mention a purchase surface. The collector never submits a form or performs any state-changing request, so interaction boundaries were not exercised.
**Why it matters.** An agent acting on a customer's behalf needs to know what commits the customer and what does not. Ambiguity here creates unintended commitments.
**Do this.** Document what each form or endpoint commits the visitor to, require authentication for anything that creates an obligation, and state the approval step in public documentation.
*Evidence: ev_d76db615ec2be435, ev_26dae81084395fbd, ev_181923593d69d1ad, ev_b43822a0840b8666. 0.25 rubric points at stake.*
## Pages that do not exist yet
Each question below had no substantive owning page in the sample. Draft these from the site owner's own knowledge. Do not invent facts, figures, or experience to fill them.
- **What does a fractional CIO actually do for a small company?** No sampled page covers half or more of this question's key terms. Create one owning page. Open with a two-to-four sentence answer under an H2 that repeats the question, then support it with the method, the constraint, and one worked example.
- **How much does a fractional or interim CIO cost?** No sampled page covers half or more of this question's key terms. Create one owning page. Open with a two-to-four sentence answer under an H2 that repeats the question, then support it with the method, the constraint, and one worked example.
## What this audit could not determine
- This audit sampled 25 page(s) against a configured limit of 25 at a maximum depth of 2. Findings describe the sample, not every page on the site.
- Scored against rubric version 0.8 using tool version adia/0.1.0. Score movement between runs can come from a rubric change as easily as a site change.
- Collection used plain HTTP retrieval with no JavaScript execution. Content that appears only after client-side rendering was not observed.
- Off-domain properties were not retrieved. The run was restricted to the authorized registrable domain.
- No form was submitted, no authenticated content was accessed, and no state-changing request was made.
- 9 check(s) are inconclusive and contribute no points in either direction: CR-01, CR-02, CR-05, CR-06, EN-04, SD-01, SD-03, SD-04, MR-02. Their 23 points were removed from the denominator rather than scored as zeroes.
- Collection stopped at a configured bound (max_pages=25). A larger sample may change coverage-dependent findings.
- 6 check(s) reached their top rating only because pages were left unread, and are recorded as inconclusive rather than as passes: CR-01, CR-02, CR-06, SD-01, SD-03, SD-04. Raising the page limit and re-running is what settles them; nothing about the site needs to change first.
- This audit measures conditions a site can control against rubric version 0.8. It does not guarantee placement, ranking, citation, recommendation, traffic, leads, or revenue in any search engine or AI answer product, and a low score does not prove a site is absent from AI-generated answers.
- Unresolved checks: CR-01, CR-02, CR-05, CR-06, EN-04, SD-01, SD-03, SD-04, MR-02. These contributed no points in either direction.
Do not "fix" any of the above. They were not measured, so a change there
cannot be verified by a re-audit.
## When you are done
Tell the site owner the work is done. If their audit came with rechecks, they
reply to the delivery email and ask for one: the site is read again against the
same rubric version, and the reply says what moved and what did not. That is
the proof the work landed, and it is the only thing that settles it. Do not
report a score yourself, because you cannot run the rubric.
1. CI-02 Claim support
MinimalCritical3.75 point(s) at stake
What we found. 41 distinct material claim candidate(s) were detected across 17 page(s) in 72 occurrence(s): compliance (16), superlative (9), money (7), percentage (7), count (2). Of those, 1 sit on a page carrying an external link that could serve as a source, 0 carry a first-person attestation in their own context (a stated basis plus at least two of asserting party, period and scope), and 40 carry neither. Links to the organization's own social or code profiles are excluded from the source count: they identify the publisher, not the origin of a number.
Do CI-04 first.
Do this.
List every number, superlative and outcome claim on the site.
For each, add the support next to the claim: the date, the source, the sample, or the method.
Delete or soften anything you cannot support. An unsupported claim is a liability, not a weak asset.
Where the support is a document, link it.
How to tell it worked. Pick three claims at random and try to check them using only the page they sit on.
Why this rating, and who signed it
Read the detected claims in context on the homepage, /about, and the situation pages. The claims are specific and commercially important: zero major nonconformities across six annual audit cycles, roughly 68 percent of company revenue tied to that capability, productivity gains equivalent to roughly 30 FTE, one integration enabling roughly $2M in annual revenue, roughly $5M in managed technology spend, roughly 15 percent annual vendor savings, and ticket resolution moving from eight business days to under two business hours. Not one of them states a measurement period, a baseline, a scope, or a method on the page where it appears. These are precisely the sentences an answer engine would lift and repeat without their caveats. This is the single highest-value gap in the audit.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 29 record(s) (records the reviewer cited are listed first)ev_02acb40138951a1a ev_37df1c06d90f71ac ev_5cfea00370e86080 ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) and 21 more record(s) in the JSON appendixWhere this is documented
Pattern matching finds claim-shaped text. Whether a claim is material and whether nearby content supports it are reviewer judgements.
An attestation is detected by its wording, not verified. The check reads that provenance was stated; it cannot read whether the statement is true. That is the point of ranking it below an external source.
3. CI-01 Direct answer passages
PartialMajor2.5 point(s) at stake
What we found. 1 heading(s) across the sample are phrased as questions. 3 of 25 pages open with a definitional sentence in the first 400 characters. Of 8 operator-supplied priority questions, 6 have a page matching 60% or more of their key terms. Weakly covered questions: 'What does a fractional CIO actually do for a small company?' (best match 0% at https://chrisbrock.io/); 'How much does a fractional or interim CIO cost?' (best match 33% at https://chrisbrock.io/).
Do CI-03 first.
Do this.
Write down the questions a buyer actually asks, in their words.
Give each one its own heading, phrased as the question.
Answer it directly beneath in two to four sentences that make sense with no surrounding page.
Put the answer first and the elaboration after it, not the other way round.
How to tell it worked. Read one answer out of context. If it needs the paragraph above it, it is not a passage yet.
Why this rating, and who signed it
Read the top matching page for each priority question. The writing is strong but narrative: answers are embedded in flowing paragraphs rather than in self-contained passages under a heading that names the question. No heading anywhere in the sample is phrased as a question, and two priority questions ('what does a fractional CIO actually do' and 'how much does it cost') have no page that answers them at all.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 28 record(s) (records the reviewer cited are listed first)ev_5cfea00370e86080 ev_37df1c06d90f71ac ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more record(s) in the JSON appendixWhere this is documented
Term overlap measures topical proximity, not whether a passage actually answers the question. A reviewer must read the candidate passages.
4. CI-04 Source attribution
MinimalMajor2.25 point(s) at stake
What we found. 2 of 25 sampled pages link to an external destination that could serve as a source (8.0%). 53 external link(s) were found in total, but own social and code profiles are excluded from the source count. 0 link(s) point at a standards body, government, academic, or research host. 9 page(s) exceed 600 words while citing no external source.
Do this.
Attribute every external fact to its source in the sentence that uses it.
Link the source. A named source with no link is half an attribution.
Say when the source is from, so a reader can tell how old the fact is.
Distinguish your own findings from other people's, explicitly.
How to tell it worked. Take one external fact and try to reach its source in one click.
Why this rating, and who signed it
Only two of 25 sampled pages link to any external destination that could function as a source, and none points at a standards body, regulator, or research host. Nine pages exceed 600 words while citing nothing external. Pages that discuss ISO 27001, SOC 2, HIPAA, and AI governance frameworks by name never link to the standard or framework they discuss.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 28 record(s) (records the reviewer cited are listed first)ev_02acb40138951a1a ev_37df1c06d90f71ac ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more record(s) in the JSON appendixWhere this is documented
Link counting cannot tell whether a cited source actually supports the nearby claim, nor whether the link still resolves. Off-domain links were not followed, by design.
5. MR-01 Baseline question set
MinimalMajor1.5 point(s) at stake
What we found. 8 priority question(s) were recorded at intake.
Do this.
Write down the questions you want to be the answer to, before you change anything.
Record today's answer from each engine you care about, with the date and the exact prompt.
Keep the wording fixed. A question you reword is a baseline you have lost.
Store the results where you can compare against them later.
How to tell it worked. Re-run one question a week later and confirm you can tell whether anything moved.
Why this rating, and who signed it
Eight priority questions were recorded in the intake file, but they were written by the auditor from the site's own content rather than agreed with the owner, and they carry no target-engine list, no rationale, and no dated baseline. A question set authored after reading the site is not a baseline; it is a description of the site.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 1 record(s) (records the reviewer cited are listed first)ev_1a94ac29449f2fa0Where this is documented
This is a property of the engagement, not of the public website. It cannot be observed by crawling and stays inconclusive until the operator records the agreed baseline.
6. TA-01 Priority-question coverage
PartialMajor2 point(s) at stake
What we found. Of 8 priority questions, 6 have at least one page covering half or more of their key terms, and 6 have a substantive page of 400 words or more. Questions with no matching page: 'What does a fractional CIO actually do for a small company?'; 'How much does a fractional or interim CIO cost?'. 4 question(s) have three or more substantive pages competing to answer them.
Do CI-01 first.
Do this.
Take the priority questions recorded at intake and check each against the site.
For any question with no page that answers it, write one.
Where a page half-answers it, add the missing part rather than starting again.
Link related questions to each other so a reader following one lands on the next.
How to tell it worked. Search your site for each priority question and see whether one page answers it.
Why this rating, and who signed it
Six of eight priority questions have a substantive page. The two with no owning page are the two a buyer asks first: what a fractional CIO does, and what it costs. Four questions are matched by three or more competing pages, which reflects the site's structure: situation pages, book notes, and blog posts all touch the same subjects without one being the designated answer.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 28 record(s) (records the reviewer cited are listed first)ev_1a94ac29449f2fa0 ev_2414ab046b888d58 ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more record(s) in the JSON appendixWhere this is documented
Term overlap identifies topical proximity, not answer quality. The two uncovered questions were confirmed by reading the closest pages; the competition count was not individually verified for every question.
7. CR-04 Canonical and duplicate control
PartialMinor1 point(s) at stake
What we found. 25 of 25 sampled indexable pages declare a canonical URL. Host and protocol variants: http://chrisbrock.io/ -> HTTP 200 at http://chrisbrock.io/; https://www.chrisbrock.io/ -> HTTP 200 at https://www.chrisbrock.io/. 2 variant origin(s) served a 2xx response without redirecting to the canonical origin, so the same content is reachable at more than one address: http://chrisbrock.io/, https://www.chrisbrock.io/.
Do CR-01 first.
Do this.
Give every page a self-referencing absolute rel=canonical.
Pick one form per page and make it the only one: trailing slash or not, www or not, http or https.
Point parameterised, filtered and paginated variants at the canonical page rather than at each other.
Make the canonical agree with the sitemap and with any og:url on the same page.
Point internal links at the address that answers directly, and where a redirect has to stay, make it permanent (301) once the destination is settled: a temporary redirect is not read as a statement about which address is canonical.
How to tell it worked. Load each duplicate variant and confirm the canonical it declares is the same single URL, and request each internal link that redirects and confirm the status is 301 rather than 302, 303 or 307.
Evidence: 27 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 19 more record(s) in the JSON appendixWhere this is documented
What we found. Of 5 operator-supplied offerings, 2 are named in the title or a heading of at least one sampled page, and 0 have exactly one such owning page. 1 offering(s) have a page whose URL names them but whose title and headings do not: 'Fractional and interim CIO leadership' at https://chrisbrock.io/situations/fractional-cio. Offerings with no matching sampled page: 'AI adoption with measured return on investment'; 'Ecommerce platform consolidation'. No Product, Service, or SoftwareApplication entity is declared in structured data on any sampled page.
Do EN-01 first.
Do this.
List what you actually sell, in the words a buyer would use rather than an internal name.
Give each one a page that says what it is, who it is for, what it costs or how pricing works, and what it excludes.
Add Service or Product structured data on those pages, with the same names the page uses.
Remove or rename anything the site still advertises that you no longer sell.
How to tell it worked. Ask an answer engine what your company sells and compare the answer with your own list.
Why this rating, and who signed it
Read /situations and its five child pages. The site organizes itself around customer situations rather than named offerings, which reads well but leaves no stable name for anything purchasable. /situations/fractional-cio is titled 'Technology Strategy for Growth' and the phrase 'fractional CIO' appears nowhere in its title, headings, or body, so the one URL that names the offering is the one place the page does not. No Product, Service, or ProfessionalService entity is declared in structured data on any sampled page.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 27 record(s) (records the reviewer cited are listed first)ev_5cfea00370e86080 ev_2414ab046b888d58 ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 19 more record(s) in the JSON appendixWhere this is documented
The offering labels in the intake file are the auditor's paraphrase of the site, not the owner's own wording. A mismatch between a paraphrased label and the site's language is not by itself a site defect; the finding rests on the fractional-cio page and the absent structured data, both read directly.
10. TA-03 Comparative and decision content
PartialMinor2 point(s) at stake
What we found. 11 of 25 sampled pages contain comparison language, 6 state a limitation or fit boundary, and 0 use a table. No competitors were supplied at intake.
Do this.
Write the comparison a buyer is already making, including the alternatives you lose to.
State the criteria before the verdict, and use the same criteria for every option.
Say plainly who each option suits and who it does not.
Keep it current and put the date on it; a comparison a reader cannot date is one they cannot trust.
How to tell it worked. Give the page to somebody outside the company and ask them which option it recommends and why.
Why this rating, and who signed it
The site does state fit boundaries in prose, and does so honestly, for example being explicit about where AI will not work in a given business. What it does not have is any comparison or decision page: no criteria table, no fractional-versus-full-time discussion, and no alternatives named. A buyer comparing options has nothing here to compare with.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 28 record(s) (records the reviewer cited are listed first)ev_2414ab046b888d58 ev_37df1c06d90f71ac ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more record(s) in the JSON appendixWhere this is documented
No competitors were supplied at intake, so competitor-specific coverage could not be assessed.
11. TE-03 Customer and outcome evidence
PartialMinor2 point(s) at stake
What we found. 10 of 25 sampled pages reference customers, clients, or engagements in their own text rather than in a block repeated across the sample; 10 state an outcome-shaped result; 8 long quotation(s) that could be testimonials were found; and 3 page(s) mention a baseline or measurement period.
Do TE-01 first.
Do this.
Publish outcomes with the specifics: what the situation was, what was done, what changed, over what period.
Attribute each to a named customer where you have permission, and say when you do not.
Include the ones that did not go to plan, and what you learned.
Do not publish a testimonial you cannot trace back to a real person.
How to tell it worked. Take one outcome and check that a reader could tell whether it resembles their own situation.
Why this rating, and who signed it
Outcome claims are abundant and unusually specific, but there is no case study: no named or responsibly anonymized customer, no authorization signal, no engagement scope, and a baseline or measurement period on only three of 25 sampled pages. The quotations detected are the situation-page headlines in the owner's own voice, not customer testimonials.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 28 record(s) (records the reviewer cited are listed first)ev_2414ab046b888d58 ev_37df1c06d90f71ac ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more record(s) in the JSON appendixWhere this is documented
Whether a testimonial is genuine and authorized cannot be established from the site.
12. MR-03 Recheck discipline
MissingMajor1 point(s) at stake
What we found. No recheck schedule for the rubric, crawl sample, question set, competitors, and evidence was recorded at intake.
Do MR-01 first.
Do this.
Put a recheck in the calendar rather than leaving it to memory.
Re-run the same baseline questions, unchanged, on a fixed interval.
Record what changed on the site between rechecks so a movement has a candidate cause.
Keep the history. A single reading is not a trend.
How to tell it worked. Look at two consecutive rechecks and confirm you can say what changed and why.
Why this rating, and who signed it
No recheck schedule for the rubric, crawl sample, question set, competitors, or evidence exists. The intake file records none and no such schedule has been agreed. This is a documented absence rather than a collection failure, so it is rated Missing rather than left inconclusive.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 1 record(s) (records the reviewer cited are listed first)ev_1a94ac29449f2fa0Where this is documented
This is a property of the engagement, not of the public website. It cannot be observed by crawling and stays inconclusive until the operator records the agreed baseline.
13. AC-01 Intentional crawler treatment
SubstantialMinor0.5 point(s) at stake
What we found. No named AI crawler has an explicit robots.txt group; all are covered by the wildcard group. The wildcard group allows 1 and disallows 0 path pattern(s). Stated owner intent at intake: 'Chris wants the site retrievable and citable by mainstream search and AI answer engines. No crawler exclusion is intended for public content.'.
Do this.
Decide, per crawler, whether you want it: search crawlers, AI training crawlers, AI answer fetchers.
Write that decision into robots.txt as named groups rather than leaving it to a wildcard.
Match your CDN, WAF and bot-management rules to that decision. A rule at the edge overrides robots.txt in practice.
Re-check after any CDN or hosting change.
How to tell it worked. Request a page with each crawler's user agent and confirm you get what you intended.
Why this rating, and who signed it
robots.txt is a single permissive wildcard group allowing all paths, with a declared sitemap and no exclusion of any AI crawler. That is aligned with the owner's stated intent to be retrievable and citable. Short of Complete because the alignment is a default rather than a recorded decision: no named AI crawler group exists, so nothing in the repository or the file states that permitting them was chosen rather than inherited.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 2 record(s) (records the reviewer cited are listed first)ev_fac7362013e17212 ev_631ef8e431bf6b57 (robots_parse on https://chrisbrock.io/robots.txt at 2026-09-01T11:47:18+00:00)Where this is documented
Whether the observed directives match the owner's intent requires the owner to state that intent.
14. TA-02 First-hand experience
SubstantialMinor1 point(s) at stake
What we found. 10 of 25 sampled pages carry 600 or more words. First-hand markers were detected on 4 page(s): first person operator on 1, measurement on 3, artifact on 0. 1 link(s) to public code or dataset repositories were found.
Do TA-01 first.
Do this.
Add what you have actually seen: the cases, the numbers, the things that went wrong.
Say who did the work and when.
Show the artefacts where you can: screenshots, extracts, before and after.
Cut the passages that could have been written by somebody who had never done the work.
How to tell it worked. Ask whether a competitor could publish the same page with their name on it. If yes, it carries no experience.
Why this rating, and who signed it
This is the site's genuine strength. The situation pages and the longer blog posts carry operator-level specifics that a summariser could not generate: seven ecommerce platforms consolidated into one, three ERPs merged, roughly 60 client integrations, a compliance program taken from zero to audit-ready in under a year. Short of Complete because none of it is backed by a published artifact: no template, dataset, worked example, or repository a reader could open and use.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 28 record(s) (records the reviewer cited are listed first)ev_5cfea00370e86080 ev_37df1c06d90f71ac ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more record(s) in the JSON appendixWhere this is documented
Phrase detection finds the shape of first-hand reporting, not its truth. A reviewer must confirm the experience is real and the artifact resolves.
15. TE-02 Expertise and credential support
PartialMinor2 point(s) at stake
What we found. 16 distinct credential-shaped claim(s) were detected across 7 page(s) in 37 occurrence(s); 2 appear within 120 characters of a date. No unexplained logo-wall pattern was detected.
Do this.
State the qualifications, certifications and years that are actually relevant to what you sell.
Link to the issuing body where the credential can be verified.
Drop credentials that sound impressive and mean nothing here.
Attach them to a named person rather than to the company in the abstract.
How to tell it worked. Pick one credential and try to verify it from the page alone.
Why this rating, and who signed it
ISO 27001, SOC 2 Type 2, and HIPAA appear repeatedly and are central to the site's positioning, but they are described as programs built inside an employer rather than as credentials held, and no issuer, audit period, certifying body, or scope statement appears anywhere. Only two of sixteen distinct credential statements sit within 120 characters of a date; the sixteen are repeated 37 times across the sample. A reader cannot tell which certifications belong to which organization, or when.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 28 record(s) (records the reviewer cited are listed first)ev_37df1c06d90f71ac ev_02acb40138951a1a ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more record(s) in the JSON appendixWhere this is documented
No credential was verified against its issuing body. That verification is outside the scope of a public-content audit and would be a Verified Audit tier activity.
18. CI-03 Stable passage structure
SubstantialMinor1 point(s) at stake
What we found. Across 25 sampled pages the median page carries 2 heading(s). 25 declare exactly one H1, 5 give at least one heading an id that can be linked directly, and 8 use a table or list. 2 page(s) exceed 400 words with fewer than three headings: https://chrisbrock.io/about, https://chrisbrock.io/blog/shadow-it-and-your-data. 3 page(s) skip a heading level: https://chrisbrock.io/blog: h1 followed by h3; https://chrisbrock.io/reading: h1 followed by h3; https://chrisbrock.io/blog/fostering-innovation-within-it-teams: h1 followed by h3.
Do this.
Give each page exactly one H1 that says what the page is.
Use H2 and H3 in order, with no skipped levels, and make each heading describe the section beneath it.
Break long sections so no passage runs past a few hundred words without a heading.
Avoid headings that are only labels ('Overview', 'More') where a specific one would do.
How to tell it worked. Read the headings alone, top to bottom. They should read as an outline of the page.
Evidence: 26 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 18 more record(s) in the JSON appendixWhere this is documented
What we found. Structured-data identity names: 'Chris Brock' on 25 page(s). Declared og:site_name values: 'Chris Brock'. 2 contact value(s) appear in structured data: email=mailto:cb@chrisbrock.io, address(structured). 25 distinct meta description(s) were served across 25 pages.
Do this.
Decide which name is the operating entity and which, if any, are brands or products under it.
Use that name identically in the <title> suffix, the og:site_name, the footer and the Organization structured data.
Publish one page that states who operates the site, where, and how to reach a human, and link it from the footer.
Add Organization structured data with name, url, logo, and sameAs pointing at the profiles you actually control.
How to tell it worked. Search your own brand name and confirm the entity a result describes is the one you meant.
Why this rating, and who signed it
One identity name, 'Chris Brock', is declared on all 25 sampled pages in JSON-LD and in og:site_name, with a consistent email and a structured postal address, and 25 distinct meta descriptions with no duplication. The gap that keeps this short of Complete: the site markets professional work but never names the operating legal entity behind it, so a reader cannot tell whether they would be contracting with an individual or with a company.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 27 record(s) (records the reviewer cited are listed first)ev_02acb40138951a1a ev_37df1c06d90f71ac ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 19 more record(s) in the JSON appendixWhere this is documented
Whether 'Chris Brock' and the operating entity should be presented as one identity or two is a business decision, not an observation.
22. TE-01 Ownership and accountability
SubstantialMinor1 point(s) at stake
What we found. About-style page(s) found: 1. Contact path(s) found: 1. 1 distinct mailto destination(s) and 1 form(s) appear in the sample. 25 organization or person entit(ies) are declared in structured data.
Do this.
Name the legal entity, its jurisdiction and its location somewhere permanent and linked from every page.
Give a real contact route that reaches a person, not only a form.
Name who is accountable for the work, with a role.
Keep it consistent with your Organization structured data.
How to tell it worked. Try to find out who runs the site using only the site, in under a minute.
Why this rating, and who signed it
Read /about, /contact, and /privacy. A named individual, a stated role, a city, a working email address, a contact form that states plainly what it does with a submission, and detailed privacy pages. Accountability is well above what most sites in this category offer. Short of Complete only because the operating legal entity is never named.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 29 record(s) (records the reviewer cited are listed first)ev_37df1c06d90f71ac ev_d76db615ec2be435 ev_05b6bc243d937501 ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) and 21 more record(s) in the JSON appendixWhere this is documented
The contact path was not exercised: no form was submitted and no mail was sent, by policy.
23. CI-05 Content freshness signals
SubstantialMinor0.75 point(s) at stake
What we found. 15 of 25 sampled pages expose a date in visible text, structured data, or a time element (60.0%). 6 of 6 article-style pages carry a date. No contradiction was found between visible and structured dates in the sample.
Do this.
Publish a real date on content where recency matters, and update it only when the content changes.
Mark it up with <time datetime> and with datePublished and dateModified in structured data.
Say what changed, where a substantive revision is worth a note.
Remove auto-updating dates that move without the content moving. They are noise and readers learn to ignore them.
How to tell it worked. Compare the displayed date, the <time> attribute and the structured data on one page.
Evidence: 26 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 18 more record(s) in the JSON appendixWhere this is documented
What we found. 50 of 67 entit(ies) declare an @id (74.6%), producing 2 distinct identifier(s). 43 relationship reference(s) were found across 3 relationship type(s). 25 entit(ies) declare sameAs links to external profiles.
Do SD-01 first.
Do this.
Connect the entities: an Article to its author and publisher, a Product to its brand and offers, a Person to their organisation.
Use @id so the same entity referenced from two pages is one entity, not two.
Keep the graph honest. Do not assert a relationship that is not real.
Remove orphan nodes that nothing points at.
How to tell it worked. Validate a page and check the graph it produces has the links you intended.
Evidence: 25 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 17 more record(s) in the JSON appendixWhere this is documented
What we found. Privacy policy reference(s): 2. Terms reference(s): 0. 1 form(s) appear in the sample. 25 page(s) show evidence of third-party analytics being loaded. No terms or service-boundary page was found in the sample.
Do this.
Write down what you do not do, and who you are a bad fit for.
State the terms that actually bite: what is included, what is billed separately, what the refund position is.
Give the limits of any claim you make, in the same place as the claim.
Put these where a buyer will read them before they buy, not only in the terms page.
How to tell it worked. Ask somebody to find, from the site alone, one thing you will not do.
Why this rating, and who signed it
Read /privacy and /privacy/maildash. Both are substantive, current, and specific, including a separate children's privacy policy for a named product and an explicit data-minimization statement in the footer of every page. No terms-of-service page exists, but the site sells nothing on-site and takes no payment, so a terms page is not applicable to the current offer. Short of Complete because the contact form collects a message and a company website without the privacy policy being linked from the form itself.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 28 record(s) (records the reviewer cited are listed first)ev_05b6bc243d937501 ev_d76db615ec2be435 ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more record(s) in the JSON appendixWhere this is documented
Policy pages linked but not sampled were not read; whether a policy's content matches actual practice is outside the scope of a public-content audit.
26. CR-03 Sitemap quality
SubstantialMinor0.5 point(s) at stake
What we found. 3 sitemap document(s) were retrieved; 3 parsed cleanly and 0 did not. 68 unique URL(s) are listed. 0 of 68 entries carry a lastmod value (0.0%). 25 listed URL(s) were sampled and returned a successful response.
Do CR-02 first.
Do this.
Generate the sitemap from the same source that generates your routes so it cannot drift.
Include only canonical, indexable, 200-returning URLs. Drop redirects, 404s and noindex pages.
Set lastmod from the content's real modification date, not the build time.
Reference the sitemap from robots.txt and submit it in Search Console.
How to tell it worked. Fetch each URL in the sitemap and confirm every one returns 200 and is self-canonical.
Evidence: 6 record(s)ev_631ef8e431bf6b57 (robots_parse on https://chrisbrock.io/robots.txt at 2026-09-01T11:47:18+00:00) ev_7319da06a1333440 (sitemap_parse on https://chrisbrock.io/sitemap-index.xml at 2026-09-01T11:47:18+00:00) ev_01466bf10e8fce8d (sitemap_parse on https://chrisbrock.io/sitemap-index.xml at 2026-09-01T11:47:18+00:00) ev_123930a05a4a98e9 (sitemap_parse on https://chrisbrock.io/sitemap_index.xml at 2026-09-01T11:47:18+00:00) ev_dd50e9e4dd2ac140 (sitemap_parse on https://chrisbrock.io/sitemap-0.xml at 2026-09-01T11:47:18+00:00) ev_c0e6b54fd0fbfc3c (derived_analysis on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00)Where this is documented
Only 25 of 68 listed URLs were sampled within the configured page limit.
27. TA-04 Internal topic relationships
SubstantialMinor0.75 point(s) at stake
What we found. Across 25 sampled pages the median page links to 8 other sampled page(s). 0 sampled page(s) received no internal link from any other sampled page, and 12 received exactly one.
Do TA-01 first.
Do this.
Link related pages to each other with anchor text that says what the target is about.
Make sure no substantive page is reachable only from the sitemap.
Group pages that belong together under a hub page that links to all of them.
Remove links that exist only for volume; they dilute the ones that mean something.
If a URL you expected in this finding is missing, it declares a canonical naming another page you were shown: it is counted as that page and needs no links of its own.
How to tell it worked. Start at the home page and try to reach each important page in three clicks. Query-string variants of a page you can already reach do not need their own route.
Evidence: 26 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 18 more record(s) in the JSON appendixWhere this is documented
Only the 25 sampled pages were analysed; a page may receive links from pages outside the sample.
28. EN-03 People and authorship identity
SubstantialMinor1 point(s) at stake
What we found. 25 Person entit(ies) and 12 structured author reference(s) were found. Meta author values: 'Chris Brock'. 6 of 6 article-style pages carry an author attribution. 25 Person entit(ies) link to external profiles via sameAs.
Do EN-01 first.
Do this.
Give every piece of authored content a named author, not a company byline or 'admin'.
Give each author a page with their role, their relevant background, and how to verify it.
Link author to organisation both ways, in the prose and in Person or Article structured data.
Keep the same spelling of a name everywhere it appears.
How to tell it worked. Open an article and confirm you can get from the byline to a page that says who wrote it.
Why this rating, and who signed it
A Person entity with jobTitle, address, knowsAbout, and sameAs links to LinkedIn and GitHub is declared on all 25 sampled pages, all six sampled articles carry an author attribution, and /about carries a substantive first-person biography with specific roles and scope. Short of Complete because no credential is tied to an issuer or a date, so the expertise is described rather than evidenced.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 27 record(s) (records the reviewer cited are listed first)ev_37df1c06d90f71ac ev_02acb40138951a1a ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 19 more record(s) in the JSON appendixWhere this is documented
Whether a stated credential is real, current, and in scope cannot be established from the site alone.
32. AC-02 Machine-readable guidance quality
PartialMinor1 point(s) at stake
What we found. 2 machine-readable guidance file(s) are served: /llms.txt (1925 bytes, 11 link(s)), /.well-known/security.txt (187 bytes, 2 link(s)). 1 link(s) inside the link-index files point off the audited domain. /.well-known/security.txt is not a link index, so outbound links in it are not counted: prose quotes URLs, and a site publishing work it did for somebody else has to name that site. These conventions are voluntary. Serving them is not a ranking or citation guarantee, and no engine is known to require them.
Do this.
Publish an llms.txt that points at the pages you most want quoted.
Keep it to real, current, canonical URLs with a line each on what they cover.
Generate it from the same source as your sitemap so the two cannot disagree.
Serve it as text/plain at the root with a 200.
How to tell it worked. Fetch /llms.txt and check every URL in it returns 200 and is canonical.
Evidence: 4 record(s)ev_cd0267b89a631aa6 (http_get on https://chrisbrock.io/llms.txt at 2026-09-01T11:47:18+00:00) ev_de23964c65dfad3f (http_get on https://chrisbrock.io/llms-full.txt at 2026-09-01T11:47:18+00:00) ev_5a2b08d3801bceba (http_get on https://chrisbrock.io/ai.txt at 2026-09-01T11:47:18+00:00) ev_bbb2e4646545eeb3 (http_get on https://chrisbrock.io/.well-known/security.txt at 2026-09-01T11:47:18+00:00)Where this is documented
Whether the content of a guidance file is accurate and current is a reviewer judgement.
33. AC-03 Agent-facing transaction boundaries
SubstantialMinor0.25 point(s) at stake
What we found. 1 page(s) expose a form and 3 mention a purchase surface. The collector never submits a form or performs any state-changing request, so interaction boundaries were not exercised.
Do this.
Decide what an automated agent is permitted to do on your site: read, enquire, book, buy.
Say so in writing, somewhere an agent's operator can find it, and in your terms.
Make the technical controls match the stated policy.
Give a contact route for agent operators who need an exception.
How to tell it worked. Read your own policy and check that the site enforces it.
Why this rating, and who signed it
The site exposes exactly one interactive surface, the contact form, and the page states its boundary in plain language directly beside it: the form sends a single email and adds the sender to no list. There is no checkout, no account, no public API, and nothing that could commit a visitor to anything. Short of Complete because that boundary is stated only in prose, with no machine-readable equivalent.
Signed by Chris Brock (signed 2026-08-30); assisted review by Claude Code.
Evidence: 27 record(s) (records the reviewer cited are listed first)ev_d76db615ec2be435 ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) and 19 more record(s) in the JSON appendixWhere this is documented
No form was submitted and no state-changing request was made, by policy. The boundary was read from the page, not exercised.
What we could not settle
9 check(s) came back inconclusive. The audit established nothing about them, which is not the same as finding a fault, and they took no points away from your score in either direction. Each line says what stopped us.
CR-06 Body text is machine-readable prose. No template syntax was found in the visible text of 25 sampled page(s). Rated inconclusive rather than complete: that would say that no page on the site prints template syntax as body text, and this run collection stopped at a configured bound (max_pages=25) with URLs still queued, so it can only speak for the 25 page(s) it read. This is a limit of the collection, not a finding about the site. Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
CR-02 Robots and crawler directives. robots.txt was retrieved and parsed: 1 group(s) covering user-agents *, 1 declared sitemap(s). The group matching this crawler allows 1 and disallows 0 path pattern(s). No sampled page declared a noindex directive in markup or headers. Rated inconclusive rather than complete: that would say that no page on the site is blocked or carries a conflicting noindex, and this run collection stopped at a configured bound (max_pages=25) with URLs still queued, so it can only speak for the 25 page(s) it read. This is a limit of the collection, not a finding about the site. Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
CR-01 Stable successful retrieval. 25 of 25 sampled URLs returned a successful response (100.0%). Median response time was 1106 ms. Rated inconclusive rather than complete: that would say that no page on the site returns an error or comes back empty, and this run collection stopped at a configured bound (max_pages=25) with URLs still queued, so it can only speak for the 25 page(s) it read. This is a limit of the collection, not a finding about the site. Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
SD-01 Valid core entities. 25 of 25 sampled pages carry JSON-LD (100.0%), producing 67 entit(ies). Declared types: Person (25), WebSite (25), Article (6), Review (6), BreadcrumbList (5). Core identity types present: Person, WebSite. Rated inconclusive rather than complete: that would say that every page on the site carries valid structured data, and this run collection stopped at a configured bound (max_pages=25) with URLs still queued, so it can only speak for the 25 page(s) it read. This is a limit of the collection, not a finding about the site. Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
SD-03 Page-specific markup. 6 of 6 sampled article-style pages declare an Article type in structured data (100.0%). 5 of 25 sampled pages declare BreadcrumbList markup. Rated inconclusive rather than complete: that would say that every article on the site carries article markup, and this run collection stopped at a configured bound (max_pages=25) with URLs still queued, so it can only speak for the 25 page(s) it read. This is a limit of the collection, not a finding about the site. Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
SD-04 Metadata consistency. Across 25 sampled pages: 25 declare a title, 25 a meta description, 25 an html lang attribute, and 25 Open Graph titles. No metadata inconsistency was found in the sample. Rated inconclusive rather than complete: that would say that no page on the site has inconsistent metadata, and this run collection stopped at a configured bound (max_pages=25) with URLs still queued, so it can only speak for the 25 page(s) it read. This is a limit of the collection, not a finding about the site. Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
EN-04 External identity reconciliation. The site links out to 4 distinct external host(s); 2 sameAs URL(s) are declared in structured data. No owned profiles were declared at intake, so nothing could be reconciled. Open each declared and each linked profile, confirm ownership, and record any inconsistency in name, description, or domain.
CR-05 Rendered content availability. Raw HTML (no JavaScript execution) already carries a median of 396 words and a median of 3 script element(s) per sampled page. 24 of 25 pages carry 150 or more words before rendering, and 25 expose an H1 in raw HTML. 0 page(s) include noscript content. Load the sampled pages in a browser with JavaScript enabled and compare the rendered text and headings against the raw HTML excerpt in the evidence. Rate Complete only if the raw HTML already carries the primary claims, navigation, and headings.
MR-02 Referral and conversion attribution. Public markup and response headers indicate 2 analytics or measurement provider(s): google-analytics.com, googletagmanager.com. Whether referrals from AI answer surfaces can be isolated and tied to qualified outcomes cannot be determined from public pages. Review the analytics configuration with the customer and record whether AI referrals can be isolated and tied to a meaningful outcome.
What is working
12 of 33 checks reached Substantial or Complete. These are the foundations the remediation work builds on, and they are worth protecting when the site changes.
CI-03 Stable passage structure (Substantial): Across 25 sampled pages the median page carries 2 heading(s). 25 declare exactly one H1, 5 give at least one heading an id that can be linked directly, and 8 use a table or list. 2 page(s) exceed 400 words with fewer than three headings: https://chrisbrock.io/about, https://chrisbrock.io/blog/shadow-it-and-your-data. 3 page(s) skip a heading level: https://chrisbrock.io/blog: h1 followed by h3; https://chrisbrock.io/reading: h1 followed by h3; https://chrisbrock.io/blog/fostering-innovation-within-it-teams: h1 followed by h3.
EN-01 Organization identity consistency (Substantial): Structured-data identity names: 'Chris Brock' on 25 page(s). Declared og:site_name values: 'Chris Brock'. 2 contact value(s) appear in structured data: email=mailto:cb@chrisbrock.io, address(structured). 25 distinct meta description(s) were served across 25 pages.
EN-03 People and authorship identity (Substantial): 25 Person entit(ies) and 12 structured author reference(s) were found. Meta author values: 'Chris Brock'. 6 of 6 article-style pages carry an author attribution. 25 Person entit(ies) link to external profiles via sameAs.
TA-02 First-hand experience (Substantial): 10 of 25 sampled pages carry 600 or more words. First-hand markers were detected on 4 page(s): first person operator on 1, measurement on 3, artifact on 0. 1 link(s) to public code or dataset repositories were found.
TE-01 Ownership and accountability (Substantial): About-style page(s) found: 1. Contact path(s) found: 1. 1 distinct mailto destination(s) and 1 form(s) appear in the sample. 25 organization or person entit(ies) are declared in structured data.
CI-05 Content freshness signals (Substantial): 15 of 25 sampled pages expose a date in visible text, structured data, or a time element (60.0%). 6 of 6 article-style pages carry a date. No contradiction was found between visible and structured dates in the sample.
SD-02 Entity relationships (Substantial): 50 of 67 entit(ies) declare an @id (74.6%), producing 2 distinct identifier(s). 43 relationship reference(s) were found across 3 relationship type(s). 25 entit(ies) declare sameAs links to external profiles.
TA-04 Internal topic relationships (Substantial): Across 25 sampled pages the median page links to 8 other sampled page(s). 0 sampled page(s) received no internal link from any other sampled page, and 12 received exactly one.
and 4 further check(s) rated Substantial or better.
Highest-value actions
The same actions as the section above, as a table to sort and hand around. Impact and confidence are scored 1 to 5, higher being better. Points at stake is the rubric points this item can still recover.
Prioritized implementation backlog. Priority = impact1.5 × (1 + points at stake ÷ 5) × confidence factor ÷ an implementation-cost factor. That last factor is a rough 1 to 5 judgement of how much work a fix is, used to order the list and never published as a duration: we can see what the site is missing and not what it takes to change it. Each item's recommendation is the row beneath its numbers.
#
Action
Severity
Impact
Confidence
Points
Priority
Depends on
1
CI-02 Claim support
Critical
4
5
3.75
8.24
CI-04
Recommendation for CI-02 Claim support: For each material claim, put its provenance next to it. An external source is strongest. Where none exists -- which is the normal case for a private operating figure -- a first-person attestation is still a source: name who is asserting it, the period it covers, the scope it covers, and the basis ("our internal figures", "verifiable on reference check"). Removing a true claim is the last resort, not the first.
2
CR-06 Body text is machine-readable prose
Unresolved
4
5
1
7.11
None
Recommendation for CR-06 Body text is machine-readable prose: Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
3
CI-01 Direct answer passages
Major
4
5
2.5
7.06
CI-03
Recommendation for CI-01 Direct answer passages: Give each priority question its own heading and a self-contained two-to-four sentence answer directly beneath it.
4
CI-04 Source attribution
Major
3
5
2.25
5.58
None
Recommendation for CI-04 Source attribution: Cite the standard, study, or filing next to the claim it supports, with the source name and date visible in the text rather than only in a link.
5
MR-01 Baseline question set
Major
3
5
1.5
5
None
Recommendation for MR-01 Baseline question set: Agree and version a question set covering buying questions, brand variations, comparison questions, and geography, dated before the first measurement.
6
TA-01 Priority-question coverage
Major
4
3
2
4.64
CI-01
Recommendation for TA-01 Priority-question coverage: Write one substantive owning page for each uncovered priority question, and consolidate pages that compete for the same question.
7
CR-04 Canonical and duplicate control
Minor
3
5
1
4.62
CR-01
Recommendation for CR-04 Canonical and duplicate control: Redirect every non-canonical host and protocol variant to the canonical origin with a 301, and declare a self-referencing canonical on every page.
8
EN-02 Product and service identity
Minor
3
5
2
4.28
EN-01
Recommendation for EN-02 Product and service identity: Give each offering one page with a stable URL, a one-sentence definition, a named audience, and structured data that ties it to the organization.
9
CR-02 Robots and crawler directives
Unresolved
2
5
1.5
3.68
None
Recommendation for CR-02 Robots and crawler directives: Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
10
TA-03 Comparative and decision content
Minor
3
3
2
3.64
None
Recommendation for TA-03 Comparative and decision content: Publish one honest comparison or decision page with a criteria table, and state explicitly where the offering is not the right fit.
11
TE-03 Customer and outcome evidence
Minor
3
5
2
3.55
TE-01
Recommendation for TE-03 Customer and outcome evidence: Publish at least one case example with the situation, the intervention, the measurement window, the baseline, and the result, with the customer's permission recorded.
12
MR-03 Recheck discipline
Major
2
5
1
3.39
MR-01
Recommendation for MR-03 Recheck discipline: Fix a recheck cadence and record the rubric version, crawl sample, and question set used for each run so score movement can be attributed to the site rather than the method.
13
AC-01 Intentional crawler treatment
Minor
2
5
0.5
3.11
None
Recommendation for AC-01 Intentional crawler treatment: Decide explicitly which AI crawlers may retrieve the site, record the decision, and express it in robots.txt so a future deploy cannot silently change it.
14
TA-02 First-hand experience
Minor
3
5
1
3.04
TA-01
Recommendation for TA-02 First-hand experience: Publish the method, the numbers, and the artifact behind at least one claim per topic: a repository, a dataset, a template, or a documented before-and-after measurement.
15
TE-02 Expertise and credential support
Minor
2
5
2
2.93
None
Recommendation for TE-02 Expertise and credential support: State the issuing body, the scope, the date, and the entity the credential belongs to next to every credential claim.
16
CR-01 Stable successful retrieval
Unresolved
2
5
1.5
2.72
None
Recommendation for CR-01 Stable successful retrieval: Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
17
SD-01 Valid core entities
Unresolved
2
5
1.5
2.72
None
Recommendation for SD-01 Valid core entities: Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
18
CI-03 Stable passage structure
Minor
2
5
1
2.51
None
Recommendation for CI-03 Stable passage structure: Give every page one H1, a descriptive H2 for each distinct answer, and a stable id on each H2 so a passage can be linked directly.
19
EN-01 Organization identity consistency
Minor
2
5
1
2.51
None
Recommendation for EN-01 Organization identity consistency: State one organization or person name, one description, and one contact path consistently in visible content and in structured data on every page.
20
SD-03 Page-specific markup
Unresolved
2
5
1
2.51
SD-01
Recommendation for SD-03 Page-specific markup: Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
21
SD-04 Metadata consistency
Unresolved
2
5
1
2.51
SD-01
Recommendation for SD-04 Metadata consistency: Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
22
TE-01 Ownership and accountability
Minor
2
5
1
2.51
None
Recommendation for TE-01 Ownership and accountability: Name the operating entity, the responsible people, and a working contact path on a linked page, and mirror those facts in structured data.
23
CI-05 Content freshness signals
Minor
2
5
0.75
2.41
None
Recommendation for CI-05 Content freshness signals: Show a visible published and updated date on every article, and emit the same values as datePublished and dateModified in structured data.
24
SD-02 Entity relationships
Minor
2
5
0.75
2.41
SD-01
Recommendation for SD-02 Entity relationships: Give every entity a stable @id, reference the same identifiers across pages, and add sameAs links to owned external profiles.
25
TE-04 Policy and limitation clarity
Minor
2
5
0.75
2.41
None
Recommendation for TE-04 Policy and limitation clarity: Publish a dated privacy policy covering analytics and form data, and a terms or engagement-scope page that matches what is actually sold.
26
CR-03 Sitemap quality
Minor
2
5
0.5
2.3
CR-02
Recommendation for CR-03 Sitemap quality: Correct the entries identified in the evidence and ensure lastmod reflects real content changes.
27
TA-04 Internal topic relationships
Minor
2
3
0.75
2.05
TA-01
Recommendation for TA-04 Internal topic relationships: Link every evidence and educational page from the commercial page it supports, and from a topic index.
28
EN-03 People and authorship identity
Minor
2
5
1
2
EN-01
Recommendation for EN-03 People and authorship identity: Attribute every substantive page to a named person with a linked biography, role, and credentials, and connect that person to the organization in structured data.
29
EN-04 External identity reconciliation
Unresolved
2
1
1.5
1.91
EN-01
Recommendation for EN-04 External identity reconciliation: Link every owned profile from the site and declare it in sameAs, and retire or update profiles carrying a former brand.
30
CR-05 Rendered content availability
Unresolved
2
1
1.5
1.51
CR-01
Recommendation for CR-05 Rendered content availability: Serve primary claims, headings, navigation, and supporting evidence in the initial HTML response.
31
MR-02 Referral and conversion attribution
Unresolved
2
1
1
1.4
MR-01
Recommendation for MR-02 Referral and conversion attribution: Configure a referral segment for AI answer surfaces and connect it to a defined qualified-outcome event, or record the implementation backlog to do so.
32
AC-02 Machine-readable guidance quality
Minor
1
5
1
1.2
None
Recommendation for AC-02 Machine-readable guidance quality: Keep the guidance file generated from the same source as the sitemap so it cannot go stale.
33
AC-03 Agent-facing transaction boundaries
Minor
1
5
0.25
0.78
None
Recommendation for AC-03 Agent-facing transaction boundaries: Document what each form or endpoint commits the visitor to, require authentication for anything that creates an obligation, and state the approval step in public documentation.
Page-structure checklist
6 good, 6 weak, 1 missing across 13 structural elements. This table scores nothing. It presents observations the checks already made, so the last column names where each row came from.
Structural elements an answer engine looks for.
Element
The question it answers
State
What was observed
From
Answer passages
Does any heading pose the question a buyer asks?
Weak
1 question-phrased heading(s) across 25 sampled page(s).
CI-01
Linkable passages
Can a single passage be cited by URL?
Weak
5 of 25 page(s) give a heading an id.
CI-03
Claim support
Does a material claim have something behind it?
Weak
41 distinct material claim candidate(s); 40 state no provenance at all.
CI-02, CI-04
Source attribution
Does the site cite anything outside itself?
Weak
2 of 25 page(s) link a destination that could serve as a source.
25 Person entit(ies); 0 article-style page(s) unattributed.
EN-03
Offering definition
Can an engine name what is actually sold?
Missing
0 Product/Service entit(ies); 1 offering(s) named only in a URL.
EN-02, SD-01
Comparison and fit
Does the site say who it is not for?
Good
11 page(s) with comparison language, 6 stating a limitation or fit boundary.
TA-03
Structured data
Is the machine-readable description connected?
Good
67 entit(ies), 50 carrying a stable @id.
SD-01, SD-02
Contact path
Can a convinced reader reach a human?
Good
1 contact destination(s), 1 about page(s).
TE-01
Policies
Are the data and service boundaries stated?
Weak
2 privacy reference(s), 0 terms reference(s).
TE-04
Machine-readable guidance
Is there an index written for machines?
Good
/.well-known/security.txt, /llms.txt
AC-02
Delivery context
Context for reading the findings. None of this is scored, and no request was made to collect it. It is read from response headers and page text already captured.
Observed delivery characteristics.
Signal
Observed
Transport
35 of 36 retained response(s) were served over HTTPS.
45.2, Difficult, across 25 page(s). Hardest: 19.7 at https://chrisbrock.io/blog.
Read from response headers already captured during collection. No additional request was made, and none of this is scored. Reading ease is a readability proxy, not a rubric check. It carries no points. A low score is not automatically a defect: a technical audience may want dense prose.
Every check, and what it rested on
How to read this. The measurements are the tool's; the judgements are a person's; the score is arithmetic over both. No part of this report was written or rated by a language model.
automated means the tool observed it and the observation is reproducible from the evidence record. operator means a named reviewer read that evidence and made a judgement, with the reason recorded beside it. Weigh them differently. You should.
All 33 checks, including the ones that found nothing to do. A check name links to the work it generated, where the finding, the fix and the reviewer’s reasoning are written out once.
CR · Crawl and retrieval accessibility (15 points)
Every crawl and retrieval accessibility check, its rating and the evidence it rests on.
27 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 19 more in the JSON appendix
26 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 18 more in the JSON appendix
26 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 18 more in the JSON appendix
26 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 18 more in the JSON appendix
6 record(s)ev_631ef8e431bf6b57 (robots_parse on https://chrisbrock.io/robots.txt at 2026-09-01T11:47:18+00:00) ev_7319da06a1333440 (sitemap_parse on https://chrisbrock.io/sitemap-index.xml at 2026-09-01T11:47:18+00:00) ev_01466bf10e8fce8d (sitemap_parse on https://chrisbrock.io/sitemap-index.xml at 2026-09-01T11:47:18+00:00) ev_123930a05a4a98e9 (sitemap_parse on https://chrisbrock.io/sitemap_index.xml at 2026-09-01T11:47:18+00:00) ev_dd50e9e4dd2ac140 (sitemap_parse on https://chrisbrock.io/sitemap-0.xml at 2026-09-01T11:47:18+00:00) ev_c0e6b54fd0fbfc3c (derived_analysis on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00)
EN · Entity clarity (15 points)
Every entity clarity check, its rating and the evidence it rests on.
27 record(s)ev_5cfea00370e86080 ev_2414ab046b888d58 ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 19 more in the JSON appendix
25 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 17 more in the JSON appendix
27 record(s)ev_02acb40138951a1a ev_37df1c06d90f71ac ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 19 more in the JSON appendix
27 record(s)ev_37df1c06d90f71ac ev_02acb40138951a1a ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 19 more in the JSON appendix
CI · Citation readiness (20 points)
Every citation readiness check, its rating and the evidence it rests on.
29 record(s)ev_02acb40138951a1a ev_37df1c06d90f71ac ev_5cfea00370e86080 ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) and 21 more in the JSON appendix
28 record(s)ev_02acb40138951a1a ev_37df1c06d90f71ac ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more in the JSON appendix
28 record(s)ev_5cfea00370e86080 ev_37df1c06d90f71ac ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more in the JSON appendix
26 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 18 more in the JSON appendix
26 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 18 more in the JSON appendix
TA · Topical coverage and authority (15 points)
Every topical coverage and authority check, its rating and the evidence it rests on.
28 record(s)ev_1a94ac29449f2fa0 ev_2414ab046b888d58 ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more in the JSON appendix
28 record(s)ev_2414ab046b888d58 ev_37df1c06d90f71ac ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more in the JSON appendix
28 record(s)ev_5cfea00370e86080 ev_37df1c06d90f71ac ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more in the JSON appendix
26 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 18 more in the JSON appendix
TE · Trust and evidence (15 points)
Every trust and evidence check, its rating and the evidence it rests on.
28 record(s)ev_37df1c06d90f71ac ev_02acb40138951a1a ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more in the JSON appendix
28 record(s)ev_2414ab046b888d58 ev_37df1c06d90f71ac ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more in the JSON appendix
29 record(s)ev_37df1c06d90f71ac ev_d76db615ec2be435 ev_05b6bc243d937501 ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) and 21 more in the JSON appendix
28 record(s)ev_05b6bc243d937501 ev_d76db615ec2be435 ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) and 20 more in the JSON appendix
SD · Structured data (10 points)
Every structured data check, its rating and the evidence it rests on.
25 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 17 more in the JSON appendix
25 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 17 more in the JSON appendix
26 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 18 more in the JSON appendix
25 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 17 more in the JSON appendix
AC · AI and agent controls (5 points)
Every ai and agent controls check, its rating and the evidence it rests on.
4 record(s)ev_cd0267b89a631aa6 (http_get on https://chrisbrock.io/llms.txt at 2026-09-01T11:47:18+00:00) ev_de23964c65dfad3f (http_get on https://chrisbrock.io/llms-full.txt at 2026-09-01T11:47:18+00:00) ev_5a2b08d3801bceba (http_get on https://chrisbrock.io/ai.txt at 2026-09-01T11:47:18+00:00) ev_bbb2e4646545eeb3 (http_get on https://chrisbrock.io/.well-known/security.txt at 2026-09-01T11:47:18+00:00)
27 record(s)ev_d76db615ec2be435 ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) and 19 more in the JSON appendix
MR · Measurement readiness (5 points)
Every measurement readiness check, its rating and the evidence it rests on.
26 record(s)ev_26dae81084395fbd (html_parse on https://chrisbrock.io/ at 2026-09-01T11:47:18+00:00) ev_181923593d69d1ad (html_parse on https://chrisbrock.io/about at 2026-09-01T11:47:18+00:00) ev_b43822a0840b8666 (html_parse on https://chrisbrock.io/blog at 2026-09-01T11:47:18+00:00) ev_184a171e0dda1ab0 (html_parse on https://chrisbrock.io/contact at 2026-09-01T11:47:18+00:00) ev_541bd768a7b66d4b (html_parse on https://chrisbrock.io/privacy at 2026-09-01T11:47:18+00:00) ev_6a89d676c8230970 (html_parse on https://chrisbrock.io/reading at 2026-09-01T11:47:18+00:00) ev_5072982e68a4e927 (html_parse on https://chrisbrock.io/situations at 2026-09-01T11:47:18+00:00) ev_9e45852684409986 (html_parse on https://chrisbrock.io/blog/shadow-it-and-your-data at 2026-09-01T11:47:18+00:00) and 18 more in the JSON appendix
Page-by-page collection results
25 page(s) collected in 42.49 seconds across 36 request(s), 287,465 bytes.
Every URL the collector attempted, with the evidence record produced for it.
URL
Status
Outcome
Title
Words
Depth
Evidence
https://chrisbrock.io/
200
success
Chris Brock | Chief Information Officer | Security, Compliance & AI
The CIO's Role in AI Governance: Building Trust Without Killing Innovation | Chris Brock
1259
1
ev_8c273ccb899617be
https://chrisbrock.io/reading/good-to-great
200
success
Good to Great | Recommended Reading | Chris Brock
384
1
ev_d574e33342883c63
Entity and source-consistency map
How this site names itself, who it attributes work to, and which external properties it connects to.
Declared identity values across the sample.
Source
Value
Seen on
Structured data name
Chris Brock
25 page(s)
og:site_name
Chris Brock
25 page(s)
People and authorship
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
Chris Brock, Chief Information Officer (links to external profiles)
External properties linked from the site
a.co
github.com
linkedin.com
www.cioinsight.com
Structured-data identifiers
50 of 67 entities declare a stable @id. Unresolvable references:
None
Answer-ready content briefs
Each brief exists because a specific priority question had no substantive owning page in the sample.
What does a fractional CIO actually do for a small company?
Gap. No sampled page covers half or more of this question's key terms.
Brief. Create one owning page. Open with a two-to-four sentence answer under an H2 that repeats the question, then support it with the method, the constraint, and one worked example.
Raised by check TA-01
How much does a fractional or interim CIO cost?
Gap. No sampled page covers half or more of this question's key terms.
Brief. Create one owning page. Open with a two-to-four sentence answer under an H2 that repeats the question, then support it with the method, the constraint, and one worked example.
Raised by check TA-01
Structured-data backlog
Outstanding structured-data work, with the parser output that raised it.
SD-01, currently inconclusive
Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
Ordered so that no item is scheduled before the work it depends on.
Days 1-7: retrieval, identity, and directives
#2 CR-06 Body text is machine-readable prose: Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
#9 CR-02 Robots and crawler directives: Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
#13 AC-01 Intentional crawler treatment: Decide explicitly which AI crawlers may retrieve the site, record the decision, and express it in robots.txt so a future deploy cannot silently change it.
#16 CR-01 Stable successful retrieval: Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
#19 EN-01 Organization identity consistency: State one organization or person name, one description, and one contact path consistently in visible content and in structured data on every page.
#32 AC-02 Machine-readable guidance quality: Keep the guidance file generated from the same source as the sitemap so it cannot go stale.
#33 AC-03 Agent-facing transaction boundaries: Document what each form or endpoint commits the visitor to, require authentication for anything that creates an obligation, and state the approval step in public documentation.
Days 8-16: structure, evidence, and structured data
#4 CI-04 Source attribution: Cite the standard, study, or filing next to the claim it supports, with the source name and date visible in the text rather than only in a link.
#7 CR-04 Canonical and duplicate control: Redirect every non-canonical host and protocol variant to the canonical origin with a 301, and declare a self-referencing canonical on every page.
#8 EN-02 Product and service identity: Give each offering one page with a stable URL, a one-sentence definition, a named audience, and structured data that ties it to the organization.
#15 TE-02 Expertise and credential support: State the issuing body, the scope, the date, and the entity the credential belongs to next to every credential claim.
#17 SD-01 Valid core entities: Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
#18 CI-03 Stable passage structure: Give every page one H1, a descriptive H2 for each distinct answer, and a stable id on each H2 so a passage can be linked directly.
#22 TE-01 Ownership and accountability: Name the operating entity, the responsible people, and a working contact path on a linked page, and mirror those facts in structured data.
#23 CI-05 Content freshness signals: Show a visible published and updated date on every article, and emit the same values as datePublished and dateModified in structured data.
#25 TE-04 Policy and limitation clarity: Publish a dated privacy policy covering analytics and form data, and a terms or engagement-scope page that matches what is actually sold.
#26 CR-03 Sitemap quality: Correct the entries identified in the evidence and ensure lastmod reflects real content changes.
#28 EN-03 People and authorship identity: Attribute every substantive page to a named person with a linked biography, role, and credentials, and connect that person to the organization in structured data.
#29 EN-04 External identity reconciliation: Link every owned profile from the site and declare it in sameAs, and retire or update profiles carrying a former brand.
#30 CR-05 Rendered content availability: Serve primary claims, headings, navigation, and supporting evidence in the initial HTML response.
Days 17-30: coverage, comparison, and measurement
#1 CI-02 Claim support: For each material claim, put its provenance next to it. An external source is strongest. Where none exists -- which is the normal case for a private operating figure -- a first-person attestation is still a source: name who is asserting it, the period it covers, the scope it covers, and the basis ("our internal figures", "verifiable on reference check"). Removing a true claim is the last resort, not the first.
#3 CI-01 Direct answer passages: Give each priority question its own heading and a self-contained two-to-four sentence answer directly beneath it.
#5 MR-01 Baseline question set: Agree and version a question set covering buying questions, brand variations, comparison questions, and geography, dated before the first measurement.
#6 TA-01 Priority-question coverage: Write one substantive owning page for each uncovered priority question, and consolidate pages that compete for the same question.
#10 TA-03 Comparative and decision content: Publish one honest comparison or decision page with a criteria table, and state explicitly where the offering is not the right fit.
#11 TE-03 Customer and outcome evidence: Publish at least one case example with the situation, the intervention, the measurement window, the baseline, and the result, with the customer's permission recorded.
#12 MR-03 Recheck discipline: Fix a recheck cadence and record the rubric version, crawl sample, and question set used for each run so score movement can be attributed to the site rather than the method.
#14 TA-02 First-hand experience: Publish the method, the numbers, and the artifact behind at least one claim per topic: a repository, a dataset, a template, or a documented before-and-after measurement.
#20 SD-03 Page-specific markup: Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
#21 SD-04 Metadata consistency: Nothing to act on from this result. Re-run against a sample that covers the site before treating this check as settled.
#24 SD-02 Entity relationships: Give every entity a stable @id, reference the same identifiers across pages, and add sameAs links to owned external profiles.
#27 TA-04 Internal topic relationships: Link every evidence and educational page from the commercial page it supports, and from a topic index.
#31 MR-02 Referral and conversion attribution: Configure a referral segment for AI answer surfaces and connect it to a defined qualified-outcome event, or record the implementation backlog to do so.
Measurement plan and limitations
Baseline question set
What does a fractional CIO actually do for a small company?
How much does a fractional or interim CIO cost?
How do I build a security and compliance program from zero?
How do I measure return on investment for an AI project?
How do I integrate technology after an acquisition?
When should a company hire a fractional CIO instead of a full-time CIO?
Who is Chris Brock and what has he actually built?
How do I consolidate multiple ecommerce platforms?
Analytics providers visible in public markup: google-analytics.com, googletagmanager.com.
Next steps
Version the question set and date it before the first measurement.
Create a referral segment for AI answer surfaces and connect it to a defined qualified-outcome event.
Fix a recheck cadence and record the rubric version, crawl sample, and question set used for each run.
What this measurement cannot tell you
Whether any AI answer product currently cites the site.
Whether a change to the site causes a change in citation, ranking, traffic, or revenue.
Limitations of this audit
This audit sampled 25 page(s) against a configured limit of 25 at a maximum depth of 2. Findings describe the sample, not every page on the site.
Scored against rubric version 0.8 using tool version adia/0.1.0. Score movement between runs can come from a rubric change as easily as a site change.
Collection used plain HTTP retrieval with no JavaScript execution. Content that appears only after client-side rendering was not observed.
Off-domain properties were not retrieved. The run was restricted to the authorized registrable domain.
No form was submitted, no authenticated content was accessed, and no state-changing request was made.
9 check(s) are inconclusive and contribute no points in either direction: CR-01, CR-02, CR-05, CR-06, EN-04, SD-01, SD-03, SD-04, MR-02. Their 23 points were removed from the denominator rather than scored as zeroes.
Collection stopped at a configured bound (max_pages=25). A larger sample may change coverage-dependent findings.
6 check(s) reached their top rating only because pages were left unread, and are recorded as inconclusive rather than as passes: CR-01, CR-02, CR-06, SD-01, SD-03, SD-04. Raising the page limit and re-running is what settles them; nothing about the site needs to change first.
This audit measures conditions a site can control against rubric version 0.8. It does not guarantee placement, ranking, citation, recommendation, traffic, leads, or revenue in any search engine or AI answer product, and a low score does not prove a site is absent from AI-generated answers.
Agent tooling, observed and not scored
An engine that cites you is reading. An agent that books your appointment is acting. This audit measures the first. WebMCP, the proposal for the second, lets a page register JavaScript functions an agent can call, through document.modelContext.registerTool().
None of the 25 sampled pages declares agent tooling. That is the ordinary state of the web today and it costs this audit nothing: no check gains or loses a point either way.
Where the standard stands
A Draft Community Group Report at the W3C Web Machine Learning Community Group, dated 15 September 2026, which states on its face that it is not a W3C Standard and is not on the W3C Standards Track.
WebMCP implementation state, read from the specification’s own implementation table on 17 September 2026
Implementation
State
Chrome
origin trial live in Chrome 149, running to 156
Edge
origin trial live in Edge 150
ChatGPT Desktop
supported
Brave
experimental, in Leo
Firefox
under standards review, no support
Safari
under standards review, no support
Read from the specification and its own implementation table on 17 September 2026. Two things are worth knowing before anybody acts on a blog post about this. Much of the secondary coverage says the API is navigator.modelContext; the specification and Chrome’s documentation both say document.modelContext. And the declarative HTML form syntax that several demos show is section 4.3 of the specification, which currently reads, in full, that it is a TODO.
What we are not telling you
We are not telling you to adopt this, and we are not telling you it would bring you agent traffic. Nobody has published usage data that would support the second claim, and the adoption figures in circulation carry no methodology anywhere they appear. Exposing callable tools also widens what an agent can do on your site while prompt injection is unsettled, and we cannot see your authorisation model from the outside. When this is worth acting on, it will be worth acting on with your engineers rather than on our say-so.
Machine-readable JSON appendix
The complete audit result, including every evidence record, is published alongside this report as audit-result.json. That file is the source of truth; this page is rendered from it and adds no facts.
Rubric version 0.8 carries 100 points across 8 dimensions and 33 checks. A check marked not applicable, or left inconclusive, is removed from the denominator rather than scored as zero.
Rating scale.
Rating
Points awarded
Meaning
Complete
100% of the check's points
Clear, consistent, and evidenced implementation
Substantial
75% of the check's points
Strong implementation with limited gaps
Partial
50% of the check's points
Useful implementation with material gaps
Minimal
25% of the check's points
Weak or inconsistent evidence
Missing
0% of the check's points
No support found or a reproducible failure exists
Inconclusive
Unscored; removed from the denominator
Collection or scope prevents a reliable decision
Not applicable
Unscored; removed from the denominator
The check does not apply to this target; its points leave the denominator
Scoring rules
Every awarded or deducted point requires captured evidence.
Evidence must include the URL, observation time, collection method, and relevant excerpt or machine result.
Deterministic checks run before LLM interpretation.
An LLM may summarize evidence but may not create a fact, credential, relationship, or technical result.
A check marked not applicable removes its points from the denominator. The report must show the adjusted denominator.
A technical failure to retrieve evidence is not automatically a customer failure. Record it as inconclusive until reproduced.
Scores compare a site to this rubric version, not to an absolute guarantee of AI visibility.
The interpretation is advisory. A high score does not guarantee visibility, citation, sentiment, traffic, or revenue. A low score does not prove that a site is absent from AI-generated answers.
Audit record
What this report was produced from. A reader who wants to reproduce or challenge a finding starts here.
Provenance for this run.
Field
Value
Audited domain
chrisbrock.io
Audit identifier
aud_20260901T114635Z_7f382c48
Audit date (UTC)
2026-09-01T11:47:18+00:00
Rubric version
0.8
Tool version
adia/0.1.0
Operator
Chris Brock LLC
Reviewer
Chris Brock (signed 2026-08-30); assisted review by Claude Code
Authorized by
Chris Brock (owner, 2026-08-28)
Pages sampled
25 of a 25 page limit, depth 2
Collection methods
bounded HTTP GET/HEAD over the standard library, robots.txt parsing, XML sitemap parsing, HTML parsing, JSON-LD parsing, operator review
Crawler user agent
ChrisBrockLLC-AIDiscoverabilityAudit/0.1 (+https://chrisbrock.io/crawler; operator-run audit; contact via site)