Technical SEO rules
Crawlability, indexability and page hygiene: the checks every search and answer engine depends on.
robots.txt is present
tech.robots-present · Severity: high · Weight: 8
A robots.txt tells crawlers which paths they may fetch.
Fix: Add a robots.txt at the site root referencing your sitemap.
Skill: aeo-ai-crawler-access teaches an agent how to fix this in your stack.
XML sitemap is present
tech.sitemap-present · Severity: high · Weight: 8
A sitemap helps engines discover all indexable URLs.
Fix: Publish a sitemap.xml and reference it from robots.txt.
Skill: aeo-indexability teaches an agent how to fix this in your stack.
Sitemap lists the pages we found
tech.sitemap-covers-pages · Severity: high · Weight: 6
Pages missing from the sitemap rely on being reached by internal links alone, which on a low-authority site often means never getting crawled.
Fix: Add every indexable page to sitemap.xml. If your sitemap is generated, check the generator sees pages added since it was written.
Skill: aeo-indexability teaches an agent how to fix this in your stack.
Sitemap lastmod dates are trustworthy
tech.sitemap-lastmod-trustworthy · Severity: medium · Weight: 4
lastmod should track real content changes. Future dates and whole-file timestamps regenerated on every deploy both train crawlers to ignore the signal.
Fix: Derive lastmod from content edit dates, not build time, and never emit a future date.
Skill: aeo-content-freshness teaches an agent how to fix this in your stack.
No redirect loops
tech.no-redirect-loops · Severity: critical · Weight: 8
A URL that redirects back to somewhere it has already been never resolves. Browsers abort it and crawlers drop the page entirely.
Fix: Find the cycle and make one hop terminal. Ordering bugs in rewrite/redirect rules are the usual cause.
Skill: aeo-indexability teaches an agent how to fix this in your stack.
llms.txt is present
tech.llms-txt-present · Severity: medium · Weight: 5
llms.txt curates the content you want answer engines to read.
Fix: Generate an llms.txt manifest of your key pages.
Skill: aeo-llms-txt teaches an agent how to fix this in your stack.
No broken (4xx/5xx) pages
tech.no-broken-pages · Severity: high · Weight: 7
Broken pages waste crawl budget and frustrate users.
Fix: Fix or redirect URLs returning 4xx/5xx status codes.
Skill: aeo-indexability teaches an agent how to fix this in your stack.
Redirect chains are short
tech.short-redirect-chains · Severity: medium · Weight: 4
Redirect chains longer than 2 hops slow crawlers and dilute signals.
Fix: Collapse multi-hop redirects to a single 301.
Skill: aeo-indexability teaches an agent how to fix this in your stack.
Pages are indexable (no accidental noindex)
tech.indexable · Severity: critical · Weight: 9
A noindex directive removes a page from search and answer engines.
Fix: Remove noindex from pages you want discovered.
Skill: aeo-indexability teaches an agent how to fix this in your stack.
Canonical URL is declared
tech.canonical-present · Severity: medium · Weight: 5
A canonical tag consolidates duplicate URLs to one preferred address.
Fix: Add to every indexable page.
Skill: aeo-indexability teaches an agent how to fix this in your stack.
Canonical URLs point somewhere real
tech.canonical-resolves · Severity: high · Weight: 6
A canonical naming a broken or malformed URL tells engines the authoritative copy is somewhere that does not load, which can drop the page from the index.
Fix: Point every canonical at an absolute URL that returns 200. Check it after any move or domain change.
Skill: aeo-indexability teaches an agent how to fix this in your stack.
Pages have a title tag
tech.meta-title-present · Severity: high · Weight: 7
The
Fix: Give every page a unique, descriptive
Skill: aeo-page-metadata teaches an agent how to fix this in your stack.
Title length is 30–60 characters
tech.meta-title-length · Severity: medium · Weight: 4
Titles outside this range get truncated or look thin in results.
Fix: Aim for 30–60 characters in each
Skill: aeo-page-metadata teaches an agent how to fix this in your stack.
Pages have a meta description
tech.meta-description-present · Severity: medium · Weight: 4
The meta description drives click-through from result snippets.
Fix: Write a unique meta description for every page.
Skill: aeo-page-metadata teaches an agent how to fix this in your stack.
Description length is 70–160 characters
tech.meta-description-length · Severity: low · Weight: 3
Descriptions outside this range get truncated or look incomplete.
Fix: Aim for 70–160 characters per description.
Skill: aeo-page-metadata teaches an agent how to fix this in your stack.
Each page has exactly one H1
tech.single-h1 · Severity: medium · Weight: 4
A single H1 communicates the primary topic unambiguously.
Fix: Use one H1 per page; demote extras to H2/H3.
Skill: aeo-answer-first-content teaches an agent how to fix this in your stack.
Heading hierarchy is valid
tech.heading-hierarchy · Severity: low · Weight: 3
Headings should descend without skipping levels (h1→h2→h3).
Fix: Avoid jumping heading levels; keep a logical outline.
Skill: aeo-answer-first-content teaches an agent how to fix this in your stack.
Image alt-text coverage is above 80%
tech.image-alt-coverage · Severity: medium · Weight: 4
Alt text makes images accessible and indexable.
Fix: Add descriptive alt text to images that lack it.
Skill: aeo-page-metadata teaches an agent how to fix this in your stack.
Pages link internally
tech.internal-linking · Severity: low · Weight: 3
Internal links spread authority and help discovery.
Fix: Add contextual internal links between related pages.
Skill: aeo-site-structure teaches an agent how to fix this in your stack.
Structured data is present
tech.structured-data-present · Severity: high · Weight: 6
Schema.org markup unlocks rich results and answer-engine extraction.
Fix: Add JSON-LD structured data describing the page.
Skill: aeo-structured-data-validation teaches an agent how to fix this in your stack.
Structured data has no invalid items
tech.structured-data-valid · Severity: medium · Weight: 4
Invalid schema (missing required props) is ignored by engines.
Fix: Fix items flagged with missing required properties.
Skill: aeo-structured-data-validation teaches an agent how to fix this in your stack.
OpenGraph tags are complete
tech.open-graph-complete · Severity: medium · Weight: 4
Complete OG tags control how links render when shared.
Fix: Add og:title, og:description, og:image, and og:url.
Skill: aeo-page-metadata teaches an agent how to fix this in your stack.
Twitter Card is declared
tech.twitter-card · Severity: low · Weight: 2
A twitter:card tag controls the X/Twitter preview.
Fix: Add a twitter:card meta tag (e.g. summary_large_image).
Skill: aeo-page-metadata teaches an agent how to fix this in your stack.
Pages declare a mobile viewport
tech.viewport-mobile · Severity: high · Weight: 6
A viewport meta tag is required for mobile-friendly rendering.
Fix: Add .
Skill: aeo-page-metadata teaches an agent how to fix this in your stack.
Site is served over HTTPS
tech.https · Severity: critical · Weight: 9
HTTPS is a baseline ranking and trust requirement.
Fix: Serve all pages over HTTPS and redirect HTTP to HTTPS.
Skill: aeo-indexability teaches an agent how to fix this in your stack.
Page language is declared
tech.lang-declared · Severity: low · Weight: 2
A lang attribute helps engines and assistive tech.
Fix: Set on every page.
Skill: aeo-page-metadata teaches an agent how to fix this in your stack.
Character encoding is declared
tech.charset-declared · Severity: low · Weight: 2
Pages without a declared encoding can be mis-decoded, garbling quoted text.
Fix: Add (or an equivalent content-type meta) to every page.
Skill: aeo-page-metadata teaches an agent how to fix this in your stack.
Titles are unique across pages
tech.unique-titles · Severity: medium · Weight: 3
Duplicate titles dilute relevance and confuse engines.
Fix: Give each page a distinct
Skill: aeo-page-metadata teaches an agent how to fix this in your stack.
hreflang annotations are valid
tech.hreflang-valid · Severity: medium · Weight: 4
Broken hreflang surfaces the wrong language in search and AI answers.
Fix: Use valid language-region codes (or x-default) and point each hreflang at a live URL.
Skill: aeo-indexability teaches an agent how to fix this in your stack.
Pages are not thin on content
tech.content-not-thin · Severity: medium · Weight: 4
Very low word counts read as thin content to engines.
Fix: Expand pages under ~200 words with substantive content.
Skill: aeo-answer-first-content teaches an agent how to fix this in your stack.
Pages use headings to structure content
tech.headings-present · Severity: low · Weight: 2
Headings give content a skimmable, extractable structure.
Fix: Break long content into sections with H2/H3 headings.
Skill: aeo-answer-first-content teaches an agent how to fix this in your stack.
AEO Toolkit is an open-source instrument by Advance Labs.