# What does an on-page SEO, AEO, and GEO checklist include?

> An on-page readiness checklist covers three groups: crawl and SEO basics such as title, canonical, and robots rules; answer structure such as question-led headings and FAQ schema; and citation signals such as external references, author, and date. This page lists exactly the signals XEO Agent reads from server-delivered HTML, with the pass rule for each.

Last updated: 2026-10-07. Published by Limestone Labs LLC at https://xeoagent.com/learn/checklist/.

## How does XEO Agent group these checks?

XEO Agent groups on-page checks into SEO, AEO, and GEO, plus a Technical group for transport-level problems and an optional Local group for LocalBusiness pages. Each check reads a specific tag, header, or count from the delivered HTML. When a check fails, the app records a finding with a code, a severity, the evidence it saw, and a recommendation. The tables below use the same codes.

## Which crawl and SEO checks are included?

These checks decide whether a search engine can fetch, index, and understand the page. They feed the SEO technical and on-page scores.

| Check | Why engines care | Pass rule | Finding when it fails |
|---|---|---|---|
| HTTP status | Error pages are dropped from the index | Status below 400 | `HTTP_STATUS` |
| HTTPS | Insecure pages are demoted and warned about | URL scheme is `https` | `HTTPS_MISSING` |
| Redirects | Redirect chains waste crawl budget and split signals | Audited URL is served directly | `URL_REDIRECTED` |
| Response time | Slow HTML delays crawling and rendering | Under 3,000 ms | `RESPONSE_SLOW` |
| HTML size | Oversized documents may be truncated | Under 1.5 MB | `HTML_OVERSIZED` |
| Content type | Missing type forces the crawler to guess | `Content-Type` header present | `CONTENT_TYPE_MISSING` |
| Title | Primary ranking and snippet text | Present, 10 to 70 characters | `TITLE_MISSING`, `TITLE_LENGTH` |
| Meta description | Snippet text and click-through | Present, 70 to 160 characters | `META_DESCRIPTION_MISSING`, `META_DESCRIPTION_LENGTH` |
| Canonical | Prevents duplicate indexing | Absolute canonical URL present | `CANONICAL_MISSING`, `CANONICAL_INVALID` |
| Robots directives | A `noindex` removes the page entirely | No `noindex` in meta robots or `X-Robots-Tag` | `INDEXING_BLOCKED` |
| Viewport | Mobile-first indexing | `width=device-width` present | `VIEWPORT_MISSING` |
| Language and charset | Correct parsing and language targeting | `lang` attribute and charset declared | `HTML_LANG_MISSING`, `CHARSET_MISSING`, `CHARSET_CONFLICT` |
| H1 | Primary topic signal | Exactly one H1 | `H1_MISSING`, `H1_MULTIPLE` |
| Heading order | Structure for readers and extractors | No skipped levels, such as H3 without H2 | `HEADING_HIERARCHY` |
| Internal links | Crawl paths and authority flow | At least one internal link | `INTERNAL_LINKS_MISSING` |
| Link text | Anchor text describes the target | No links without text | `LINK_TEXT_MISSING` |
| Image alt text | Accessibility and image indexing | Every image has `alt` | `IMAGE_ALT_MISSING` |
| Content depth | Thin pages rarely rank or get cited | 300 or more words of body text | `CONTENT_THIN` |
| Open Graph | Social previews and some AI summaries | `og:title`, `og:description`, `og:image` present | `OPEN_GRAPH_INCOMPLETE` |
| Client rendering | Crawlers that do not execute JavaScript see an empty page | Meaningful text in the source HTML | `CLIENT_RENDERED_SUSPECTED` |

On site crawls the app adds site-level checks: `SITEMAP_MISSING`, `SITEMAP_COVERAGE_GAP`, `CANONICAL_CONFLICTS`, `DUPLICATE_TITLES`, `DUPLICATE_CONTENT`, and `ORPHAN_PAGES`. Coverage is automatic: there is no page-count setting, and the audit stops after 30 minutes if it has not finished. Saved results show the pages checked and any coverage limits.

