AEO NIUEXA

Structural & Semantic Integrity

15% Weight Check reference Priorities vary by result

Structural checks look at how the page is built: its headings and sections, its HTML elements, its title and meta description, and the Schema.org markup that describes it. A clear structure helps readers, screen readers and the software that splits pages into passages, and markup that matches the page tells search engines what it is about.

Describe the page accurately: Schema.org markup helps search engines understand your business and your pages, and it has to match what visitors can see (the Markup Matches Page check). A citation benefit from any one schema type is unproven.
How these checks count: A check counts by its importance in this dimension multiplied by how well the evidence supports it: Official checks count in full, Practitioner advice counts at half weight (most checks on this page), and checks marked Unproven are shown in your report but not scored. A check that is N/A, for example markup for content the page does not have, is left out of the score rather than counted as a pass or a failure; if nothing in this dimension can be weighed, the dimension is shown as not measured and the other weights are scaled up. Italian pages are read with Italian wording for question headings, FAQ and step sections and skip links. The badge next to each check shows the usual priority of a failure; your report shows the priority of your own result. See the scoring system for the details.

HTML Structure Checks

Headings, page title and description, and the HTML elements that give the page its shape

Heading Hierarchy

High
What it checks
Reads the page's headings (H1 to H6) in document order and looks for exactly one H1 and for skipped levels, such as an H2 followed directly by an H4. Empty headings are ignored, and a heading repeated with the same level and text, as responsive layouts often do, counts once.
Why it matters
An orderly outline makes the page easier to scan for readers, screen readers and software that splits pages into sections. It is a useful convention, not a ranking rule.
How it is scored
Practitioner advice, counts at half weight. 100 for one H1 and no skipped levels. A missing H1, or more than one, costs 40 in all; skipped levels cost 10 together, however many there are. It passes only with exactly one H1 and no skipped level; any problem fails it (High).
Pass: exactly one H1 and no skipped levels Fail: no H1, more than one H1, or a skipped level
How to fix
Use exactly one H1 for the main title. Use H2 for major sections, H3 for subsections, and so on, without skipping levels (e.g., H1 to H3). Make each heading describe its section.
Correct Structure Example
<h1>Complete Guide to AI Engine Optimization</h1>
  <h2>What is AEO?</h2>
    <h3>Definition</h3>
    <h3>History</h3>
  <h2>How to Implement AEO</h2>
    <h3>Step 1: Technical Foundation</h3>
    <h3>Step 2: Content Optimization</h3>
      <h4>Writing for AI</h4>
      <h4>Structured Data</h4>
  <h2>Conclusion</h2>

Meta Description Quality

High
What it checks
Reads the page's title tag and meta description, checks their length and checks that the description does not just repeat the title. Open Graph tags are scored by OpenGraph Tags on the Technical page, not here.
Why it matters
Search engines often show the title and description as the headline and summary of your page in results, and AI tools may use them to describe it. Without them they write their own from the first text they find, often navigation or boilerplate.
How it is scored
Official evidence, counts in full. Starts at 100. Title: minus 40 when it is missing, 15 when it is shorter than 15 characters, 10 when it is longer than 70. Description: minus 35 when it is missing, 15 when it is shorter than 70 characters, 10 when it is longer than 200. Minus 15 more when the description repeats the title. It passes at 70 or more (High when the title or the description is missing, Medium otherwise).
Pass: 70 or more Fail: no title or no meta description, or several problems together
How to fix
Write a unique title of about 30 to 60 characters and a meta description of about 120 to 160 characters for every page. Describe what the page answers, not just the brand, and keep og:title and og:description in step with them.

Semantic HTML5

Medium
What it checks
Counts 14 semantic elements (<article>, <section>, <nav>, <main>, <aside>, <header>, <footer>, <figure>, <figcaption>, <time>, <mark>, <address>, <details>, <summary>) against generic <div> and <span> elements, and checks that the page has exactly one <main>. This semantic ratio is part of Semantic HTML5; the former HTML Semantic Ratio check no longer runs on its own.
Why it matters
These elements tell browsers, screen readers and other software which part of the page is the main content and which is the menu, header or footer.
How it is scored
Practitioner advice, counts at half weight. Up to 50 points for variety (seven or more different semantic elements earn all 50) and up to 50 for the share of semantic elements among all containers (30% or more earns all 50), minus 15 without exactly one <main>. It passes with at least four different semantic elements, exactly one <main> and a share of 5% or more.
Pass: four or more kinds of semantic elements, one <main>, a share of 5% or more Fail: fewer kinds, no <main> or more than one, or a share under 5%
How to fix
Replace generic divs with semantic elements: <main> for the primary content (once per page), <article> for self-contained content, <section> for thematic groups, <nav> for menus, and <header>, <footer> and <aside> for the rest.
Example
<body>
  <header>
    <nav>...navigation...</nav>
  </header>

  <main>
    <article>
      <header>
        <h1>Article Title</h1>
        <time datetime="2024-01-15">January 15, 2024</time>
      </header>

      <section>
        <h2>Section Title</h2>
        <p>Content...</p>
      </section>

      <figure>
        <img src="image.jpg" alt="Description">
        <figcaption>Image caption</figcaption>
      </figure>
    </article>

    <aside>
      <h2>Related Articles</h2>
      ...
    </aside>
  </main>

  <footer>
    <address>Contact information</address>
  </footer>
