Each one is a check that runs, described by the engine itself. If a check changes, this page changes with it.
robots.txt
robots_txtThe origin /robots.txt, parsed to RFC 9309: consecutive user-agent lines share a group, the most specific group wins, and the longest matching pattern decides with Allow winning ties. Fails when the audited path is disallowed for Googlebot; warns when the file is absent or declares no Sitemap. Distinct from the robots meta tag: a disallow here stops the crawl, not just the indexing.
Fixing it: Lets crawlers read the page, so every other signal on it can be seen.
X-Robots-Tag header
x_robots_tagIndexing directives delivered in the response header rather than the markup, including any bot-name prefix. A noindex or none fails; nofollow warns. This is checked separately from the robots meta tag because the two disagree often and a header-level noindex is invisible in the HTML.
Fixing it: Removes a header-level block that keeps the page out of the index entirely.
Canonical URL
canonicalPresence of <link rel="canonical">, whether its href is absolute in the markup, whether it resolves to the audited URL itself, and whether more than one canonical is declared. A missing or conflicting canonical lets parameter and trailing-slash variants compete with the page.
Fixing it: Consolidates duplicate URL variants onto one address, so ranking signals stop being split.
Server-rendered content
render_dependencyVisible text as a share of the response body, plus inline script share and server-rendered word count. Fails under 60 words alongside a script-heavy document, or below a 2% text ratio; warns below 5%. SEOAST executes no JavaScript, so this measures what a crawler sees before deciding whether to queue a rendered pass.
Fixing it: Puts the content in the first response, where every crawler reads it, instead of behind a render pass that is neither fast nor guaranteed.
Structured data (JSON-LD)
structured_dataEvery <script type="application/ld+json"> block: whether it parses as JSON, whether it declares an @type (walking arrays and @graph), and which types are present. A block that fails to parse is worse than no block at all, because it forfeits rich-result eligibility silently.
Fixing it: Makes the page eligible for rich results. Eligible, not guaranteed — Google decides whether to show them.
Heading hierarchy
heading_hierarchyThe h1-h6 outline: how many h1 elements exist, whether any heading is empty, and whether the document skips a level (an h2 followed directly by an h4). Zero or multiple h1 elements and skipped levels both make the page outline ambiguous to crawlers and screen readers.
Fixing it: Gives crawlers and screen readers an unambiguous outline of what the page covers.
Question-and-answer extractability
qa_contentHeadings that end in a question mark, and summary/details blocks, in the main content — each paired with the copy beneath it, plus any FAQPage or QAPage JSON-LD. Fails when marked-up questions are absent from the visible copy, or when every question on the page has under 15 words beneath it; warns when questions carry no markup, when some go unanswered, or when an answer runs past 200 words before reaching the point. A page with no questions on it reports not_measurable — this measures how liftable existing answers are and does not require a page to have any.
Fixing it: Lets an answer engine lift a complete answer off this page instead of a fragment of one.
Content depth and readability
content_readabilityVisible copy taken from <main>, <article>, <body> or the document, then measured for word count and Flesch Reading Ease. Under 300 words reads as thin; a reading ease below 30 reads as academic or legal prose to a general audience.
Fixing it: Gives the page enough substance to be a credible answer to the query.
Internal linking
internal_linkingAnchors classified into same-site, external, same-page fragment, non-navigation (mailto:, tel:, javascript:) and href-less. Fewer than 3 internal links makes the page a crawl dead end. Reports not_measurable when the final URL could not be parsed, since there is no origin to judge "same site" against.
Fixing it: Gives crawlers a path onward from this page and spreads authority through the site.
Business identity
business_identityThe business name as claimed in JSON-LD, og:site_name, the copyright line and the logo alt text, compared across those sources after normalising punctuation and legal suffix. Fails when a page that presents a business names it nowhere readable, or names it only outside structured data; warns when the sources disagree. Reports not_measurable on any page that does not present a business at all.
Fixing it: Gives search engines one stable business name to match this site against its own listings, reviews and citations.
Professional license and credentials
professional_credentialsWhether a page presenting a regulated profession — legal, medical, dental, financial, real-estate, insurance, accounting, veterinary or a licensed trade — publishes a license, registration or certification number, detected from schema type and page copy. Fails when the profession is claimed and no credential is stated; warns when one is stated but names no issuing body or sits outside structured data. SEOAST reads what the page states and verifies nothing with any licensing board.
Fixing it: Puts the license behind a regulated claim on the page in a form a reader and a machine can both check.
llms.txt (AI-search readiness)
llms_txtThe site-root /llms.txt: whether it is Markdown, has the required H1, carries a summary of at least 40 characters and links to any pages. A malformed file fails; absence only warns. No search engine has committed to reading this file and its absence is not known to cost visibility — it carries the lightest weight on this list for exactly that reason.
Fixing it: Gives AI crawlers a curated map of the site. An emerging convention with no confirmed effect on search visibility.