# AI-Search Readiness Audit Checklist

**Compiled from:** AI Web Page SEO technical documentation, llms.txt Specification v1.7.0, Google Search Central structured data docs, W3C WCAG 2.2 Quick Reference, and AI answer engine visibility best practices.

**Last updated:** October 2026

---

## Table of Contents

1. [Audit Overview](#1-audit-overview)
2. [Crawlability & AI Crawler Access](#2-crawlability--ai-crawler-access)
3. [llms.txt Implementation & Validation](#3-llmstxt-implementation--validation)
4. [Structured Data & Schema Markup](#4-structured-data--schema-markup)
   - 4.1 [Solicitors / Legal Services Schema](#41-solicitors--legal-services-schema)
   - 4.2 [Restaurants Schema](#42-restaurants-schema)
   - 4.3 [Ecommerce Schema](#43-ecommerce-schema)
5. [Accessibility (WCAG 2.2 AA)](#5-accessibility-wcag-22-aa)
6. [Content Quality & E-E-A-T for AI Answers](#6-content-quality--e-e-a-t-for-ai-answers)
7. [AI Answer Engine Visibility Verification](#7-ai-answer-engine-visibility-verification)
8. [Prioritized Fix List for Sample URL](#8-prioritized-fix-list-for-sample-url)

---

## 1. Audit Overview

AI Web Page SEO defines Answer Engine Optimisation (AEO) as the practice of making pages easy for AI systems to **read, understand, and cite**. AEO sits alongside traditional SEO rather than replacing it — SEO helps a page rank; AEO helps a page get quoted by ChatGPT, Perplexity, Google AI Overviews, and Microsoft Copilot ([AI Web Page SEO](https://aiwebpageseo.com/)).

The AI Web Page SEO AEO checklist identifies five pillars:

| # | Pillar | What it ensures |
|---|---|---|
| 1 | AI crawler reachability | Bots can access and parse the page |
| 2 | Valid JSON-LD schema | The page describes itself unambiguously |
| 3 | Answer-first content | Leading statements that models can extract |
| 4 | Trust signals | Authorship, dates, cited sources |
| 5 | Root-level llms.txt | A site-level map for AI models |

This audit extends those pillars with crawlability diagnostics, WCAG 2.2 accessibility checks, and industry-specific schema templates.

---

## 2. Crawlability & AI Crawler Access

### 2.1 robots.txt AI Crawler Allowance

AI Web Page SEO specifies checking that `robots.txt` allows the following AI crawler user-agents ([AI Web Page SEO](https://aiwebpageseo.com/)):

| User-Agent | Engine | What to check |
|---|---|---|
| `OAI-SearchBot` | ChatGPT search / OpenAI | Not disallowed in robots.txt |
| `GPTBot` | OpenAI crawler | Not disallowed in robots.txt |
| `PerplexityBot` | Perplexity | Not disallowed in robots.txt |
| `ClaudeBot` | Claude / Anthropic | Not disallowed in robots.txt |
| `Bingbot` | Microsoft Copilot | Not disallowed in robots.txt |

**Sample robots.txt allowing all AI crawlers:**

```
User-agent: OAI-SearchBot
Allow: /

User-agent: GPTBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: Bingbot
Allow: /

User-agent: *
Allow: /

Sitemap: https://www.example.co.uk/sitemap.xml
```

### 2.2 Crawlability Checklist

| Check | Method | Pass criteria |
|---|---|---|
| robots.txt reachable | `curl -I https://domain/robots.txt` | HTTP 200, not blocked |
| AI crawlers allowed | Inspect `User-agent` directives | OAI-SearchBot, GPTBot, PerplexityBot, ClaudeBot, Bingbot all `Allow: /` |
| XML sitemap exists | Fetch `/sitemap.xml` | Valid XML, submitted to Google Search Console |
| Canonical tags | View page source | Each page has `<link rel="canonical">` pointing to itself |
| No `noindex` on key pages | View page source / Search Console | No `<meta name="robots" content="noindex">` on money pages |
| HTTP status codes | Crawl with Screaming Frog or similar | No 4xx/5xx on important pages |
| Internal links | Crawl audit | No broken internal links; no orphaned pages |
| Page speed (Core Web Vitals) | AI Web Page SEO audit / PageSpeed Insights | LCP < 2.5s, CLS < 0.1, INP < 200ms |
| HTTPS | Check protocol | All pages served over HTTPS |
| JS-rendered content | Fetch as Google (Search Console) | Critical content visible without JS execution |

> AI Web Page SEO identifies broken internal links, missing title tags, incorrect canonical tags, and failing Core Web Vitals as the most common critical technical issues ([AI Web Page SEO Learning Hub](https://aiwebpageseo.com/learning-hub.html)).

---

## 3. llms.txt Implementation & Validation

### 3.1 What llms.txt Is

AI Web Page SEO recommends a root-level `llms.txt` with a site summary and curated key pages. AI Web Page SEO's LLMs.txt Auditor validates against the llmstxt.org spec; the stricter AI Visibility v1.7.0 profile below can be used as an extra standard for business-identity use cases. AI Web Page SEO describes `llms.txt` as a plain-text file at the domain root that gives AI models a clean index of a site's most important pages. While schema markup describes a single page, `llms.txt` describes the whole site — "a map of the whole site" versus "a translator for each page" ([AI Web Page SEO](https://aiwebpageseo.com/)).

The llms.txt Specification v1.7.0 from AI Visibility extends the emerging convention documented at llmstxt.org, adding explicit section requirements and enhanced structure for business identity use cases ([llms.txt Specification](https://www.ai-visibility.org.uk/specifications/llms-txt/)).

### 3.2 File Location & Format Requirements

| Property | Requirement |
|---|---|
| Location | `https://example.com/llms.txt` (domain root) |
| Content type | MUST be `text/plain; charset=utf-8` |
| Authentication | URL MUST be accessible without authentication |
| HTTP status | SHOULD respond with HTTP 200 |
| Transport security | HTTPS strongly recommended |
| Encoding | UTF-8 (required) |
| Line endings | LF (Unix-style) recommended; CRLF accepted |
| Syntax | Markdown (CommonMark compatible) |
| Maximum size | No hard limit; under 50KB recommended |
| Host scoping | Scoped to the host (origin) where published |

### 3.3 Required Sections

| Section | Description | Status |
|---|---|---|
| `# [Name]` | H1 heading with the official business or project name; exactly one; first content element | **Required** |
| `> [Summary]` | Blockquote containing a 1-3 sentence business description; immediately follows H1 | **Required** |
| `## Contact` | Contact information including email, phone, and address | **Required** |

### 3.4 Recommended Sections

| Section | Description |
|---|---|
| `## Services` | List of services or products offered with links |
| `## What We Do Not Do` | Explicit exclusions to prevent AI misrepresentation |
| `## Key Information` | Links to important pages (About, Case Studies) |
| `## AI Discovery Files` | Links to other AI discovery files (ai.txt, identity.json) |

### 3.5 Complete llms.txt Template (Solicitors Example)

```markdown
# Smith & Partners Solicitors

> Smith & Partners Solicitors is a UK law firm providing family law,
> conveyancing, and employment law services across Northern Ireland
> from offices in Coleraine and Belfast.

## Services

- [Family Law](https://www.smithpartners.co.uk/family-law): Divorce, child custody, and financial settlements
- [Conveyancing](https://www.smithpartners.co.uk/conveyancing): Residential and commercial property transactions
- [Employment Law](https://www.smithpartners.co.uk/employment-law): Unfair dismissal, discrimination, and settlement agreements
- [Wills & Probate](https://www.smithpartners.co.uk/wills-probate): Will drafting, estate administration, and trust services

## What We Do Not Do

Smith & Partners explicitly does not provide:
- Criminal defence services
- Immigration law services
- Services outside the United Kingdom

## Contact

- General enquiries: hello@smithpartners.co.uk
- Phone: +44 28 7032 1234
- Address: 15 Strand Road, Coleraine, BT52 1SG, United Kingdom

## Key Information

- [About Us](https://www.smithpartners.co.uk/about): Firm history, team, and accreditations
- [Case Studies](https://www.smithpartners.co.uk/case-studies): Client success stories
- [FAQs](https://www.smithpartners.co.uk/faqs): Frequently asked legal questions

## AI Discovery Files

- [AI Interaction Guidance](https://www.smithpartners.co.uk/ai.txt): Permissions for AI systems
- [Identity Data](https://www.smithpartners.co.uk/identity.json): Structured business identity

## Optional

- [Privacy Policy](https://www.smithpartners.co.uk/privacy): Data protection information
- [Sitemap](https://www.smithpartners.co.uk/sitemap.xml): Complete site structure

---
llms.txt Specification (ADF-001)
https://www.ai-visibility.org.uk/specifications/llms-txt/
```

### 3.6 llms.txt Validation Checklist

| Validation step | Method | Pass criteria |
|---|---|---|
| File reachable | `curl -I https://domain/llms.txt` | HTTP 200 |
| Correct content type | Check `Content-Type` header | `text/plain; charset=utf-8` |
| Not blocked by robots.txt | Verify no `Disallow: /llms.txt` | Accessible |
| Exactly one H1 heading | Inspect file content | Single `#` heading as first element |
| Blockquote after H1 | Inspect file content | `>` summary immediately follows H1 |
| Contact section present | Inspect file content | `## Contact` with email and phone |
| All URLs are absolute | Inspect all links | Full `https://` URLs, no relative paths |
| URLs return HTTP 200 | Batch-check each linked URL | All links resolve |
| Under 50KB | Check file size | < 50KB recommended |
| identity.json consistency | Compare H1 name with identity.json `name` | Must match; identity.json is canonical |
| No marketing hyperbole | Review content | Factual, objective language only |
| No pricing in file | Review content | Link to pricing pages instead |
| Review quarterly | Calendar reminder | Verify accuracy at least quarterly |

> AI Web Page SEO notes that `llms.txt` does not guarantee that any given AI provider will read it today. It is described as "a low-cost, forward-looking foundation" rather than a guaranteed ranking lever ([AI Web Page SEO](https://aiwebpageseo.com/)).

---

## 4. Structured Data & Schema Markup

AI Web Page SEO describes accurate schema markup as "a potentially high-leverage improvement" for AI visibility, particularly where a page represents a well-defined entity or content type. Valid JSON-LD tells an engine exactly what a page is — a product, a local business, an FAQ, or a how-to — preventing the engine from having to guess from raw HTML ([AI Web Page SEO](https://aiwebpageseo.com/)).

**General implementation rules (from AI Web Page SEO):**
- Generate standards-valid JSON-LD for the correct/true type of each page
- Paste JSON-LD into the `<head>` section
- Schema must match visible content — declaring an FAQ that is not actually on the page erodes trust
- Update schema whenever page content changes
- Validate using the [Google Rich Results Test](https://search.google.com/test/rich-results) and [Schema.org Validator](https://validator.schema.org)

---

### 4.1 Solicitors / Legal Services Schema

**Schema types by page type:**

| Page | Schema type(s) | Priority |
|---|---|---|
| Homepage / Contact | `LocalBusiness` + `Organization` | Critical |
| Practice area pages | `LegalService` + `Service` | Critical |
| Solicitor profile pages | `Person` | High |
| FAQ pages | `FAQPage` | Medium |
| All pages (site-wide) | `BreadcrumbList` | Medium |

**Required properties for LegalService/LocalBusiness** ([Google Search Central](https://developers.google.com/search/docs/appearance/structured-data/local-business)):

| Property | Type | Requirement |
|---|---|---|
| `name` | Text | Required |
| `address` | PostalAddress | Required |
| `telephone` | Text | Recommended |
| `url` | URL | Recommended |
| `geo` | GeoCoordinates | Recommended |
| `openingHoursSpecification` | OpeningHoursSpecification | Recommended |
| `priceRange` | Text | Recommended |
| `areaServed` | GeoCircle or Text | Recommended |
| `sameAs` | URL array | Recommended (link to GBP, regulator, socials) |
| `menu` or `servesCuisine` | N/A for solicitors | N/A |

**Complete LegalService JSON-LD example:**

```json
{
  "@context": "https://schema.org",
  "@type": ["LocalBusiness", "LegalService"],
  "name": "Smith & Partners Solicitors",
  "description": "Specialist family law solicitors providing divorce, child custody, and financial settlement services across Northern Ireland.",
  "url": "https://www.smithpartners.co.uk/family-law/",
  "telephone": "+44-28-7032-1234",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "15 Strand Road",
    "addressLocality": "Coleraine",
    "addressRegion": "County Londonderry",
    "postalCode": "BT52 1SG",
    "addressCountry": "GB"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": "55.1328",
    "longitude": "-6.6664"
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "09:00",
      "closes": "17:00"
    }
  ],
  "priceRange": "££",
  "areaServed": {
    "@type": "GeoCircle",
    "geoMidpoint": {
      "@type": "GeoCoordinates",
      "latitude": "55.1328",
      "longitude": "-6.6664"
    },
    "geoRadius": "50000"
  },
  "sameAs": [
    "https://www.google.com/maps/place/Smith+and+Partners",
    "https://www.linkedin.com/company/smith-and-partners-solicitors",
    "https://twitter.com/smithpartnerslaw"
  ],
  "makesOffer": {
    "@type": "Offer",
    "itemOffered": {
      "@type": "Service",
      "name": "Divorce Proceedings",
      "description": "Expert guidance through divorce proceedings including financial settlements and child arrangements."
    }
  }
}
```

**Person schema for solicitor profiles:**

```json
{
  "@context": "https://schema.org",
  "@type": "Person",
  "name": "Sarah Mitchell",
  "jobTitle": "Partner, Family Law",
  "worksFor": {
    "@type": "LegalService",
    "name": "Smith & Partners Solicitors"
  },
  "alumniOf": "Queen's University Belfast",
  "hasCredential": "Solicitor, Law Society of Northern Ireland",
  "memberOf": "Law Society of Northern Ireland",
  "knowsAbout": ["Family Law", "Divorce", "Child Custody", "Financial Settlements"],
  "url": "https://www.smithpartners.co.uk/team/sarah-mitchell",
  "email": "s.mitchell@smithpartners.co.uk",
  "sameAs": ["https://www.linkedin.com/in/sarah-mitchell-solicitor"]
}
```

> **SRA compliance note:** For UK solicitors, ensure all service descriptions are accurate, not misleading, and comply with Solicitors Regulation Authority rules. Only include verified qualifications in Person schema. Do not use self-serving review stars on LocalBusiness pages ([BSM Legal Marketing](https://bsmlegalmarketing.com/marketing-for-law-firms/local-seo-for-lawyers/schema-markup/)).

---

### 4.2 Restaurants Schema

**Required properties for Restaurant (LocalBusiness subtype)** ([Google Search Central](https://developers.google.com/search/docs/appearance/structured-data/local-business)):

| Property | Type | Requirement |
|---|---|---|
| `name` | Text | Required |
| `address` | PostalAddress | Required |
| `image` | URL array | Required for carousel; recommended generally |
| `telephone` | Text | Recommended |
| `url` | URL | Recommended |
| `geo` | GeoCoordinates | Recommended |
| `openingHoursSpecification` | OpeningHoursSpecification | Recommended |
| `priceRange` | Text | Recommended |
| `servesCuisine` | Text | Recommended |
| `menu` | URL | Recommended (URL of the menu page) |
| `review` | Review | Recommended (only if site captures genuine reviews) |
| `aggregateRating` | AggregateRating | Recommended (only genuine, unfiltered) |

**Complete Restaurant JSON-LD example:**

```json
{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "image": [
    "https://www.example-restaurant.co.uk/photos/1x1/interior.jpg",
    "https://www.example-restaurant.co.uk/photos/4x3/dish.jpg",
    "https://www.example-restaurant.co.uk/photos/16x9/exterior.jpg"
  ],
  "name": "The Harbour Kitchen",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "7 The Promenade",
    "addressLocality": "Portstewart",
    "addressRegion": "County Londonderry",
    "postalCode": "BT55 7AE",
    "addressCountry": "GB"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 55.1830,
    "longitude": -6.7300
  },
  "url": "https://www.example-restaurant.co.uk/",
  "telephone": "+44-28-7083-1234",
  "servesCuisine": "Seafood",
  "priceRange": "£££",
  "menu": "https://www.example-restaurant.co.uk/menu",
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Tuesday", "Wednesday", "Thursday", "Sunday"],
      "opens": "17:00",
      "closes": "22:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Friday", "Saturday"],
      "opens": "17:00",
      "closes": "23:00"
    }
  ],
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": 4.6,
    "reviewCount": 142
  }
}
```

> **Review policy warning:** Only include `aggregateRating` or `review` in `LocalBusiness`/`Restaurant` schema when the reviews are genuine, unedited, visible on the page, and compliant with Google's Review Snippet policy. Google prohibits self-serving reviews on your own LocalBusiness pages. If reviews are hosted on third-party platforms (Trustpilot, Google Reviews, Reviews.io), reference them with `aggregateRating` only if the rating accurately reflects the overall score across all platforms ([BSM legal marketing](https://bsmlegalmarketing.com/marketing-for-law-firms/local-seo-for-lawyers/schema-markup/)). Remove `aggregateRating` from the example above if no genuine, policy-compliant review data exists.

**Restaurant carousel eligibility:** For host carousels, the site must have multiple restaurants listed, include the `Carousel` object, and register interest via Google's form. Required carousel properties are `image` and `name` ([Google Search Central](https://developers.google.com/search/docs/appearance/structured-data/local-business)).

---

### 4.3 Ecommerce Schema

**Required properties for Product** ([Google Search Central — Product Snippet](https://developers.google.com/search/docs/appearance/structured-data/product-snippet), [Merchant Listing](https://developers.google.com/search/docs/appearance/structured-data/merchant-listing)):

| Property | Type | Product Snippet (req) | Merchant Listing (req) |
|---|---|---|---|
| `name` | Text | Required | Required |
| `image` | URL array | — | Required |
| `offers` | Offer | Required (one of review/aggregateRating/offers) | Required |
| `review` | Review | Optional | Recommended |
| `aggregateRating` | AggregateRating | Optional | Recommended |
| `description` | Text | Recommended | Recommended |
| `brand.name` | Text | Recommended | Recommended |
| `sku` | Text | Recommended | Recommended |
| `mpn` | Text | Recommended | Recommended |
| `gtin` / `gtin8` / `gtin13` / `gtin14` | Text | Recommended | Recommended |
| `category` | Text or CategoryCode | Recommended | Recommended |

**Required properties for Offer (Merchant Listing)** ([Google Search Central](https://developers.google.com/search/docs/appearance/structured-data/merchant-listing)):

| Property | Type | Requirement |
|---|---|---|
| `price` or `priceSpecification.price` | Number | Required (provide either directly or via priceSpecification) |
| `priceCurrency` or `priceSpecification.priceCurrency` | Text (ISO 4217) | Required (must accompany price; either at Offer level or inside priceSpecification) |
| `availability` | ItemAvailability | Recommended |
| `url` | URL | Recommended |
| `itemCondition` | OfferItemCondition | Recommended |
| `hasMerchantReturnPolicy` | MerchantReturnPolicy | Recommended |
| `shippingDetails` | OfferShippingDetails | Recommended |
| `priceValidUntil` | Date | Recommended |

**Complete ecommerce Product JSON-LD example:**

```json
{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": "Executive Anvil",
  "image": [
    "https://www.example-shop.co.uk/photos/1x1/anvil.jpg",
    "https://www.example-shop.co.uk/photos/4x3/anvil.jpg",
    "https://www.example-shop.co.uk/photos/16x9/anvil.jpg"
  ],
  "description": "Sleeker than the Classic Anvil, the Executive Anvil is perfect for the business traveller.",
  "sku": "0446310786",
  "mpn": "925872",
  "brand": {
    "@type": "Brand",
    "name": "ACME"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": 4.4,
    "reviewCount": 89
  },
  "offers": {
    "@type": "Offer",
    "url": "https://www.example-shop.co.uk/anvil",
    "priceCurrency": "GBP",
    "price": 119.99,
    "priceValidUntil": "2026-12-31",
    "itemCondition": "https://schema.org/NewCondition",
    "availability": "https://schema.org/InStock"
  }
}
```

> **Key rule:** Product rich results support only pages that focus on a single product or multiple variants of the same product. A page like "shoes in our shop" is not eligible. Google recommends putting Product structured data in the initial HTML, not generated by JavaScript, for reliable crawling ([Google Search Central](https://developers.google.com/search/docs/appearance/structured-data/product-snippet)).

---

## 5. Accessibility (WCAG 2.2 AA)

AI Web Page SEO's error documentation notes that accessibility errors overlap with SEO ranking signals ([AI Web Page SEO Learning Hub](https://aiwebpageseo.com/learning-hub.html)). The following checklist covers WCAG 2.2 Level A and AA success criteria most relevant to AI-search readiness ([W3C WCAG 2.2 Quick Reference](https://www.w3.org/WAI/WCAG22/quickref/)). AI Web Page SEO's [Accessibility Audit](https://aiwebpageseo.com/accessibility-audit.html) reports all 55 WCAG 2.2 Level A and AA criteria for a page after its scripts have run.

### 5.1 Perceivable

| SC | Requirement | Audit method |
|---|---|---|
| 1.1.1 Non-text Content | All images have appropriate `alt` text; decorative images use `alt=""` | Inspect all `<img>` tags |
| 1.3.1 Info and Relationships | Semantic HTML used for headings, lists, tables, landmarks | Check heading hierarchy (single H1, sequential H2-H6) |
| 1.4.3 Contrast (Minimum) | Text contrast ratio at least 4.5:1 (3:1 for large text) | Use WebAIM Contrast Checker or axe DevTools |
| 1.4.4 Resize Text | Text resizable to 200% without loss of content/functionality | Zoom to 200% in browser |
| 1.4.5 Images of Text | Use text instead of images of text where possible | Check for text embedded in images |
| 1.4.10 Reflow | Content reflows at 320 CSS pixels width without horizontal scrolling | Test at 320px viewport width |
| 1.4.11 Non-text Contrast | UI components and graphics have 3:1 contrast against adjacent colors | Check buttons, form borders, icons |

### 5.2 Operable

| SC | Requirement | Audit method |
|---|---|---|
| 2.1.1 Keyboard | All functionality operable via keyboard | Tab through entire page |
| 2.1.2 No Keyboard Trap | Focus can move away from any component | Test modals, menus, embedded content |
| 2.4.1 Bypass Blocks | Skip-to-content link or landmark navigation | Check for skip link or ARIA landmarks |
| 2.4.2 Page Titled | Every page has a descriptive `<title>` | Inspect `<title>` tags |
| 2.4.4 Link Purpose (In Context) | Link text is descriptive (no "click here") | Review all link text |
| 2.4.6 Headings and Labels | Headings and labels describe their topic/purpose | Review heading and form label text |
| 2.4.7 Focus Visible | Keyboard focus indicator is visible | Tab through and check focus outlines |
| 2.4.11 Focus Not Obscured (Minimum) | Focused element is not fully hidden by sticky headers, banners or cookie bars | Tab through with sticky elements visible |
| 2.5.3 Label in Name | Visible label text matches accessible name | Check buttons and links with icon + text |
| 2.5.8 Target Size (Minimum) | Touch targets at least 24 by 24 CSS pixels, or enough spacing | Check small links and icon buttons |

### 5.3 Understandable

| SC | Requirement | Audit method |
|---|---|---|
| 3.1.1 Language of Page | `<html lang="en">` (or appropriate code) present | Inspect `<html>` tag |
| 3.1.2 Language of Parts | `lang` attribute on content in different language | Check foreign-language passages |
| 3.2.1 On Focus | Receiving focus does not trigger context change | Tab through all interactive elements |
| 3.2.2 On Input | Changing a form control does not auto-submit without warning | Test all form controls |
| 3.3.1 Error Identification | Form errors are identified and described in text | Submit invalid forms |
| 3.3.2 Labels or Instructions | All form fields have associated `<label>` elements | Inspect form markup |
| 3.3.3 Error Suggestion | Known corrections are suggested for errors | Test form validation |
| 3.3.4 Error Prevention (Legal/Financial) | Submissions are reversible, checked, or confirmable | Test checkout/booking flows |
| 3.3.7 Redundant Entry | Information already entered is not asked for again in the same process | Test multi-step forms |
| 3.3.8 Accessible Authentication (Minimum) | Login does not rely on a memory or puzzle test without an alternative | Test login and sign-up |

### 5.4 Robust

| SC | Requirement | Audit method |
|---|---|---|
| 4.1.2 Name, Role, Value | All custom components have ARIA roles, names, and values | Test with screen reader |
| 4.1.3 Status Messages | Status messages use `role="status"` or `role="alert"` | Test dynamic content updates |

### 5.5 Recommended Accessibility Audit Tools

| Tool | Purpose | Cost |
|---|---|---|
| [AI Web Page SEO Accessibility Audit](https://aiwebpageseo.com/accessibility-audit.html) | All 55 WCAG 2.2 A and AA criteria, rendered page, keyboard and reflow checks | Pay as you go |
| [axe DevTools](https://www.deque.com/axe/devtools/) | Automated WCAG scanning in browser | Free (basic) |
| [WAVE](https://wave.webaim.org/) | Web accessibility evaluation | Free |
| [Lighthouse](https://developer.chrome.com/docs/lighthouse) | Accessibility audit in Chrome DevTools | Free |
| [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/) | Colour contrast verification | Free |
| [NVDA](https://www.nvaccess.org/) | Screen reader testing | Free |
| [Google Search Console](https://search.google.com/search-console) | Indexing status, structured data enhancements, search performance | Free |

---

## 6. Content Quality & E-E-A-T for AI Answers

AI Web Page SEO identifies three factors that make a page "quotable" by AI answer engines ([AI Web Page SEO](https://aiwebpageseo.com/)):

### 6.1 Answer-First Writing

- Lead each section with a direct, self-contained answer of roughly 40-60 words
- Expand with detail after the direct answer
- Models extract leading statements well — if the answer is buried, it may not be surfaced

### 6.2 Trust Signals (E-E-A-T)

AI Web Page SEO's Learning Hub covers E-E-A-T as four dimensions Google uses to assess page quality ([AI Web Page SEO Learning Hub](https://aiwebpageseo.com/learning-hub.html)):

| Dimension | What to demonstrate | Implementation |
|---|---|---|
| Experience | First-hand knowledge of the subject | Original content, case studies, real examples |
| Expertise | Demonstrated subject-matter knowledge | Author credentials, qualifications, `Person` schema |
| Authority | Reputation in the field | `sameAs` links to authoritative profiles, accreditations |
| Trust | Site credibility signals | HTTPS, contact info, visible privacy policy, accurate NAP |

### 6.3 Content Checklist for AI Quotability

| Check | What to verify |
|---|---|
| Named author with real expertise | Author byline present with credentials |
| Publication date visible | Date shown on page |
| Updated date visible | Last-modified date shown |
| Cited sources | External claims link to authoritative sources |
| Factual specificity | Claims are specific and verifiable, not vague |
| Unambiguous content | Content is clear enough that a model can parse it confidently |
| FAQ content with direct answers | Where Q&A content exists, answers are concise and direct |
| Schema matches visible content | JSON-LD reflects what visitors actually see |

---

## 7. AI Answer Engine Visibility Verification

### 7.1 Query-Based Testing Methodology

Based on AI search tracking best practices ([Frase](https://www.frase.io/blog/ai-search-tracking-monitor-your-visibility-across-ai-engines)):

1. **Identify 20-50 queries** relevant to your business, brand, and expertise
   - Include branded queries (your firm/restaurant/product name)
   - Include non-branded queries (e.g., "family law solicitor Coleraine")
   - Include question-based queries (e.g., "how long does probate take?")

2. **Test each query** across all four AI engines:

| Engine | URL | What to track |
|---|---|---|
| ChatGPT | chat.openai.com | Direct citations with clickable links; brand mentions; position in response |
| Perplexity | perplexity.ai | Citation as numbered source; frequency; follow-up query visibility |
| Google AI Overviews | google.com | Appearance frequency; source attribution; position in overview |
| Microsoft Copilot | copilot.microsoft.com | Citations in responses; visibility across interfaces |

3. **Document results** in a spreadsheet with columns:
   - Query | Platform | Cited (Y/N) | Position | Competitors Cited | Date Tested

4. **Repeat weekly or monthly** to track trends

> **Important testing caveats:**
> - AI answer results vary by platform mode, user location, date, account state, and model version. Track the prompt text, date, market/geography, device, login state, citation URL, competitors cited, and repeat runs for consistency.
> - For ChatGPT specifically, test only in web/search-enabled modes (e.g., ChatGPT with browsing/SearchGPT). In standard chat mode without browsing, ChatGPT may not access live pages and will not cite current web content.
> - AI Overviews in Google Search appear selectively and are not shown for every query or in every region.

### 7.2 What to Track Per Engine

| Metric | Description |
|---|---|
| Citation frequency | How often AI engines cite your content as a source |
| Brand mentions | Direct mentions of your brand name, products, or services |
| Position within response | Mentioned first vs. later in the answer |
| Query coverage | Percentage of tested queries that surface your content |
| Share of voice | Your citations vs. competitors' citations |
| Link click-through | Whether users click through to your site from AI citations |

### 7.3 AI Visibility Monitoring Tools

| Tool | Purpose |
|---|---|
| Manual testing | Query each engine directly (most reliable baseline) |
| [Google Search Console](https://search.google.com/search-console) | Track indexing, structured data enhancements, queries, clicks, impressions, and page performance |
| AI Web Page SEO Site Audit | Re-run audit after fixes to confirm AEO score improvement across four AI engines |
| Server log analysis | Monitor for AI crawler user-agents (GPTBot, PerplexityBot, ClaudeBot) in access logs |

> **Note:** Google Search Console does not currently provide a dedicated AI Overview citation report. Use manual or specialist AI visibility tracking for AI Overview and citation presence.

### 7.4 AI Web Page SEO AEO Workflow

AI Web Page SEO recommends a cyclical workflow ([AI Web Page SEO Learning Hub](https://aiwebpageseo.com/learning-hub.html)):

1. Run a free Site Audit
2. Open the Learning Hub for guidance on each issue
3. Apply recommended fixes
4. Re-run the audit to confirm the AEO score improved
5. Use Score History to track changes over time

---

## 8. Prioritized Fix List for Sample URL

### Sample URL: `https://www.example-solicitors.co.uk/family-law/`

This is a **hypothetical** solicitors' practice area page. The fix list below covers crawlability, accessibility (WCAG 2.2), and structured data eligibility, prioritised by severity, AI-search impact, and implementation effort.

### Priority Levels

| Priority | Definition |
|---|---|
| **P0** | Blocker — prevents AI crawlers or answer engines from reading/citing the page |
| **P1** | Eligibility — missing required elements for rich results or AI comprehension |
| **P2** | Enhancement — improves AI visibility quality and citation likelihood |

---

### P0 — Critical Blockers

| # | Issue | Category | Why it matters for AI search | How to fix | Validation |
|---|---|---|---|---|---|
| 1 | `robots.txt` blocks `GPTBot` and `PerplexityBot` | Crawlability | If AI crawlers are blocked, the page will never be read or cited by ChatGPT or Perplexity | Add `User-agent: GPTBot` and `User-agent: PerplexityBot` with `Allow: /` to robots.txt | `curl -A "GPTBot" https://www.example-solicitors.co.uk/family-law/` returns HTTP 200 |
| 2 | Page returns HTTP 302 redirect to homepage | Crawlability | Redirect chains prevent AI engines from parsing the actual content | Fix redirect to either serve the page directly (200) or use a single 301 to the correct canonical URL | `curl -I -L https://www.example-solicitors.co.uk/family-law/` shows final 200 status |
| 3 | Page blocked by `noindex` meta tag | Crawlability | `noindex` prevents indexing by Google and removes the page from AI Overviews eligibility | Remove `<meta name="robots" content="noindex">` from the page | View page source; Search Console URL Inspection shows "Indexed" |
| 4 | Critical content loaded only via JavaScript | Crawlability | AI crawlers may not execute JS; content invisible to them cannot be cited | Ensure answer-first content, headings, and contact info are in the initial server-rendered HTML | Fetch as Google in Search Console; use `curl` to check raw HTML |
| 5 | 4xx/5xx HTTP error on key pages | Crawlability | Error pages return no content for AI crawlers to read or cite | Fix server errors; ensure important pages return HTTP 200 | `curl -I https://www.example-solicitors.co.uk/family-law/` returns 200 |

### P1 — Eligibility Issues

| # | Issue | Category | Why it matters for AI search | How to fix | Validation |
|---|---|---|---|---|---|
| 6 | No canonical tag on page | Crawlability | Without canonical, AI engines may parse duplicate versions and dilute citation authority | Add `<link rel="canonical" href="https://www.example-solicitors.co.uk/family-law/">` to `<head>` | View page source; verify in Search Console URL Inspection |
| 7 | Broken internal links on page | Crawlability | Broken links prevent AI crawlers from discovering related pages; orphaned pages may never get cited | Fix all broken internal links (404s); ensure every page is linked from at least one other page | Crawl with Screaming Frog; check for 404s in internal links |
| 8 | Invalid JSON-LD with syntax errors | Structured data | Broken JSON-LD prevents any schema from being parsed; page loses all structured data eligibility | Fix JSON syntax errors (missing commas, unescaped quotes, trailing commas) | [Schema.org Validator](https://validator.schema.org) — 0 errors |
| 9 | No `LegalService` schema on practice area page | Structured data | Without schema, AI engines must guess the page type from raw HTML; may miscategorise | Add `LegalService` JSON-LD with name, address, telephone, url, geo, openingHoursSpecification, areaServed, makesOffer | [Google Rich Results Test](https://search.google.com/test/rich-results) — valid |
| 10 | No `FAQPage` schema despite Q&A content visible on page | Structured data | FAQPage schema gives AI engines structured Q&A pairs to extract; validates for structured data and may support FAQ rich result eligibility where supported | Add `FAQPage` JSON-LD matching the visible FAQ content on the page | Rich Results Test — FAQPage validates |
| 11 | No `BreadcrumbList` schema | Structured data | Breadcrumbs help AI engines understand site hierarchy and page relationships | Add `BreadcrumbList` JSON-LD reflecting the visible breadcrumb trail | Rich Results Test — BreadcrumbList valid |
| 12 | No `Person` schema on author/solicitor profile | Structured data | Missing author credentials weakens E-E-A-T signals; AI engines are conservative about citing unattributed content | Add `Person` schema with name, jobTitle, alumniOf, hasCredential, knowsAbout, sameAs (LinkedIn) | Schema.org Validator — valid |
| 13 | Missing `llms.txt` at domain root | AI discoverability | No site-level map for AI models to identify key pages | Create and publish `/llms.txt` following the v1.7.0 specification (see Section 3) | `curl https://www.example-solicitors.co.uk/llms.txt` returns 200 |
| 14 | Page `<title>` is generic ("Family Law") | Content quality | Generic titles reduce AI citation likelihood; AI engines favour specific, descriptive pages | Update to "Family Law Solicitors Coleraine | Smith & Partners" | Inspect `<title>` tag |
| 15 | No `<h1>` heading on page | Accessibility (1.3.1) | Missing H1 prevents semantic understanding for both screen readers and AI parsers | Add a single descriptive `<h1>` matching the page topic | View page source; only one H1 present |
| 16 | Images missing `alt` text | Accessibility (1.1.1) | AI engines cannot interpret images without text alternatives; also a WCAG 2.2 Level A failure | Add descriptive `alt` attributes to all content images; `alt=""` for decorative | Inspect all `<img>` tags |
| 17 | Form fields missing `<label>` elements | Accessibility (3.3.2) | Unlabelled forms are inaccessible and prevent AI engines from understanding form purpose | Associate `<label>` elements with all form controls using `for`/`id` | axe DevTools or WAVE — 0 form label errors |
| 18 | No visible publication or updated date | Trust signals | AI engines are conservative about citing undated content; dates reduce citation risk | Add visible publication date and last-updated date to the page content | Visual inspection of page |
| 19 | No named author on page | Trust signals | Anonymous content reduces E-E-A-T authority signals; AI engines prefer attributed sources | Add author byline with credentials; link to solicitor profile page | Visual inspection; Person schema present |
| 20 | Text contrast below 4.5:1 ratio | Accessibility (1.4.3) | Low contrast reduces readability for both users and AI-powered accessibility tools; WCAG 2.2 AA failure | Adjust text/background colours to meet minimum 4.5:1 contrast ratio | WebAIM Contrast Checker — passes |
| 21 | Core Web Vitals failing (LCP > 2.5s) | Crawlability / Performance | AI Web Page SEO identifies failing Core Web Vitals as a critical technical issue; slow pages may be deprioritised by Google and AI crawlers | Optimise LCP: preload hero image, reduce render-blocking JS/CSS, use CDN | PageSpeed Insights — LCP < 2.5s |

### P2 — Enhancements

| # | Issue | Category | Why it matters for AI search | How to fix | Validation |
|---|---|---|---|---|---|
| 22 | Answer-first content not implemented | Content quality | AI models extract leading statements; buried answers may not be surfaced | Rewrite section openings to lead with a direct 40-60 word answer, then expand | Manual review of section structure |
| 23 | No `Organization` schema on homepage | Structured data | Missing organization identity weakens entity recognition for AI engines | Add `Organization` JSON-LD on homepage with name, url, logo, sameAs, contactPoint | Rich Results Test — valid |
| 24 | No skip-to-content link | Accessibility (2.4.1) | Without bypass mechanism, AI crawlers and screen readers must parse navigation on every page | Add skip link: `<a href="#main" class="skip-link">Skip to main content</a>` | Tab from URL bar; skip link appears |
| 25 | `<html lang>` attribute missing | Accessibility (3.1.1) | Missing language declaration prevents AI engines from confidently identifying content language | Add `lang="en-GB"` to `<html>` tag | Inspect `<html>` tag |
| 26 | No `identity.json` file published | AI discoverability | Missing structured identity data weakens cross-file consistency with llms.txt | Create and publish `/identity.json` with name, description, url, contactPoint matching llms.txt | `curl https://www.example-solicitors.co.uk/identity.json` returns 200; name matches llms.txt H1 |
| 27 | No server log monitoring for AI crawlers | AI visibility | Without log analysis, you cannot confirm whether AI crawlers are actually visiting | Set up log analysis to monitor GPTBot, PerplexityBot, ClaudeBot access patterns | Server logs show AI crawler visits |
| 28 | No `sameAs` links to authoritative profiles | E-E-A-T | Missing entity connections reduce AI confidence in citing the business as a source | Add `sameAs` array linking to Google Business Profile, LinkedIn, SRA register, social media | Schema.org Validator — sameAs URLs resolve |
| 29 | No query-based AI visibility tracking | AI visibility | Without baseline testing, you cannot measure whether fixes are improving AI citation rates | Set up the 20-50 query testing methodology (see Section 7) across all four AI engines | Spreadsheet tracking citations monthly |

---

### Fix List Summary by Category

| Category | P0 | P1 | P2 | Total |
|---|---|---|---|---|
| Crawlability | 3 | 3 | 0 | 6 |
| Structured Data | 0 | 4 | 1 | 5 |
| Accessibility (WCAG 2.2) | 0 | 5 | 2 | 7 |
| Content Quality / E-E-A-T | 0 | 3 | 1 | 4 |
| AI Discoverability (llms.txt) | 0 | 1 | 1 | 2 |
| AI Visibility Tracking | 0 | 0 | 2 | 2 |
| Performance (Core Web Vitals) | 0 | 1 | 0 | 1 |
| HTTP Errors | 1 | 0 | 0 | 1 |
| **Total** | **5** | **16** | **8** | **29** |

---

### Recommended Implementation Order

**Week 1 — P0 blockers:** Fix robots.txt AI crawler access, HTTP status/redirects, remove noindex, ensure server-rendered content, fix 4xx/5xx errors. These prevent everything else from working.

**Week 2 — P1 crawlability & structured data:** Add canonical tags, fix broken internal links, fix JSON-LD syntax. Deploy LegalService, FAQPage, BreadcrumbList, and Person schema. Publish llms.txt. Fix page titles and headings.

**Week 3 — P1 accessibility, trust & performance:** Add alt text, form labels, author bylines, publication dates. Fix text contrast (4.5:1). Resolve Core Web Vitals failures (LCP, CLS, INP).

**Week 4 — P2 enhancements:** Implement answer-first content, Organisation schema, skip links, identity.json. Set up AI visibility tracking and server log monitoring.

**Ongoing:** Monthly query-based testing across ChatGPT, Perplexity, Google AI Overviews, and Copilot. Quarterly llms.txt review. Re-run AI Web Page SEO audit to track AEO score improvements.

---

## Sources

- [AI Web Page SEO — Schema Markup & AEO Documentation](https://aiwebpageseo.com/)
- [AI Web Page SEO Learning Hub — Tutorials, Guides & AI Search Tips](https://aiwebpageseo.com/learning-hub.html)
- [llms.txt Specification v1.7.0 — AI Visibility](https://www.ai-visibility.org.uk/specifications/llms-txt/)
- [Google Search Central — Local Business Structured Data](https://developers.google.com/search/docs/appearance/structured-data/local-business)
- [Google Search Central — Product Snippet Structured Data](https://developers.google.com/search/docs/appearance/structured-data/product-snippet)
- [Google Search Central — Merchant Listing Structured Data](https://developers.google.com/search/docs/appearance/structured-data/merchant-listing)
- [Google Search Central — Product Structured Data Overview](https://developers.google.com/search/docs/appearance/structured-data/product)
- [BSM Legal Marketing — Schema Markup for Local SEO for Law Firms](https://bsmlegalmarketing.com/marketing-for-law-firms/local-seo-for-lawyers/schema-markup/)
- [W3C WCAG 2.2 Quick Reference](https://www.w3.org/WAI/WCAG22/quickref/)
- [Google Rich Results Test](https://search.google.com/test/rich-results)
- [Schema.org Validator](https://validator.schema.org)
- [Frase — AI Search Tracking for Brand Visibility](https://www.frase.io/blog/ai-search-tracking-monitor-your-visibility-across-ai-engines)