</body>

Text-to-Tag Ratio

Unproven · not scored
What it checks
Compares the length of the visible text in the page body with the length of its HTML, after removing scripts, styles, noscript, template and SVG code.
Why it matters
No ideal ratio has been shown to matter for search or AI answers, so this is shown for information and does not count in your score.
How it is scored
Unproven, not scored. 100 for a ratio from 15% to 80%, 75 from 10% to 15% or from 80% to 90%, 50 outside that. It passes from 15% to 80%.
How to fix
Nothing is required. If the page is mostly code, keep the main content in the HTML and remove leftover markup, inline styles and hidden boilerplate.

Lists and Tables

Low
What it checks
Looks for <ul>, <ol> and <dl> lists and <table> elements, and for tables with <th> header cells.
Why it matters
Steps, specifications and comparisons in real lists and tables are easier for readers to scan, and search and AI tools pick them up more reliably than the same facts in prose.
How it is scored
Official evidence, counts in full. 50 to start, 25 more for any list, 15 for any table and 10 when a table has header cells. It passes with at least one list or table.
Pass: at least one list or table (100 with lists and a table with header cells) Fail: no list and no table
How to fix
Use <ul> for unordered items, <ol> for sequential steps and <dl> for terms and definitions. Put comparisons and specifications in a table with <th> header cells.

Schema.org Structured Data

Machine-readable markup that states what the page is about. These checks read JSON-LD.

Structured Data (Schema.org)

High
What it checks
Reads the page's JSON-LD (script type="application/ld+json", including @graph blocks) and checks that each item parses and has @context and @type. It notes the common types it finds: FAQPage, HowTo, Article, NewsArticle, BlogPosting, Organization, LocalBusiness, Product, Recipe, Event, Person, WebSite and BreadcrumbList. Microdata and RDFa are not read here.
Why it matters
Structured data gives search engines explicit labels for your business and page, so they do not have to guess, and some types make pages eligible for Google rich results. An AI citation boost from markup is unproven. Keep it in step with the visible page (see Markup Matches Page below).
How it is scored
Practitioner advice, counts at half weight. 70 for valid JSON-LD; 90 when it includes one of the common types listed above, 95 with two and 100 with three or more. 10 (fail) when the page has JSON-LD but none of it is valid, 0 (fail, High) when there is none.
Pass: at least one valid JSON-LD item Fail: no JSON-LD, or none of it valid
How to fix
Mark up what the page really shows: Organization or LocalBusiness and WebSite on the home page, Article on articles, Product on product pages. Validate it with Google's Rich Results Test or the Schema.org validator.

Markup Matches Page

