Scoring model
Per criterion
Each criterion is scored on a 1–5 rubric defined in its section
below.
5 Fully implemented; matches best practice
4 Mostly implemented; minor gaps
3 Partially implemented
2 Minimally implemented
1 Not implemented
A criterion may be skipped when its underlying feature
doesn't apply to the page (no actionable forms on a static page; no
time-sensitive content on an evergreen explainer). Skipped criteria
are excluded from the pillar average — they don't default to 3, and
they produce no findings.
Per pillar
Each pillar score is the average of its scored criteria,
normalized to 0–100:
pillar_score = (sum_of_criterion_scores / (count_of_scored_criteria × 5)) × 100
Total MLI
The total MLI is the average of the four pillar scores, range
0–100:
MLI = (Identity + Reachability + Structure + Currency) / 4
A reader who sees Identity 75, Reachability 50, Structure 80,
Currency 60 can see why the total is 66 and which pillar is
dragging it down.
Bands
80–100 In the room
Agents can find, parse, trust, and act on this site reliably.
60–79 Partially audible
Agents surface this site sometimes; some claims are illegible.
40–59 Hard to surface
Agents can find the site but cannot reliably parse or act on it.
0–39 Not in the conversation
Agents cannot meaningfully read this site; another voice answers in its place.
Where agents read
"Does an agent read structured data" is not one question. An agent
touches a site's content at three different moments, and each
moment has a different reader. The four pillars below are organized
around this distinction, and each is scored against the moment it
actually operates on.
1
Retrieval
The moment a model fetches a specific URL mid-answer and reads
what comes back. searchVIU's October 2025 test of this exact
moment found ChatGPT, Claude, Perplexity, Gemini, and Google's
AI Mode all extracted visible HTML from the fetched page;
JSON-LD, hidden Microdata, and hidden RDFa were not used.
Taken at face value: at this moment, visible HTML is what
gets read.
2
Index
Separate from any live fetch: resolving the name on a page to
one durable entity, distinct from whatever it collides with.
sameAs is a reconciliation
instruction here, not a citation hint — it tells an index that
the entity on this page and the entity in a public record are
the same entity.
3
Action
The moment an agent has to book, file, or retrieve something
instead of describing it. In a 2026 comparison over roughly 90
million schema.org-described datasets, agents using
standards-compliant retrieval returned the correct resource
with 65.7% higher precision than an open-web baseline, which
more often returned a prose page about the resource, or a
landing page near it, instead of the resource itself.
The rule this produces.
Every property a site declares in structured data must also
render in the initial HTML. A site that declares its service
languages only in JSON-LD is legible to the index and mute at
retrieval; a site that states them only in prose is the
reverse. The two moments have different readers, and the rule
is what makes one page answer to both.
Reachability Retrieval R2 (initial HTML completeness) is the criterion the searchVIU result most directly supports — on current evidence, the best-evidenced criterion in the framework.
Structure Retrieval + Index Serves both: the same markup a retrieval-stage fetch can read is what an index-stage crawl reconciles.
Currency All three Freshness signals are consumed at retrieval, index, and action alike.
Identity Index + Action Defended on entity resolution and task precision — never on citation lift.
MLI makes no citation-lift or ranking-lift claim for structured
data. The searchVIU result above is not disputed here — it is
answered with a narrower, better-supported claim. Full citations
and caveats in Evidence basis.
Pillar 1
Identity
Who the site says it is. Whether the organization, its services,
and its authority are declared in machine-readable form — or
left for an agent to infer from third-party mentions.
Which stage this pillar serves. Identity is an index-stage and
action-stage pillar (see Where agents read). It is scored on whether an organization
resolves as one entity in an index, and on whether an agent has
enough declared structure to act — not on retrieval-stage citation
behaviour. Controlled 2026 evidence found no citation lift from
adding JSON-LD, and MLI makes no citation-lift or ranking-lift claim
for structured data; see Evidence basis. Nothing in the three criteria below should be read as implying a
citation or ranking effect.
I1 — Organization identity declaration
What it measures: Whether the
organization is declared in machine-readable form via JSON-LD Organization or LocalBusiness schema,
with verified identity links.
Why it matters: An index has
to resolve the name on a page to an entity — one durable record,
distinct from the organizations it collides with. Without a first-party
Organization declaration, that
resolution is assembled from whatever third-party material exists:
aggregator listings, review platforms, social profiles, news coverage.
With one, the site supplies the record itself, and sameAs supplies the reconciliation instruction that ties it to public records
already held. This is what the vocabulary is specified for and what
crawler operators document consuming. It is an index-stage function,
unaffected by what a model reads during a live fetch.
Public-interest weight: High.
Community organizations without an Organization declaration are more
likely to be characterized by aggregators and directories than by
themselves, and are more exposed to name collision — a legal aid clinic
sharing a name with a commercial firm, a coalition merged with its own
member organizations.
Commercial weight: High.
Multi-location brands, franchises, and post-rebrand entities are the
common failure case: several plausible records, no declared authority
over which is current.
Signals
-
JSON-LD contains
Organization, LocalBusiness, NGO, or
another organization subtype
-
Properties present:
name, url, logo, sameAs, description, address -
sameAs points to verified
profiles or official records
Rubric
5 Organization/LocalBusiness/NGO with name, url, logo, description, and sameAs to multiple verified profiles
4 Organization with name, url, and sameAs to at least one verified profile
3 Organization present but minimal (name and url only)
2 Generic Organization without sameAs or logo
1 No Organization schema
I2 — Service-type specificity
Very high public-interest stakes
What it measures: Whether the
page declares the correct schema.org service-type for what the organization
actually does — not just generic Organization.
Why it matters: An agent answering
"where can I get free legal help in Maryland in Spanish" needs a service-type axis to filter on. Generic Organization schema offers none.
LegalService does. The
same applies to
GovernmentService, SocialService,
MedicalClinic, and
dozens of other subtypes. This is index-stage and action-stage work:
the criterion is scored for what a declared subtype makes possible, not
for a measured ranking effect. A subtype carrying filterable properties
is what lets an agent return the service itself rather than a page that
discusses it.
The same mechanism shapes commercial discovery. An agent answering
"find me a same-day plumber in Oakland" needs Plumber or HomeAndConstructionBusiness — not a generic Organization.
Public-interest weight: Very high.
Without a specific service-type schema, clinics rank below service-typed
peers in service-type-filtered queries and sit in the long tail of
undifferentiated generic Organization results. The cost lands hardest on
task completion: a person on a filing deadline who receives a landing
page instead of the eligibility rule has an answer-shaped object, not an
answer.
Commercial weight: High. The same
mechanism governs whether a booking, comparison, or purchase agent can
assemble an offer from the site at all, or has to fall back on a typed
competitor.
Signals
-
jsonLdTypes includes
a service-specific type appropriate to the page content
-
Required properties for that subtype (e.g.,
LegalService should have serviceType, areaServed, provider)
Rubric
5 Specific service-type schema with required properties (areaServed, availableLanguage, audience, etc.)
4 Specific service-type with name and description
3 Specific service-type minimal (type declared, properties sparse)
2 Generic Organization where a specific subtype clearly applies
1 No service-type schema, or wrong type
I3 — Source authority and credentials
Very high public-interest stakes
What it measures: Whether the
site declares the authority signals that distinguish authoritative
voices from predatory ones — accreditation, parent organization, professional
credentials, government TLD, free-access status.
Why it matters: Machine legibility
alone doesn't distinguish a BIA-accredited immigration legal services
organization from a notario. (Notarios are unlicensed practitioners
who exploit a name collision with Latin American notarios públicos to advertise legal services they aren't qualified to provide.) Commercial
immigration service providers — both licensed and unlicensed — invest
in search marketing in ways that underfunded community legal aid
organizations typically cannot. Declaring accreditation, parent
organization, credentials, and free-access status makes the distinction
available in machine-readable form rather than leaving it to be
inferred from prose — and available to the person reading the answer, who
can follow accreditedBy to the
accrediting body. Nothing here guarantees an agent weights those signals;
the criterion scores whether the distinction is declared at all.
Public-interest weight: Very high.
This is the criterion that keeps the rest of the pillar from being a
legibility contest. Without declared authority, the qualified and the
unqualified are equally well-formed records, and an agent has nothing in
the data to separate them.
Commercial weight: Medium.
Licensure, certification, and parent-company signals matter in regulated
sectors — finance, healthcare, trades — and are largely inert elsewhere;
score honestly rather than rewarding decorative award properties.
Signals
-
Schema for
hasCredential, accreditedBy, parentOrganization, funder, award -
isAccessibleForFree: true where applicable
-
TLD signals (
.gov, .edu, .org consistent with mission)
-
HTML links to accrediting bodies (BIA, ABA, state bars,
accreditation councils)
-
nonprofitStatus for
tax-exempt orgs
Rubric
5 hasCredential with verified accrediting body, parentOrganization where applicable, isAccessibleForFree where applicable, appropriate TLD
4 Some authority signals in schema (e.g., accreditation in JSON-LD + link to accrediting body)
3 Authority claims in HTML but not in structured data
2 Generic professional signals only (privacy policy, address, no credentials)
1 No authority signals
Pillar 2
Reachability
Whether an agent can fetch the site and parse its content.
Whether the site declares a contract for AI access, serves
content in initial HTML, and reaches users in their language.
R1 — Agent contract
What it measures: Whether the
site declares an explicit contract for AI agents and crawlers.
Why it matters: Without robots.txt agent directives, an agent has no signal whether it's welcome, what
it can fetch, and what's off-limits. llms.txt provides an AI-readable site index.
sitemap.xml aids discovery.
These are the most direct findability signals and are missing from
most under-resourced sites.
Signals
-
robots.txt accessibility
(200 response at /robots.txt)
-
Presence of agent-specific User-agents (
GPTBot, ClaudeBot, Google-Extended, PerplexityBot, anthropic-ai, cohere-ai)
-
llms.txt or llms-full.txt at root
-
sitemap.xml declared
in robots.txt or accessible at root
Rubric
5 robots.txt with explicit agent directives + llms.txt + sitemap.xml
4 robots.txt addresses agents + sitemap.xml (no llms.txt)
3 robots.txt and sitemap.xml exist but no agent-specific directives
2 Default/auto-generated robots.txt, no sitemap
1 No robots.txt, or robots.txt inadvertently blocks all agents
R2 — Initial HTML completeness
What it measures: Whether substantive
content — text, forms, action paths — is present in the initial HTML,
or gated behind JavaScript or third-party iframes.
Why it matters: Agents that
don't execute JavaScript miss content added post-load. SPAs that render
to empty shells appear blank to crawlers that don't execute JavaScript.
Forms that live in third-party iframes can't be filled by an agent
operating on the parent page. Sites built on frameworks that render
primarily client-side, and pages whose action paths live in third-party
iframes, often fail this criterion. Server-rendered pages with native
forms typically pass it.
Signals
- Semantic element count in initial HTML
- Form count (forms in initial HTML, not iframe-embedded)
- Iframe count and what's inside them
-
noscriptHasContent (substantial content in <noscript> indicates JS dependency)
Rubric
5 All key content and forms in initial HTML; no iframe-gated transactions
4 Mostly static; minor JS enhancements
3 Mixed; some critical paths require JS
2 Most content JS-rendered, or noscript flags significant gating
1 Empty initial HTML / SPA shell with no static content
R3 — Multilingual reach
Very high public-interest stakes
What it measures: Whether the
site declares its language(s), serves alternate translations via hreflang, and declares language availability in service schema.
Why it matters: A site without
explicit language declarations cannot be reliably identified or prioritized
in language-filtered queries. Agents must infer language from content,
creating slower, lower-confidence matches that rank below sites with
declared language metadata. The single most important signal for the
Notice-to-Appear scenario, and for any cross-language service-finding
case. Community legal aid clinics frequently translate content but
fail to mark translations with hreflang, losing ranking advantages in language-specific queries and reducing
discoverability to speakers of those languages.
Commercial sites face the same penalty in cross-language queries. A
SaaS company serving Latin American customers without hreflang on its Spanish docs ranks below competitors that have it — even
when its product is better.
Signals
-
<html lang="..."> set
-
<link rel="alternate" hreflang="..."> to translated pages
-
availableLanguage property in service schema
-
contactPoint.availableLanguage for service contacts
Rubric
5 html[lang] set, hreflang to all translated versions, availableLanguage in service schema
4 html[lang] and hreflang present, no availableLanguage in schema
3 html[lang] set, no hreflang (mono-lingual or translations not linked)
2 html[lang] missing, no translations
1 No language signals at all
Skip-if: Organization is genuinely English-only and
its served audience is too. This rarely applies in US service contexts
and should be a documented exception.
Pillar 3
Structure
How readable the site's claims are once parsed. Whether the page
declares its type, its hierarchy, and its sections in ways that
map to extractable answers.
S1 — Page type and breadcrumb
What it measures: Whether the
page declares its schema.org type (Article, WebPage,
ContactPage, FAQPage,
Service, etc.) and
provides BreadcrumbList for hierarchical context.
Why it matters: An agent extracting
an answer needs to know what kind of page it's reading. A FAQPage has different extraction logic than a Service page.
BreadcrumbList lets
the agent place the page in site context.
Signals
-
jsonLdTypes includes
a page-level type matching the actual content
-
BreadcrumbList present
with correctly-ordered items
Rubric
5 Correct page-level type + BreadcrumbList + complete required properties
4 Correct type + BreadcrumbList minimal
3 Correct type, no breadcrumb
2 Generic WebPage where a more specific type clearly applies
1 No page-level type
S2 — Heading hierarchy as content map
What it measures: Whether headings
form a parseable outline an agent can use to navigate the page's content.
Why it matters: Headings are
how agents map a page. Multiple H1s, skipped levels, or non-descriptive
headings make extraction significantly harder. Headings with stable
IDs are deep-linkable, which improves citation precision.
Signals
-
h1Count (single descriptive
H1 expected)
- Logical H2/H3 progression; no skipped levels
-
headingHierarchyIssue (multiple H1s, or H3s without H2s)
-
headingsWithId ratio
Rubric
5 Single descriptive H1, logical H2/H3 progression, headings have stable IDs
4 Single H1, good hierarchy, no IDs
3 Hierarchy mostly OK; some minor issues
2 Multiple H1s, or skipped levels
1 No headings, or chaotic hierarchy
S3 — Semantic density
What it measures: Ratio of
semantic landmarks (main, nav,
header, footer,
section, article,
aside) to
non-semantic div/span elements.
Why it matters: Div soup is
harder to parse than semantic HTML. Agents that map pages by landmarks
get nothing from a page that's all <div>. This is where MX and accessibility most clearly converge —
semantic landmarks serve both screen readers and agents.
Signals
- Semantic element count vs total div/span count
-
Ratio:
semanticElements / (semanticElements + totalDivSpan) -
Presence of all four major landmarks (main, nav, header,
footer)
-
nav[aria-label] for
distinguishing multiple navs
Rubric
5 Ratio > 0.05; all major landmarks present; navs labelled
4 Ratio 0.03–0.05; major landmarks present
3 Ratio 0.01–0.03
2 Ratio < 0.01 but some landmarks present
1 Div soup, no semantic landmarks
Pillar 4
Currency
Whether the site's claims are still true. Whether dates,
deadlines, eligibility windows, and service availability are
machine-readable.
C1 — Machine-readable dates
What it measures: Whether content
has datePublished and
dateModified in JSON-LD,
plus appropriate
<time datetime> elements.
Why it matters: Agents need
to decide whether to surface information or treat it as stale. Without
machine-readable dates, they guess from prose ("Updated: January 2025")
— which is unreliable — or assume worst-case staleness and skip the
page.
Signals
-
datePublished in JSON-LD
-
dateModified in JSON-LD
-
<time datetime="..."> elements in HTML (ISO 8601 format)
Rubric
5 Both datePublished and dateModified in JSON-LD; recently updated relative to content type
4 Both dates in JSON-LD
3 <time datetime> elements present, but no JSON-LD dates
2 Dates in HTML prose only (not machine-readable)
1 No date signals
C2 — Time-sensitive markup
Very high public-interest stakes
What it measures: Whether deadlines,
hours, event dates, and validity periods are machine-readable.
Why it matters: A Notice to
Appear recipient needs deadline awareness. A clinic's walk-in hours,
a registration deadline, a court date, an application window — all
must be machine-readable or agents can't filter or alert appropriately.
The same mechanism governs commercial time-sensitive content: a retailer's
flash sale, a conference's early-bird deadline, a SaaS webinar registration.
"We are open Tuesdays 9–12" in prose can't be matched by a query
like "who can I see this Tuesday morning?" — the agent has nothing
to filter on.
Signals
-
Event schema with
startDate/endDate -
validThrough on Offer / Service -
OpeningHoursSpecification on LocalBusiness -
eventStatus for cancelled/postponed
events
Rubric
5 All time-sensitive content has appropriate schema
4 Most time-sensitive content marked up
3 Some time-sensitive content marked, some only in prose
2 Time information present but only in prose
1 No structured time signals on time-sensitive content
Skip-if: Page has no time-sensitive content (e.g.,
a static About page with no hours, dates, or deadlines).
C3 — Eligibility, cost, and service availability
Very high public-interest stakes
What it measures: Whether audience,
cost, jurisdiction, and availability of services are declared in machine-readable
form.
Why it matters: An agent filtering
for "free immigration help in Maryland in Spanish" needs four facts:
service type (I2), free/low-cost, jurisdiction, and language (R3 covers
language; this criterion covers cost and jurisdiction). An agent filtering
for "EV charging open after 10pm in Austin" or "gluten-free meal delivery
serving Brooklyn" needs the same filterable structure — service type,
jurisdiction, hours, and dietary or product attributes — declared in
machine-readable form. Without this markup, the page can't be filtered
on cost or jurisdiction — and ranks below pages that can be, in service-discovery
queries. That is index-stage and action-stage filtering: whether the page
can be selected against a constraint and then acted on. It is not a claim
about how often a model cites the page while composing an answer.
Signals
-
audience with audienceType, geographicArea, eligibility qualifications
-
areaServed (city,
state, county, jurisdiction)
-
isAccessibleForFree: true for free services; priceSpecification or price: 0;
sliding-scale via priceRange -
availableLanguage at
service level (overlaps with R3)
-
OfferCatalog for orgs
with multiple service offerings
-
Operational status:
businessStatus (BusinessOperating, TemporarilyClosed, PermanentlyClosed) or Offer.availability (InStock, LimitedAvailability, SoldOut)
Rubric
5 audience, areaServed, isAccessibleForFree (or price), availableLanguage, and operational status (businessStatus or Offer.availability) all declared in schema
4 Four of the five declared
3 Two or three declared
2 One declared, or all in prose only
1 None declared
Skip-if: Page is purely informational with no service
offered (e.g., a glossary, a news article).
Action completion
Conditional
Scored only when the audited page contains an actionable form or
CTA path: donate, volunteer, intake, appointment booking,
registration, purchase, sign-up, request representation. Skipped
on pages with no actionable path. Action-completion scores
appear as a separate section in the report — not
inside the four-pillar MLI score.
A1 — Action flow clarity
Multi-step flows declare current step (aria-current="step"); progress indicators are semantic; total step count is communicable to an agent navigating the flow.
A2 — Confirmation state semantics
Confirmation states are machine-readable: post-submission redirects to a clearly-typed confirmation URL, or the confirmation state has structured-data markup, or role="status" / aria-live="polite" regions announce completion.
A3 — Action predictability
The consequence of submitting an action is communicated semantically before the user clicks. Button labels are unique and contextual (aria-label="Donate $50 monthly to Casa Maryland", not "Submit"), and aria-describedby links action buttons to the consequence text.
Accessibility companion
Reported separately
Audited but not included in the MLI score. Accessibility (WCAG
conformance) and machine legibility overlap substantially but
answer different questions. A site can be highly machine-legible
and partially inaccessible, or vice versa. Reporting them
separately gives two diagnostics that can be acted on
independently.
The companion audits patterns that overlap with WCAG 2.1/2.2 AA
not already covered by S2 and S3:
-
Form label association (programmatic
<label for> ↔ <input id>)
-
Form input type correctness (
type="email", type="tel", type="date")
-
Form error states (
aria-invalid, role="alert")
- Button label uniqueness and descriptiveness
-
Native interactive elements (
<button> over <div onclick>)
-
Modal handling (
role="dialog", aria-modal,
focus trap)
-
Tab/menu patterns (
role="tablist", aria-controls, aria-expanded)
-
Loading and dynamic state announcements (
aria-busy, aria-live)
-
Disabled state semantics (
aria-disabled, with reason where applicable)
- Empty and zero states (announced to assistive tech)
Findings rule
Early versions mapped score thresholds to priority bands
automatically: every criterion scoring 1 became a P1, every 2 a
P2. A low-scoring site produced 18–28 findings — overwhelming,
undifferentiated, not actionable. A diagnostic tool earns its
credibility one false positive at a time.
How findings are generated
- Identify all criteria scored 1, 2, or 3.
-
Rank by score impact: how much would the total
MLI move if this criterion were brought to 5?
-
Take the top 5 to 7 findings. Never more than
7.
- If two findings prescribe the same fix, merge them.
Finding format
Pillar Identity / Reachability / Structure / Currency / Action
Criterion Canonical name, e.g., I2 — Service-type specificity
Gap What's missing, referencing actual signals from the audited page
What this means One sentence translating the technical finding into who is hurt by the gap and how — the layer that connects a missing schema field to a user the agent fails to serve
Fix Concrete HTML / schema.org / robots.txt pattern, with example markup
Effort Low / Medium / High
Report structure
The MLI audit produces a short report — three pages or equivalent
— for readability. Comprehensive audit data is available in an
optional appendix.
- Verdict — total MLI score (0–100),
band, one-sentence positioning statement.
- Pillar breakdown — the four
pillar scores (each 0–100), with criteria listed and individually
scored.
- Top fixes — 5 to 7 curated
findings, ordered by score impact.
- Action completion — only if
applicable; three criteria scored separately.
- Accessibility companion — issue
count and pointer to a detailed list, separate from the MLI score.
- Methodology footer — link to
this document, version date, attribution.
Evidence basis
The mechanistic claims in MLI — that indexes read structured data,
that schema.org subtypes enable filtering, that hreflang
declarations outperform language inference, that semantic HTML serves
both screen readers and agents — are grounded in primary specifications
(W3C, schema.org, crawler-operator documentation) and peer-reviewed
work on AI/accessibility overlap.
Quantitative magnitude claims — how much more often schema-marked
pages are cited, what percentage of single-page applications
fail to render for AI crawlers — are held to a higher bar. Most published
figures originate with SEO agencies, structured-data vendors,
accessibility-audit firms, or pre-rendering SaaS — sources with direct
commercial interest in the finding. MLI does not stake itself to specific
multipliers from studies whose authors sell the corresponding fixes.
On citation specifically, the evidence is now controlled, and it is null.
Ahrefs — an SEO-tools vendor whose market benefits from the opposite
finding, which is why a null result from that source carries weight a
positive one would not — matched 1,885 pages that added JSON-LD between
August 2025 and March 2026 against roughly 4,000 control pages at similar
pre-treatment citation levels, comparing the 30 days before and after.
The measured differences were statistically indistinguishable from zero
across every surface tested: AI Overviews −4.6%, AI Mode +2.4%, ChatGPT
+2.2%. MLI does not treat this as a flaw in the study. It measured the
retrieval stage — the moment a model fetches a specific page mid-answer
and reads what comes back — and at that moment, the same period's
evidence is that models read visible HTML, not JSON-LD. The Identity
pillar was never a bet on that moment. It is scored on whether an
organization resolves as one entity in an index before any question is
asked, and on whether the structure exists for an agent to act on once it
has — book an appointment, file a form, verify eligibility, reconcile a
name against a public record. MLI makes no citation-lift or ranking-lift
claim for structured data, at that moment or any other.
Licensed under CC-BY-SA 4.0. Use, adapt, and translate freely; derivatives must remain open
and attributed. Attribution: Mx. Good.
← Back to overview