For the complete documentation index, see llms.txt. Every page on this site is also served as Markdown: append `.md` to any URL, or send `Accept: text/markdown`.
Attensira Logo
Attensira

AI SEO audit

One URL in, one list of findings out — each with the robots.txt line, the missing property or the URL we tried that produced it.

Paste the exact page you want cited. We fetch it once, read the origin's robots.txt and llms.txt, look for a sitemap and parse the JSON-LD and headings out of the HTML we were served. Free, no sign-up, the whole result is shown.

Five checks, one page, no score.

  • Which AI crawlers your robots.txt disallows at the site root, and the lines of the group that governs each one.
  • Whether an llms.txt is served at the origin and whether it carries the H1 that llmstxt.org requires.
  • Every ld+json block on the page, and which required or recommended properties the Organization and Article nodes are missing.
  • Whether a sitemap is discoverable — from a Sitemap: line, then /sitemap.xml and /sitemap_index.xml.
  • The heading outline as served: how many H1s, and where a level is skipped.

You get findings with the evidence that produced them. You do not get a number out of a hundred, because we would have to invent the weighting behind it.

What each of the five checks actually reads

Every finding on this page comes from bytes we fetched while you waited. There is no stored profile of your site, no model judging your content and nothing inferred from a name. Three requests go out together — the page, /robots.txt, /llms.txt — plus up to three more looking for a sitemap, and one per redirect hop. Five checks come out of them:

  • Crawler access. We fetch /robots.txt from the origin and parse it under RFC 9309: consecutive User-agent lines share one group, a crawler obeys the group naming it or otherwise the * group, and within that group the longest matching path rule wins with Allow taking ties. Verdicts are for the site root, because that is the one path every site has. For a rule scoped to a specific path, the crawler URL inspector evaluates the exact URL you give it.
  • llms.txt. We request /llms.txt at the origin. The only element llmstxt.org requires is an H1 naming the project; sections, the summary blockquote and the link lists are all optional, so those are counted and never reported as missing.
  • Structured data. We parse every <script type="application/ld+json"> block, following @graph and top-level arrays. Nodes typed Organization or Article (including BlogPosting and NewsArticle) are checked against Google's published required and recommended property lists. A block that is not valid JSON is counted and its parser error quoted — we never describe what an unparseable block was meant to contain.
  • Sitemap. If robots.txt declares Sitemap: lines we try those — the first three, so one file cannot make us fetch a stranger's server all afternoon. If it declares none we try /sitemap.xml and /sitemap_index.xml instead. Either way, every URL we tried is listed with what it returned, and a 200 only counts if the body has a <urlset> or <sitemapindex> root, because a catch-all route returning an HTML page with a 200 is not a sitemap.
  • Heading outline. We extract every h1h6 from the HTML as served, count the H1s and record each place a level is skipped, with the text of the heading that skipped it.

Why there is no score

A blocked GPTBot, a missing dateModified and a jump from H2 to H4 are three different kinds of problem. To print one number we would have to decide how many points each is worth, and we have not published that weighting anywhere — which means the weighting would be invented, and the invented part is exactly the part you would act on.

So the output is findings. The severity grouping is our judgement about what to do first and we say so; the evidence beside each finding — the robots.txt line with its line number, the property name, the URL we tried and what it returned — is the measurement. You can disagree with the grouping and still use the evidence, which is not true of a score.

What this audit cannot tell you

It does not prove any crawler came. robots.txt states permission. Whether a crawler actually fetched the page, and what your server returned when it did, is a question only your own logs answer — which is what server-side crawler log analysis exists to show.

It does not run JavaScript. Every count comes from the HTML your server returned. A page that assembles its headings and its JSON-LD in the browser will read as thinner here than it looks on your screen — and that is the finding, because a fetcher that does not run a browser sees what we saw.

It is one sample. One request, from one place, at one moment. A CDN rule, a geographic block or a deploy five minutes later can all change the answer, and a single sample is not a stable fact about your site.

It does not judge your content. Nothing here reads whether your page answers the question someone asked. It checks whether the page can be reached, parsed and attributed — the gate in front of that judgement, not the judgement.

Questions people ask about this audit

I fixed everything and I am still not cited. What now?

This audit clears the gate, it does not win the race. Access, parseable markup and a readable outline are what make a page usable as a source; whether a model then picks it depends on whether the page answers a question people actually ask and whether something better exists. The next question is which prompts you appear in, which is a measurement of answers rather than of markup.

Why does the report say 'could not check' instead of just failing?

Because a timeout is not a permission and a 503 is not a block. If we cannot read your robots.txt we know nothing about crawler access on that request — reporting that as "allowed" would invent access you may not have, and reporting it as "blocked" would invent a rule you never wrote. Unknown is the honest fourth answer.

Do I need an llms.txt?

Nobody can honestly tell you yes. llms.txt is a proposal at llmstxt.org, not a standard, and no major assistant documents reading it as a requirement. We report whether one exists and whether it follows the spec, because that is a fact; whether it earns its keep for your site is a judgement we are not in a position to make for you. If you want one, the generator writes one from your sitemap.

The schema check flagged a recommended property. Is that a failure?

No, and the finding says so. Google's documentation splits properties into required — without which the type is not eligible for that rich result — and recommended, which make the result more complete. We report both, labelled, rather than merging them into one "errors" count that would overstate the first and hide the second.

What happens to the URLs I audit?

Nothing on this page is tied to you: there is no account, no email field, no history to go back to, and the result is returned to your browser rather than saved to a profile. We will not claim more than that, because this is an ordinary public HTTP endpoint — the URL you submit appears in normal server logs and may be held briefly in a cache keyed by that URL, so a repeat audit does not hit the site again. The shareable link carries the URL as a query parameter and simply re-runs the audit.

Where to go next

See Where You Rank in AI Search Results

Get your free AI visibility report in 60 seconds. Track how often ChatGPT, Claude, and Google AI mention your brand—and discover exactly what your competitors are doing to outrank you.