# GEO / AIEO readiness report: ` aat.ee `

- Checked: 2026-10-21T16:21:41.635Z
- Base score: 94 / 100

> Scores describe technical readiness at the time of the check. They do not claim that any AI model cites or recommends this site. Evidence below is text taken from the scanned site.

## Base checks

### F01 · Public access, HTTPS & redirects — Passed

**Why it is checked:** Checks that visitors and AI crawlers can actually reach your site over a secure HTTPS connection, without odd redirects.

**Result:** In this check, your site looks good on this point — no action needed.

**Evidence:**

- Final URL: ` https://www.aat.ee/ `
- HTTP status: ` 200 `
- Redirect chain: ` 1 hop(s): https://aat.ee/ `

### F02 · robots.txt & crawl rules — Passed

**Why it is checked:** Checks that a valid robots.txt exists — it is the standard way to tell every crawler \(including AI ones\) what they may fetch.

**Result:** In this check, your site looks good on this point — no action needed.

**Evidence:**

- Groups / sitemap lines: ` 2 group(s), 1 sitemap(s) `

### F03 · AI crawler declaration matrix — Passed

**Why it is checked:** Checks whether you have declared rules for AI crawlers in robots.txt, split into search, user-access and training — so YOU decide how AI may use your content.

**Result:** In this check, your site looks good on this point — no action needed.

**Evidence:**

- User-initiated access \(allowed\): ` chatgpt-user `
- Training \(allowed\): ` gptbot, claudebot, google-extended, cohere-ai `

### F04 · Indexing & snippet limits — Passed

**Why it is checked:** Checks for indexing and snippet limits \(like noindex / nosnippet\) that tell engines to ignore or shorten your content.

**Result:** In this check, your site looks good on this point — no action needed.

**Evidence:**

- No robots directives: ` fully permissive `

### F05 · Sitemap discovery & validity — Passed

**Why it is checked:** Checks that a valid XML sitemap exists — it helps crawlers discover your pages more completely.

**Result:** In this check, your site looks good on this point — no action needed.

**Evidence:**

- Sitemap URL: ` https://aat.ee/sitemap.xml `
- Type / entries: ` sitemapindex, 29 child sitemap(s) `
- Declared in robots.txt: ` yes `

### F06 · Canonical & canonical URL — Passed

**Why it is checked:** Checks that your homepage declares a canonical URL that matches where it actually lives — so engines don't treat copies as separate pages.

**Result:** In this check, your site looks good on this point — no action needed.

**Evidence:**

- Canonical: ` https://www.aat.ee/ `

### F07 · Page language & hreflang — Passed

**Why it is checked:** Checks that your page declares its language \(and hreflang alternates if multilingual\), so engines quote the right language version.

**Result:** In this check, your site looks good on this point — no action needed.

**Evidence:**

- html lang: ` en `

### F08 · Title & meta description — Passed

**Why it is checked:** Checks for a clear page title and meta description — this is the text AI answer engines most often quote when citing your site.

**Result:** In this check, your site looks good on this point — no action needed.

**Evidence:**

- title: ` Today's Launched Products on aat.ee `
- meta description: ` Discover the latest product launches today on aat.ee - startups, AI tools, and SaaS products `

### F09 · Semantic & navigable structure — Passed

**Why it is checked:** Checks that your page uses proper headings and navigation \(one h1, h2/h3 sections, a nav landmark\) so engines can segment and understand your content.

**Result:** In this check, your site looks good on this point — no action needed.

**Evidence:**

- h1 count: ` 1 `
- headings h1-h6: ` {"1":1,"2":10,"3":3} `
- nav landmark: ` yes `
- internal links: ` 74 `

### F10 · Content without JavaScript — Partly passed

**Why it is checked:** Checks that your main content is present in the initial HTML — crawlers that skip JavaScript would otherwise see an empty page.

**Result:** In this check, we found something that weakens this signal. It is not fatal, but fixing it makes your site easier for AI answer engines to use — see the suggested steps below.

**Evidence:**

- Visible text \(initial HTML\): ` 4403 chars `
- Inline/loaded scripts: ` 205708 chars `

**Suggested fix (rule template):**

- Reduce JavaScript dependency of core content
- 1. Very little text relative to script payload — verify the main content is present without JS.
- 2. Move critical content into the server-rendered HTML.

### F11 · Structured data \(JSON-LD\) — Passed

**Why it is checked:** Checks for structured data \(JSON-LD\) — machine-readable facts about your business, articles or products that engines can cite with confidence.

**Result:** In this check, your site looks good on this point — no action needed.

**Evidence:**

