Theory is valuable. Examples are essential.
Here are real patterns from MX implementations showing how the three pillars work in practice.
E-Commerce Product Page
Before MX
<div class="product">
<img src="headphones.jpg">
<div class="name">Pro Headphones</div>
<div class="price">$299</div>
<div class="rating">★★★★★ 4.8/5</div>
<button class="buy">Buy Now</button>
</div>
Problems:
- No structured data (agents guess product details)
- Missing alt text (vision-impaired users and agents)
- No explicit availability or currency
- Button lacks accessible label
After MX
<article itemscope itemtype="https://schema.org/Product">
<img src="headphones.jpg" itemprop="image"
alt="Professional over-ear headphones with active noise cancellation">
<h2 itemprop="name">Pro Headphones</h2>
<div itemprop="offers" itemscope itemtype="https://schema.org/Offer">
<data itemprop="price" value="299.00">$299</data>
<meta itemprop="priceCurrency" content="USD">
<link itemprop="availability" href="https://schema.org/InStock">
</div>
<div itemprop="aggregateRating" itemscope itemtype="https://schema.org/AggregateRating">
<span class="stars" aria-label="4.8 out of 5 stars">★★★★★</span>
<data itemprop="ratingValue">4.8</data>/<data itemprop="bestRating">5</data>
</div>
<button type="button" aria-label="Add Pro Headphones to cart">
Buy Now
</button>
</article>
Improvements:
- Schema.org Product/Offer markup
- Descriptive alt text
- Explicit price, currency, availability
- Semantic article element
- Accessible button label
- Screen reader friendly rating
Contact Form
Before MX
<form>
<div>
Name <span class="req">*</span>
<input type="text" name="name">
</div>
<div>
Email <span class="req">*</span>
<input type="text" name="email">
</div>
<div>
<input type="submit" value="Send">
</div>
</form>
Problems:
- No label association
- Required not declared in markup
- No error handling
- Generic input types
After MX
<form aria-label="Contact form">
<div>
<label for="name">Name <abbr title="required">*</abbr></label>
<input type="text" id="name" name="name"
required aria-required="true"
aria-invalid="false"
aria-describedby="name-error">
<span id="name-error" role="alert" aria-live="polite"></span>
</div>
<div>
<label for="email">Email <abbr title="required">*</abbr></label>
<input type="email" id="email" name="email"
required aria-required="true"
aria-invalid="false"
aria-describedby="email-error"
autocomplete="email">
<span id="email-error" role="alert" aria-live="polite"></span>
</div>
<div>
<button type="submit">Send Message</button>
</div>
</form>
Improvements:
- Explicit label association (for/id)
- Required declared in markup
- Error containers with ARIA live regions
- Proper input types (email)
- Autocomplete hints
- Form purpose declared
Navigation Menu
Before MX
<div class="nav">
<a href="/" class="current">Home</a>
<a href="/products">Products</a>
<a href="/about">About</a>
</div>
After MX
<nav aria-label="Main navigation">
<ul>
<li><a href="/" aria-current="page">Home</a></li>
<li><a href="/products">Products</a></li>
<li><a href="/about">About Us</a></li>
</ul>
</nav>
Improvements:
- Semantic nav element
- List structure (screen reader navigation)
- Current page explicitly marked
- Navigation purpose labeled
Loading State
Before MX
<div class="spinner"></div>
After MX
<div role="status" aria-live="polite" aria-busy="true">
<div class="spinner" aria-hidden="true"></div>
<span class="sr-only">Loading content, please wait...</span>
</div>
Improvements:
- Role declares this is status information
- aria-live announces to screen readers
- aria-busy indicates temporary state
- Screen reader text explains what’s happening
- Visual spinner hidden from assistive tech
Case Study Summaries
- E-Commerce Product Page
- A product card with unstructured markup, missing alt text, no explicit currency, and a bare "Buy Now" button. After MX, the same page uses Schema.org Product and Offer markup, explicit price and availability, descriptive alt text, a semantic article element, and an accessible button label, parsable by shopping agents and screen readers alike.
- Contact Form
- A form with unlabelled fields, required fields declared only visually, and no error handling. After MX, labels are explicitly associated with inputs, required attributes are in the markup, error containers use ARIA live regions, input types are semantic, and autocomplete hints are present.
- Navigation Menu
- A div of links with no semantic structure and a CSS-class-only current indicator. After MX, the menu is a nav element with a labeled purpose, an unordered list for screen reader navigation, and the current page marked with aria-current.
- Loading State
- An empty spinner div that gives no feedback to assistive technology. After MX, the container carries role="status", aria-live="polite", and aria-busy="true", the spinner itself is hidden from assistive tech, and screen reader text explains what is happening.
- The Common Pattern
- Every example applies the same three MX pillars: structured data where applicable, semantic and accessible HTML, and explicit declaration of state, requirements, and purpose. The result works for humans, screen readers, and AI agents simultaneously.
Before and After Comparison
| Example | Before MX | After MX |
|---|---|---|
| Product page | Unlabelled div, no structured data, no currency | Schema.org Product and Offer with explicit price, currency, and availability |
| Contact form | No label association, generic input types, no error handling | Explicit labels, semantic input types, ARIA live error regions, autocomplete hints |
| Navigation menu | Div of links, CSS-class current indicator | nav element, list structure, aria-current on active page |
| Loading state | Silent spinner div | role="status", aria-live, aria-busy, screen reader message |
The Pattern
Each example shows all three MX pillars:
- Structured Data - Schema.org markup where applicable
- Accessibility - Semantic HTML, ARIA, labels
- Explicit Intent - States, requirements, purposes declared
Result: Works for humans, screen readers, AND AI agents.
→ Common Mistakes to Avoid → See the Benefits → Get Implementation Help