High
What it checks
Compares the names, prices, headlines, authors and dates in your JSON-LD with the visible text of the page. It reads the top-level entities only: the name of an Organization or LocalBusiness (a logo's alt text counts), the name and price of a Product (any offer price shown passes), and the headline, every author and the publication date of an Article, NewsArticle or BlogPosting. Prices match in any common format and dates by day in the usual written forms or a time element. Up to 40 values are compared per page.
Why it matters
Google requires structured data to describe what visitors can see. When a CMS fills the markup and the page from different fields, the markup can name one price or author and the page another, and search engines may ignore the markup or treat it as misleading.
How it is scored
Official evidence, counts in full. 100 when every value found in the markup also appears on the page. Otherwise the score is the share of values that do, and the check fails (High when a price differs, otherwise Medium).
Pass: every compared value is on the page Fail: a name, price, headline, author or date is not on the page N/A: no Organization, Product or Article markup to compare
How to fix
Generate the JSON-LD from the same CMS fields as the visible text. Correct each value the report lists, and remove markup for anything the page does not show.

FAQ Schema

Unproven · not scored
What it checks
On pages with FAQPage markup or a visible FAQ (details and summary elements, accordions, question headings in an FAQ section, an FAQ heading followed by questions, or definition lists), checks the FAQPage JSON-LD: its Question items, each with a name and an acceptedAnswer text.
Why it matters
Google no longer shows FAQ rich results for most sites, and no AI citation benefit is proven. Shown for information on pages with a visible FAQ; it does not count in your score. A clear visible FAQ still helps readers.
How it is scored
N/A when the page has no FAQ: with neither FAQPage markup nor visible FAQ content the check is shown as N/A and left out of the score. Otherwise, unproven and not scored: FAQPage markup with Question and Answer pairs starts at 60 and adds 20 with three or more pairs, 10 more with five or more and 10 with no problems, minus 5 for each problem (a missing question, or an answer that is missing or shorter than 20 characters). Visible FAQ content without markup scores 30. FAQPage markup with no valid Question items scores 0. Passes at 40 or more.
Pass: 40 or more (FAQPage markup with complete pairs) Fail: FAQ content without valid markup N/A: no FAQ on the page
How to fix
Optional. If you keep FAQ markup, make its questions and answers match the ones shown on the page exactly.
Example
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is AI Engine Optimization?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "AI Engine Optimization (AEO) is the practice of optimizing web content to be better understood, indexed, and cited by AI systems like ChatGPT, Claude, and Perplexity."
      }
    },
    {
      "@type": "Question",
      "name": "How does AEO differ from SEO?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "While SEO focuses on ranking in search results, AEO focuses on being accurately understood and cited by AI systems that generate answers."
      }
    }
  ]
}
</script>

HowTo Schema

Unproven · not scored
What it checks
On pages with HowTo markup or visible step-by-step content (an ordered list of three or more instructions, three or more elements marked as steps, or headings such as "Step 1"), checks the HowTo JSON-LD: its HowToStep items, each with a name or text.
Why it matters
Google no longer shows HowTo results, and no AI benefit is proven. Shown for information on pages with step-by-step instructions; it does not count in your score.
How it is scored
N/A when the page has no step-by-step content: with neither HowTo markup nor visible steps the check is shown as N/A and left out of the score. Otherwise, unproven and not scored: HowTo markup with HowToStep items starts at 60 and adds 20 with three or more steps, 10 more with five or more and 10 with no problems, minus 5 for each problem (a step with no text, or step text shorter than 10 characters). Visible steps without markup score 30. HowTo markup without HowToStep items (an empty or text-only step list) scores 0. Passes at 40 or more.
Pass: 40 or more (HowTo markup with complete steps) Fail: steps without valid markup N/A: no step-by-step content
How to fix
Optional. Write the steps as a numbered list on the page; if you add HowTo markup, it must match the visible steps.
Example
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "How to Implement Schema.org Markup",
  "description": "A step-by-step guide to adding structured data to your website.",
  "totalTime": "PT30M",
  "step": [
    {
      "@type": "HowToStep",
      "name": "Choose Schema Type",
      "text": "Identify the most appropriate schema type for your content.",
      "position": 1
    },
    {
      "@type": "HowToStep",
      "name": "Create JSON-LD",
      "text": "Write the JSON-LD markup following schema.org specifications.",
      "position": 2
    },
    {
      "@type": "HowToStep",
      "name": "Test and Validate",
      "text": "Use Google's Rich Results Test to validate your markup.",
      "position": 3
    }
  ]
}
</script>

Article Schema Completeness

Low
What it checks
The Article Schema check. On pages that look like articles, it checks Article, NewsArticle, BlogPosting, TechArticle or ScholarlyArticle markup for headline, author and datePublished, and for image, publisher and dateModified. A page counts as an article when it shows at least two signs: an article-like address (such as /blog, /news or /article), an <article> element, an author or byline, a date, or five or more paragraphs with over 1,000 characters of text.
Why it matters
Article markup states the headline, author and dates in a form search engines read directly, and Google uses it for article features. It shows who wrote the page and when.
How it is scored
N/A on pages that are not articles: with no Article markup and no article content the check is shown as N/A and left out of the score. Otherwise it is Practitioner advice and counts at half weight. Article markup passes; it starts at 40, with 15 each for headline, author and datePublished and 5 each for image, publisher and dateModified. An article page without markup scores 20 and fails.
Pass: Article markup (100 with all six properties) Lower score: markup without headline, author or datePublished Fail: an article without markup N/A: not an article
How to fix
Add Article (or NewsArticle or BlogPosting) markup with headline, author (a Person with a name), datePublished, dateModified, image and publisher (an Organization with a name and logo), using the same values the page shows.

Content Structure Checks

How the text is divided into sections, and how visitors find their way around

Question-Based Headings