- JSON-LD blocks: ` 2 valid, 0 malformed `
- \@type values: ` WebSite, ItemList `

### F12 · Structured data consistency — Passed

**Why it is checked:** Checks that your structured data matches what visitors actually see on the page — mismatches reduce engine trust.

**Result:** In this check, your site looks good on this point — no action needed.

**Evidence:**

- Structured names checked: ` aat.ee | Today's Launched Products on aat.ee `
- Consistent: ` 2/2 `

### F13 · Organization, author & source signals — Declared, verification incomplete

**Why it is checked:** Checks for identity signals \(organization info, author names, contact/about links\) that let AI engines know who is behind the content.

**Result:** In this check, we found something that weakens this signal. It is not fatal, but fixing it makes your site easier for AI answer engines to use — see the suggested steps below.

**Evidence:**

- Organization signals: ` WebSite `
- Author signals: ` none `
- Contact/about hints: ` found `

**Suggested fix (rule template):**

- Make the organization identifiable
- 1. Add Organization \(or LocalBusiness\) JSON-LD with name, url and logo.
- 2. Add an author byline \(meta or visible\) for authored content.
- 3. Link an About / Contact page from the homepage.

### F14 · Link discoverability — Passed

**Why it is checked:** Checks that your homepage links to the rest of your site with readable anchor text, so crawlers can discover and name your pages.

**Result:** In this check, your site looks good on this point — no action needed.

**Evidence:**

- Crawlable links: ` 91 total, 74 internal `
- Internal links with anchor text: ` 74 `

### F15 · Markdown discovery — Not found (optional)

**Why it is checked:** Checks whether your site can serve a Markdown version of a page when asked — a format many AI systems process more cleanly than HTML.

**Result:** In this check, we did not receive a Markdown response that meets the verification bar — the cause may be the response format, insufficient content, or an incomplete request. See the evidence for what was actually returned. Optional capability — whether to add it depends on your site's purpose; it does not affect your base score.

**Evidence:**

- Negotiation attempted: ` non-markdown response `

**Suggested fix (rule template):**

- Offer a markdown version of key pages
- 1. Serve text/markdown for the same URL when the request asks for it \(content negotiation\), or publish .md siblings.
- 2. Many documentation frameworks \(e.g. fumadocs, nextra\) can emit this automatically.

### F16 · llms.txt / llms-full.txt — Declared but broken

**Why it is checked:** Checks for an llms.txt — a short, curated index of your key pages written for LLMs. Optional by definition, but it is the front door many AI tools check first.

