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

  1. Identify all criteria scored 1, 2, or 3.
  2. Rank by score impact: how much would the total MLI move if this criterion were brought to 5?
  3. Take the top 5 to 7 findings. Never more than 7.
  4. 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.

  1. Verdict — total MLI score (0–100), band, one-sentence positioning statement.
  2. Pillar breakdown — the four pillar scores (each 0–100), with criteria listed and individually scored.
  3. Top fixes — 5 to 7 curated findings, ordered by score impact.
  4. Action completion — only if applicable; three criteria scored separately.
  5. Accessibility companion — issue count and pointer to a detailed list, separate from the MLI score.
  6. 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