## Which answer-engine (AEO) checks are included?

These checks decide whether an answer engine can lift a direct answer from the page. They feed the AEO schema, answer patterns, and entity coverage scores.

| Check | Why engines care | Pass rule | Finding when it fails |
|---|---|---|---|
| Structured data present | Machine-readable entities and answers | At least one JSON-LD block | `STRUCTURED_DATA_MISSING` |
| Structured data valid | Broken JSON is ignored | Every JSON-LD block parses | `STRUCTURED_DATA_INVALID` |
| Stable identifiers | Lets engines merge the same entity across pages | Schema uses `@id` | `SCHEMA_ID_MISSING` |
| Question-led headings | Matches how people ask | At least one H2 or H3 that ends in `?` or starts with what, why, how, when, where, who, which, can, does, do, is, are, or should | `ANSWER_STRUCTURE_MISSING` |
| FAQ schema | Q&A content is eligible for rich results | Pages with question headings declare `FAQPage` | `FAQ_SCHEMA_OPPORTUNITY` |
| Answer formats | Lists and tables are the most extracted blocks | At least one list or table | `ANSWER_FORMAT_LIMITED` |
| Entity context | Engines need enough surrounding text to trust the answer | 300 or more words, ideally with external links | `ENTITY_CONTEXT_LIMITED` |

The app scores answer patterns on a scale: no question headings scores 25, one scores 60, two or three score 80, four or more score 100, with a 10 point bonus for a list or table.

## Which citation (GEO) checks are included?

These checks decide whether a generative engine can attribute a claim to the page. They feed the GEO extractability, entity clarity, and source quality scores.

| Check | Why engines care | Pass rule | Finding when it fails |
|---|---|---|---|
| Self-contained passages | Engines quote a passage, not a page | Question-led headings followed by text, plus 300 or more words | Lowers extractability score |
| External references | Claims with sources are cited more often | At least one outbound link | `EXTERNAL_EVIDENCE_MISSING` |
| Quotations and citations | Named quotes are quotable | At least one `cite` or `blockquote` element | Lowers source quality score |
| Author | Provenance is a trust signal | `meta name="author"` or `author`, `publisher`, or `organization` in schema | `SOURCE_PROVENANCE_MISSING` |
| Date | Freshness and recency filters | `time datetime`, `article:published_time`, `article:modified_time`, or `datePublished` or `dateModified` in schema | `SOURCE_PROVENANCE_MISSING` |
| Entity linking | Connects the page to profiles engines already know | `sameAs` in schema | Lowers entity clarity score |

## Which items are not checked yet?

XEO Agent does not currently score `llms.txt`, markdown alternates, per-crawler `robots.txt` groups, hreflang, or the word count of the passage directly under a heading. Those are good practice and this site follows them, but the app does not report on them in the current release. See the [changelog](/changelog/) for rubric changes.

## How should you use this checklist?

Run a single-page audit on the page you care about. Fix the Error and Warning findings first, since those map to the pass rules above. Re-run the audit to confirm the finding is gone. Repeat on your highest-traffic pages, or run a site crawl to see the same checks across the whole site.

## Frequently asked questions

### Is this the same list the app uses?

Yes. Every item names the finding code XEO Agent reports when the check fails. The thresholds on this page are the ones in the current release. When the rubric changes, this page and the changelog are updated together.

### Does this checklist include Core Web Vitals or backlinks?

The page score does not include either. XEO Agent does not run a browser, so it records response time and HTML size rather than Core Web Vitals. The separate Backlinks tab verifies pages you provide and searches connected websites for links; it is not a complete backlink index.

### Does the checklist cover JavaScript-rendered content?

Only indirectly. If the HTML contains an application mount point, at least three scripts, and fewer than 80 words of text, the app reports that content may depend on client rendering. It does not execute the JavaScript.