**Result:** In this check, your llms.txt has more than one \`\# \` title. The llms.txt proposal requires exactly one. This is an optional capability and does not affect your base score.

**Evidence:**

- llms.txt: ` 4671 bytes; H1 ×12; summary yes; H2 sections 4; link entries 25; list items without a link 40 `
- Notes \(do not affect the result\): ` entries without a description 25 `
- llms-full.txt: ` not found `
- Ruleset: ` llms-index/3 · llmstxt-2026-08:b1380e7cf2b1 `

**Suggested fix (rule template):**

- Complete your llms.txt
- 1. Keep exactly one \`\# \` heading \(the site or project name\). Turn the others into \`\#\# \` sections.

### F17 · Content size & truncation risk — Passed

**Why it is checked:** Checks that your homepage HTML is within practical size limits — oversized pages get truncated and tail content becomes invisible.

**Result:** In this check, your site looks good on this point — no action needed.

**Evidence:**

- HTML size: ` 351884 bytes `
- Truncated during fetch: ` false `

### F18 · Agent, API & service discovery — Not applicable

**Why it is checked:** Checks whether your site publishes machine-readable API/agent surfaces \(OpenAPI spec, plugin manifests\) so AI agents can understand what your service offers.

**Result:** Your site looks like a content site, so API/agent surfaces are not expected — this is perfectly normal and not a gap.

**Evidence:**

- No agent/API surface \(normal for a content site\): ` none `

## Agent capability matrix (optional, never scored)

### G01 · Markdown alternate — Not found (optional)

**Why it is checked:** Checks whether your pages declare a Markdown alternate \(via Link headers or \<link\> tags\) that AI agents can fetch directly.

**Result:** Within this check's probe range, we did not find this capability published. It is an optional capability: adding it depends on your site's purpose and it never affects your base score. Optional capability — whether to add it depends on your site's purpose; it does not affect your base score.

**Evidence:**

- No markdown alternate declared: ` no Link header or <link rel=alternate type=text/markdown> `

### G04 · API catalog \(RFC 9727\) — Not found (optional)

**Why it is checked:** Checks for an API catalog at /.well-known/api-catalog \(RFC 9727\) — the standard index that lets agents discover your APIs.

**Result:** Within this check's probe range, we did not find this capability published. It is an optional capability: adding it depends on your site's purpose and it never affects your base score. Optional capability — whether to add it depends on your site's purpose; it does not affect your base score.

**Evidence:**

- /.well-known/api-catalog: ` not found (404) `

### G07 · Agent Skills \(SKILL.md\) — Not found (optional)

**Why it is checked:** Checks for Agent Skills \(SKILL.md\) — packaged capabilities your site offers to AI agents, with the frontmatter agents read first.

**Result:** Within this check's probe range, we did not find this capability published. It is an optional capability: adding it depends on your site's purpose and it never affects your base score. Optional capability — whether to add it depends on your site's purpose; it does not affect your base score.

**Evidence:**

- No SKILL.md declared: ` no SKILL.md link in llms.txt or homepage `

### G12 · DNS agent discovery — Not found (optional)

**Why it is checked:** Checks DNS TXT records that advertise agent services for your domain \(the AID draft convention\).

**Result:** Within this check's probe range, we did not find this capability published. It is an optional capability: adding it depends on your site's purpose and it never affects your base score. Optional capability — whether to add it depends on your site's purpose; it does not affect your base score.

**Evidence:**

- No agent discovery TXT: ` queried _agent.aat.ee, _index._agents.aat.ee `

### G02 · Markdown token diagnostics — Not found (optional)

**Why it is checked:** Checks for token-count headers \(x-markdown-tokens\) on your Markdown response — they let AI gauge truncation risk before reading.

**Result:** Within this check's probe range, we did not find this capability published. It is an optional capability: adding it depends on your site's purpose and it never affects your base score. Optional capability — whether to add it depends on your site's purpose; it does not affect your base score.

**Evidence:**

- No markdown response: ` content negotiation returned non-markdown `

### G03 · Content-Signal — Not found (optional)

**Why it is checked:** Checks for a Content-Signal header — a public statement of how AI may use your content \(training, search, input\).

**Result:** Within this check's probe range, we did not find this capability published. It is an optional capability: adding it depends on your site's purpose and it never affects your base score. Optional capability — whether to add it depends on your site's purpose; it does not affect your base score.

**Evidence:**

- No Content-Signal header: ` not declared `

### G15 · Web Bot Auth — Could not verify

**Why it is checked:** Web Bot Auth lets crawlers cryptographically sign their requests. The keys live on the CRAWLER's domain — a target site publishes nothing to probe, so this row documents the limit instead of guessing.

**Result:** Web Bot Auth signs crawler requests; key directories live on the crawler's own domain and target sites publish no marker, so no site scan can verify support. Absence here is not a defect.

**Evidence:**

- Site-side marker: none by design: ` Web Bot Auth signs crawler requests (draft-meunier-web-bot-auth); key directories live on the crawler's domain, so a site scan cannot verify support `

### G05 · OAuth protected-resource \(RFC 9728\) — Not found (optional)

**Why it is checked:** Checks for OAuth protected-resource metadata \(RFC 9728\) — how your site tells agents which authority protects its API.

**Result:** Within this check's probe range, we did not find this capability published. It is an optional capability: adding it depends on your site's purpose and it never affects your base score. Optional capability — whether to add it depends on your site's purpose; it does not affect your base score.

**Evidence:**

- resource metadata: ` not found (404) `

### G06 · OAuth authorization-server \(RFC 8414\) — Not found (optional)

**Why it is checked:** Checks for OAuth authorization-server metadata \(RFC 8414\) — the standard discovery document for your login/authorization endpoints.

**Result:** Within this check's probe range, we did not find this capability published. It is an optional capability: adding it depends on your site's purpose and it never affects your base score. Optional capability — whether to add it depends on your site's purpose; it does not affect your base score.

**Evidence:**

- issuer metadata: ` not found (404) `

### G08 · MCP catalog \(ai-catalog.json\) — Not found (optional)

**Why it is checked:** Checks for an MCP catalog \(ai-catalog.json\) — the discovery file that lets AI agents find your MCP servers and tool cards.

**Result:** Within this check's probe range, we did not find this capability published. It is an optional capability: adding it depends on your site's purpose and it never affects your base score. Optional capability — whether to add it depends on your site's purpose; it does not affect your base score.

**Evidence:**

- ai-catalog: ` not found (404) `

### G09 · Auth.md — Not found (optional)

**Why it is checked:** Checks for auth.md — a plain-language note telling agents \(and their developers\) how authentication on your site works.