Unproven · not scored
What it checks
Counts H1 to H4 headings phrased as questions: ending with a question mark, starting with a question word in English, Italian, French or Spanish (what, how, cosa, come, comment, cómo and others), or naming an FAQ. Italian pages also recognise more Italian openers, such as "Qual è", "C'è" or "Si può".
Why it matters
Question headings help when they match what your customers really ask; a higher share of them is not proven to help. Shown for information; it does not count in your score.
How it is scored
Unproven, not scored. The score is twice the share of question headings, so half of the headings phrased as questions gives 100. It passes with at least one question heading.
Pass: at least one question heading Fail: no question heading
How to fix
Where it reads naturally, phrase a heading as the question your customers ask and answer it in the first sentence below, for example "What are the benefits of AEO?" instead of "Benefits of AEO". Don't rewrite every heading as a question.

Content Chunkability

Medium
What it checks
Splits the main content (<main>, else <article>, else the body) into sections at each H1 to H4 heading. A section is well sized when it introduces some text (20 characters or more, counting its subsections) and its own text before the next heading stays within 1,200 characters. It also looks at the average paragraph length.
Why it matters
Focused sections under clear headings can be understood when one is quoted on its own. Splitting text this way is common practice.
How it is scored
Practitioner advice, counts at half weight. The score is the share of well-sized sections, minus 10 when the average paragraph is longer than 600 characters or shorter than 40. A page with paragraphs but no headings scores 30. It passes at 60.
Pass: 60 or more (most sections well sized) Fail: many empty or over-long sections, or no headings
How to fix
Give each section one topic under a descriptive heading, add a subheading when a section runs past about 1,200 characters, don't leave headings with nothing under them, and keep paragraphs short.

Accessibility Checks

Page regions, tables, skip links and forms that people and software can find their way through

ARIA Landmarks

Medium
What it checks
Counts the kinds of page regions marked as landmarks: explicit role attributes (main, navigation, banner, contentinfo, complementary, search, region, form) and the HTML elements that imply them (<main>, <nav>, <header>, <footer>, <aside>, <form>, <section>).
Why it matters
Landmarks let screen-reader users jump between header, menu, main content and footer; text-only tools use them the same way.
How it is scored
Practitioner advice, counts at half weight. 100 for five or more kinds of landmarks, 80 for three or four, 60 for one or two, 0 (fail) for none. It passes with at least one.
Pass: at least one landmark (100 with five kinds or more) Fail: no landmark
How to fix
Use the HTML elements that carry landmark roles (<header>, <nav>, <main>, <aside>, <footer>); add role attributes such as role="main" only where you cannot use them.

Table Accessibility

Medium
What it checks
For each data table on the page, checks for header cells (<th>), a scope attribute on every header cell, and a <caption> (or an aria-label or aria-labelledby). Tables marked role="presentation" or aria-hidden="true" count as layout tables and are skipped.
Why it matters
Header cells and captions tell screen readers, and software that reads the table, what each row and column means.
How it is scored
Practitioner advice, counts at half weight. Up to 50 points for the share of data tables with header cells, 25 for the share with a caption and 25 for the share with scope on every header cell. It passes when every data table has header cells.
Pass: every data table has header cells Fail: a data table without header cells N/A: no tables on the page
How to fix
Use <th> for header cells with scope="col" or scope="row", add a <caption> that says what the table shows, and group rows with <thead> and <tbody>.

Automation Readiness

Unproven · not scored
What it checks
Looks for things that can stop an AI assistant acting for a user: a CAPTCHA (reCAPTCHA, hCaptcha, Cloudflare Turnstile or other captcha code in the page) and, in forms, hidden fields that look like spam traps, disabled fields, fields without a label (a label element, aria-label, aria-labelledby or placeholder) and common fields such as email, name or phone without an autocomplete attribute.
Why it matters
AI assistants that act for a user may get stuck on CAPTCHAs and unlabelled forms. Whether this affects AI visibility is untested, so this check is not scored.
How it is scored
Unproven, not scored. Starts at 100 and loses 40 for a CAPTCHA and 10 for each kind of form problem found (at most 40). It passes with no CAPTCHA and at most two kinds of form problems.
How to fix
Optional. Label every form field and use autocomplete attributes. Avoid CAPTCHAs on informational pages (a honeypot field often works instead).

Microdata and RDFa

Not scored
Status
Not a separate check. Structured Data (Schema.org) and Markup Matches Page read JSON-LD only, so structured data written as Microdata or RDFa is not counted there. Breadcrumbs marked up with Microdata are recognised by the breadcrumb check, and Navigation Structure also recognises RDFa breadcrumbs. Google recommends JSON-LD, so publish your structured data in that format if you can.