**Result:** Within this check's probe range, we did not find this capability published. It is an optional capability: adding it depends on your site's purpose and it never affects your base score. Optional capability — whether to add it depends on your site's purpose; it does not affect your base score.

**Evidence:**

- auth.md: ` not found (404) `

### G13 · ARD \(Agentic Resource Discovery\) — Not found (optional)

**Why it is checked:** Checks for an ARD manifest \(/.well-known/ard.json\) — a machine-readable list of the resources your site exposes to agents.

**Result:** Within this check's probe range, we did not find this capability published. It is an optional capability: adding it depends on your site's purpose and it never affects your base score. Optional capability — whether to add it depends on your site's purpose; it does not affect your base score.

**Evidence:**

- ard.json: ` not found (404) `

### G14 · WebMCP — Could not verify

**Why it is checked:** WebMCP lets a page register tools for AI agents via JavaScript. It runs in the browser, so a static scan like ours cannot detect it — this row exists to be honest about that limit.

**Result:** WebMCP is a runtime JavaScript API with no static marker in the page HTML, so a static scan cannot verify it either way. Only a real browser session could confirm it.

**Evidence:**

- Statically unverifiable: ` WebMCP is a runtime JS API (document.modelContext, W3C proposal); no declarative HTML marker exists in the spec `

### G10 · UCP \(Universal Commerce Protocol\) — Not found (optional)

**Why it is checked:** Checks for a UCP profile \(/.well-known/ucp\) — the Universal Commerce Protocol discovery document for agentic commerce.

**Result:** Within this check's probe range, we did not find this capability published. It is an optional capability: adding it depends on your site's purpose and it never affects your base score. Optional capability — whether to add it depends on your site's purpose; it does not affect your base score.

**Evidence:**

- ucp: ` not found (404) `

### G11 · Payment declarations \(x402 / MPP / ACP\) — Not found (optional)

**Why it is checked:** Checks whether your published documents declare support for agentic payment protocols \(x402 / MPP / ACP\). Declaration only — we never attempt payments.

**Result:** Within this check's probe range, we did not find this capability published. It is an optional capability: adding it depends on your site's purpose and it never affects your base score. Optional capability — whether to add it depends on your site's purpose; it does not affect your base score.

**Evidence:**

- No payment declarations: ` nothing in openapi.json / UCP / ai-catalog `

## Information items (never scored)

### H01 · Share preview tags — Passed

**Why it is checked:** Checks whether the homepage declares a share preview \(Open Graph title, description and image, and a Twitter Card\) — what link previews in chat apps, social feeds and some AI answer cards are built from.

**Result:** In this check, the homepage HTML contained a complete, well-formed declaration for this item. We read the declaration only and did not fetch what it points to. Information item: it does not affect your base score.

**Evidence:**

- Declared tags: ` og:title, og:description, og:image, twitter:card=summary_large_image, twitter:image `

### H02 · Feed declaration — Passed

**Why it is checked:** Checks whether the homepage declares a feed \(RSS, Atom or JSON Feed\) — a standard way for readers and crawlers to discover new content without re-crawling the site.

**Result:** In this check, the homepage HTML contained a complete, well-formed declaration for this item. We read the declaration only and did not fetch what it points to. Information item: it does not affect your base score.

**Evidence:**

- Feed links declared: ` 1 (application/rss+xml) `
- Feed URL: ` https://www.aat.ee/feed.xml `

### H03 · Site icon declaration — Passed

**Why it is checked:** Checks whether the homepage declares a site icon — what browsers, search results and answer cards show next to your site's name.

**Result:** In this check, the homepage HTML contained a complete, well-formed declaration for this item. We read the declaration only and did not fetch what it points to. Information item: it does not affect your base score.

**Evidence:**

- Icon links declared: ` 1 (icon) `

### H04 · Time signals — Not found (optional)

**Why it is checked:** Checks whether the homepage publishes a machine-readable date \(JSON-LD dates, article meta tags, a \<time\> element or a Last-Modified header\). We only check that a date exists and parses — not how recent it is.

**Result:** In this check, we found no machine-readable date in the homepage HTML or its response headers. Whether to add one depends on your site's purpose. Information item: it does not affect your base score.

**Evidence:**

- Time signals: ` no machine-readable date in the homepage or its headers `

**Suggested fix (rule template):**

- Publish a machine-readable date
- 1. Add datePublished and dateModified \(ISO 8601\) to the page's JSON-LD.
- 2. Or mark the visible date with \<time datetime="…"\>.
- 3. Only publish dates that are true — do not refresh them without changing the content.
