Technical SEO & AI readiness
Machines read your page before customers do.Make sure they can.
SEOAST reads the HTML your server actually returned, runs 32 practical checks across six sections, and hands back a ranked action plan — not generic SEO advice. Every verdict shows the measurement behind it.
10 audits a day with no account, 100 a day on a free API key. No credit card in either case.
Overall score
Yellow — measurable value left on the table
98 of 162 weight earned, no indexability cap applied.
Checks measured
26/32
7 failing · 9 to improve · 6 not measurable
Ranked actions
16
1 critical first, then by impact, confidence, scope and effort.
Section scores
out of 100
Indexability and crawl control
82
1 failing · 3 to improve · 5 passing
Search appearance
29
2 failing · 2 to improve · 0 passing
Content and structure
53
1 failing · 3 to improve · 1 passing
Machine readability
22
3 failing · 1 to improve · 1 passing
AI-search readiness
100
0 failing · 0 to improve · 3 passing
Business trust and legitimacy
n/a
not measurable · excluded from the score, not counted as zero
- 1 page audited
- JavaScript not rendered
- robots.txt read
- 1 sitemap · 2 URLs
- llms.txt none published
Search is no longer one search engine.
- Google AI Overviews
- Bing
- ChatGPT
- Perplexity
- Gemini
Every one of them reaches your page the same way: one HTTP request for the markup your server returns. SEOAST measures whether what comes back can be fetched, parsed and understood — and it is careful about what that does and does not tell you.
What SEOAST audits
Generative engine optimization (GEO)
Generative engine optimization (GEO) audit
GEO audit for any URL. SEOAST checks the signals generative engines depend on — crawl access for AI bots, snippet eligibility, server-rendered content, structured data, and entity and trust signals — then ranks the fixes.
Learn more
Answer engine optimization (AEO)
Answer engine optimization (AEO) audit
AEO audit for any URL. SEOAST checks whether your answers can be extracted: question headings, direct answers beneath them, FAQPage and QAPage schema, heading structure, readability and server-rendered copy.
Learn more
Technical SEO
Technical SEO audit
Run a technical SEO audit on any URL. SEOAST checks HTTP status, redirects, HTTPS, robots.txt, the robots meta tag, X-Robots-Tag, canonicals and your XML sitemap, then ranks what to fix first.
Learn more
AI-search readiness
AI-search readiness audit
Check whether your page can be crawled, parsed and understood without JavaScript. SEOAST measures the foundational signals — crawl access, snippet eligibility, server-rendered content, structured data and heading structure — that Google says AI features rely on: ordinary Search eligibility.
Learn more
Local SEO
Local SEO audit
Audit a local business page for the signals map results depend on: LocalBusiness schema, NAP consistency, geo coordinates, opening hours, a maps link and linked profiles.
Learn more
Free SEO audit
Free SEO audit and website SEO checker
Free SEO audit for any URL, no signup. SEOAST checks indexability, on-page tags, structured data and AI-crawler access, and ranks the fixes.
Learn more
SEO and AI-search checklist
SEO checklist for 2026: on-page and AI-search readiness
An on-page SEO checklist for 2026 covering indexability, page tags, headings, structured data, server rendering and AI-crawler access. Each item is a check SEOAST runs on your URL for free.
Learn more
Small business website audit
Free website audit for small business
A free, plain-language website audit for small businesses. See whether search engines can read your page, whether it says who you are and how to reach you, and which fixes to make first. No signup.
Learn more
SaaS SEO audit
SaaS SEO audit for product pages and docs
SaaS SEO audit for product, pricing and docs pages. SEOAST checks whether the copy is in the server HTML or only appears after JavaScript runs, plus canonicals, headings, structured data and AI-crawler access.
Learn more
Ecommerce SEO audit
Ecommerce SEO audit for product and category pages
Free ecommerce SEO audit for a product or category URL. SEOAST checks canonicals on parameter URLs, indexability, titles, image alt text and dimensions, structured data types and server-rendered content.
Learn more
SEOAST and desktop crawlers
Desktop crawler vs SEOAST: which audit tool to use
An honest comparison. Desktop crawlers audit whole sites with unlimited URL crawling and JavaScript rendering. SEOAST offers both single-page audits and full-site scans (up to your tier limit) with no install, focusing on AI-crawler access and server-HTML readiness. When to use each, and why many teams use both.
Learn more
What comes back
A report is only useful if someone can act on it without a follow-up meeting. Three things make that possible.
A score you can put in front of a client
One number from 0 to 100, produced by fixed published weights rather than a per-report judgement call. The same page audited twice returns the same score, and the weight of every check is listed further down this page.
The measurement, not just the adjective
Every finding carries what was actually read out of the HTML: the title string and its length, how many images have no alt attribute, which JSON-LD types parsed. When someone disputes a verdict you can show them the input instead of arguing about it.
A fix aimed at whoever edits the page
Each check that does not pass returns one specific recommendation naming the element to change. Checks that pass return no recommendation at all, because there is nothing to do and padding the list wastes the reader’s afternoon.
How it works
Four steps, no account
Step 1
Enter your URL
Choose page audit (one URL) or full-site scan (up to your tier limit). No account, nothing installed.
Step 2
SEOAST runs the checks it can
It fetches the page, then that origin’s robots.txt, sitemap and llms.txt. A coverage line states exactly what came back, and anything it could not read is reported as unmeasured — never as a pass.
Step 3
Read the six section scores
Indexability, search appearance, content, machine readability, AI-search readiness and business trust, each scored on published weights you can check on this page.
Step 4
Work the ranked plan
Findings are ordered by impact, confidence, scope and effort — each with what was measured, what to change, who changes it and what should improve.
What SEOAST will not tell you is how much traffic a fix will produce. Nothing in one page of HTML supports that claim, so no number here pretends to.
What you get back
A real report, not a mockup
The report below was produced by running the audit engine against a sample page at build time. Every score, section and action in it is genuine output — if a weight changes or a check is added, this preview changes with it. That is the same reason the check list further down is imported from the engine rather than retyped.
1 page audited · response headers read · JavaScript not rendered · robots.txt fetched · sitemap read (2 URLs, found via robots.txt) · llms.txt not published · Google Business Profile not checked
https://example.com/services/commercial-roof-repair
60
1 critical issue is holding this page back. 10 of the 16 can be done in minutes.
Do these first
01 Viewport meta tag
critical · 6Found: No <meta name="viewport"> tag was found.
Improves: Makes the page usable on mobile, which is the index Google ranks from.
Minutes · This template · Developer
02 Meta description
high · 2Found: No <meta name="description"> tag was found.
Improves: Raises click-through on the ranking you already have. Does not affect ranking itself.
Minutes · This page · Content or copywriter
03 Canonical URL
high · 2Found: No <link rel="canonical"> was found.
Improves: Consolidates duplicate URL variants onto one address, so ranking signals stop being split.
Minutes · This template · Developer
13 further actions follow in priority order, and every check that passed is listed with what was measured.
What gets measured
The 32 checks, and what each one actually measures
This list is generated from the rule engine itself, including the thresholds. If a check changes, this page changes with it. The weight is that check’s share of the score; weights total 198 when every check is measurable, and only their ratios matter.
Indexability and crawl control
10 checks · 78 of 198 weight
HTTP status
weight 12The status of the final response after redirects. Fails on anything outside the 2xx range, because a URL that does not answer 200 has no document to index; warns on a 2xx that is not 200. Reports not_measurable when the audit was run against supplied HTML rather than a live fetch.
Fixing it: Gives search engines a document to index at this URL at all.
About an hour · This page · Developer
Redirect chain
weight 5Every hop followed to reach the page. Fails on a loop, on any hop through plain http, and at 3 or more hops; warns above 1. Each hop costs crawl budget and adds latency for every visitor.
Fixing it: Cuts latency for every visitor and stops crawl budget being spent on hops.
About an hour · Whole site · Developer
HTTPS
weight 5The scheme of the final URL and whether a Strict-Transport-Security header was returned. Plain http fails; https without HSTS warns, because the first request of a session can still go out in the clear.
Fixing it: Removes the browser "not secure" warning and satisfies a confirmed ranking signal.
About an hour · Whole site · Developer
HTTP security headers
weight 4Response headers already captured for the audited page (no extra requests). Passes when HTTPS sends Strict-Transport-Security with max-age ≥ 15,552,000, X-Content-Type-Options: nosniff, Referrer-Policy, and clickjacking protection via X-Frame-Options or a Content-Security-Policy frame-ancestors directive. Warns when one or two of those are missing; fails on HTTPS with no adequate HSTS and three or more missing. Permissions-Policy, Server version tokens and X-Powered-By are reported in the evidence table but informational. Not measurable without response headers.
Fixing it: Hardens the response against MIME sniffing, referrer leakage, clickjacking and downgrade attacks.
About an hour · Whole site · Developer
TLS certificate
weight 8The HTTPS certificate presented for the hostname: expiry, hostname coverage and chain trust. Fails when expired, not yet valid, hostname mismatch or untrusted; warns when fewer than 21 days remain. Reports not_measurable on plain HTTP or when no certificate was observed.
Fixing it: Lets browsers load the page at all by presenting a valid certificate for this hostname.
About an hour · Whole site · Developer
X-Robots-Tag header
weight 10Indexing 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.
About an hour · This template · Developer
robots.txt
weight 12The 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.
Minutes · Whole site · Developer
Robots meta directives
weight 10Directives across meta robots, googlebot, bingbot and googlebot-news tags. A noindex or none directive fails the check outright because it removes the page from search regardless of every other signal; nofollow warns because it strips the page of its outbound crawl value.
Fixing it: Removes a directive that keeps the page out of search regardless of its content.
Minutes · This page · CMS admin
Canonical URL
weight 6Presence 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.
Minutes · This template · Developer
XML sitemap
weight 6Discovery via the robots.txt Sitemap directive then the conventional paths, followed by XML validation. Fails when nothing retrieved parses, or when a file breaks the 50,000 URL or 50 MB protocol limits; warns on relative or cross-host <loc> values, on partial parse failures, and when a valid sitemap does not list the audited page.
Fixing it: Shortens the delay between publishing a page and it being discovered.
About an hour · Whole site · Developer
Search appearance
4 checks · 24 of 198 weight
Title tag
weight 10Presence, length and structure of <title>. Fails when absent or empty; warns outside 15-60 characters (Google truncates around 60) or when a separator-delimited segment such as the brand name is repeated within the same title.
Fixing it: Improves the strongest on-page relevance signal and the line people click.
Minutes · This page · Content or copywriter
Meta description
weight 8Presence, uniqueness and length of <meta name="description">. Fails when absent or empty; warns outside 70-160 characters or when more than one description tag is present. Does not rank, but it is the copy that earns the click.
Fixing it: Raises click-through on the ranking you already have. Does not affect ranking itself.
Minutes · This page · Content or copywriter
Open Graph tags
weight 4Presence of og:title, og:description and og:image, plus whether the image URL is absolute. Relative og:image values are not resolved by most social crawlers, so the preview renders blank.
Fixing it: Makes shared links render with a title, description and image instead of a bare URL.
Minutes · This template · Developer
X (Twitter) card
weight 2Presence and validity of twitter:card (summary, summary_large_image, app or player) and the accompanying title, description and image. Complete Open Graph tags are treated as an acceptable fallback, because X reads them when the twitter:* equivalents are absent.
Fixing it: Makes links shared on X render as a card rather than plain text.
Minutes · This template · Developer
Content and structure
5 checks · 35 of 198 weight
Heading hierarchy
weight 7The 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.
Minutes · This page · Content or copywriter
H1 and title alignment
weight 6Overlap between the meaningful terms in <title> and in the first <h1>, as a fraction of the smaller term set. At or above 0.5 the two describe the same topic; at or above 0.25 they are loosely related; below that the search result promises one thing and the page delivers another. Reports not_measurable when either element is missing or empty.
Fixing it: Makes the search result and the page agree about the topic, reducing bounce.
Minutes · This page · Content or copywriter
Content depth and readability
weight 8Visible 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.
A project · This page · Content or copywriter
Server-rendered content
weight 8Visible 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.
A project · This template · Developer
Internal linking
weight 6Anchors 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.
About an hour · This template · SEO or marketing lead
Machine readability
5 checks · 23 of 198 weight
Image alt text
weight 5Share of <img> elements with no alt attribute at all. An explicit alt="" is counted as a deliberate decorative marker, not a defect. More than 25% of images missing alt fails; a smaller share warns. Reports not_measurable when the page has no images.
Fixing it: Makes images usable by screen readers and eligible for image search.
Minutes · This page · Content or copywriter
Image dimensions (layout shift)
weight 3Share of <img> elements missing both width and height attributes. Without intrinsic dimensions the browser cannot reserve space before the image loads, which is a direct input to Cumulative Layout Shift. Reports not_measurable when the page has no images.
Fixing it: Reserves space before images load, improving Cumulative Layout Shift.
Minutes · This template · Developer
Structured data (JSON-LD)
weight 4Every <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.
About an hour · This template · Developer
HTML lang attribute
weight 3Presence and shape of the lang attribute on <html>, checked loosely against BCP 47 (a two- or three-letter primary subtag plus optional script, region and variant subtags). Drives language targeting, hreflang consistency and screen-reader pronunciation.
Fixing it: Tells search engines and screen readers which language the page is written in.
Minutes · Whole site · Developer
Viewport meta tag
weight 8Presence of <meta name="viewport">, whether it sets width=device-width, and whether it blocks pinch zoom via user-scalable=no or a maximum-scale below 2. A missing viewport fails mobile-first indexing; a zoom lock is an accessibility defect.
Fixing it: Makes the page usable on mobile, which is the index Google ranks from.
Minutes · This template · Developer
AI-search readiness
4 checks · 15 of 198 weight
llms.txt (non-Google AI crawlers, not scored)
weight 0The site-root /llms.txt, reported for non-Google AI crawlers only. Google Search ignores llms.txt (Google's AI optimization guide), so this check carries a weight of 0 and never moves the score. Absence passes. A file that is not Markdown or has no H1 warns, because a broken published file is sloppy; a well-formed file without a 40+ character summary or links still passes.
Fixing it: Removes a malformed file that non-Google readers may choke on. Google Search ignores llms.txt, so there is no Google effect.
Minutes · Whole site · SEO or marketing lead
AI crawler access (robots.txt)
weight 5The robots.txt already fetched for this audit, matched for the site root and the audited path against listed AI user agents (RFC 9309 specificity and longest-pattern wins; Allow beats Disallow on a tie). Passes when every answer-engine crawler is allowed on this page; warns when some are blocked; fails when all are blocked. Blocking training crawlers only is reported and not scored. HTTP 404 on robots.txt passes; 5xx or unreachable is not_measurable.
Fixing it: Lets answer-engine crawlers read this page so its content can be retrieved for AI-generated answers.
Minutes · Whole site · Developer
JavaScript-only content (raw HTML)
weight 5Visible body text in the raw HTML (script/style/noscript/template stripped), common SPA mount points (#root, #__next, #app, data-reactroot), script-to-text ratio, noscript "enable JavaScript" fallbacks, and whether <main>, <article> or <h1> exist. Passes with 120+ words or a content landmark with 25+ words; warns below 80 words with heavy script (≥18%) and SPA signals; fails on essentially empty HTML with an empty mount or enable-JavaScript message. Non-HTML is not_measurable. SEOAST runs no JavaScript.
Fixing it: Puts the page copy in the first HTML response so bots that never run JavaScript can still read it.
About an hour · This template · Developer
Question-and-answer extractability
weight 5Headings 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.
About an hour · This page · Content or copywriter
Business trust and legitimacy
4 checks · 23 of 198 weight
Business identity
weight 6The 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.
About an hour · Whole site · SEO or marketing lead
Business contact details (NAP)
weight 7Phone numbers from schema telephone, tel: links and visible text, and addresses from PostalAddress, <address> and address-shaped copy. Fails on conflicting phone numbers, or on a business page with no contact details at all; warns when details exist but are not machine-readable or the structured address is incomplete. Reports not_measurable on any page that does not present a business.
Fixing it: Makes the phone number and address readable as data and consistent with the listings elsewhere that search engines reconcile them against.
About an hour · Whole site · SEO or marketing lead
Google Business Profile match
weight 5Two tiers. From the page alone: whether a Google Business Profile is linked or embedded, and whether that link carries a place identifier. When the pipeline has retrieved the profile itself: name, phone, street, locality, postal code and website compared field by field against it. Fails on a disagreement between the two; warns when no profile is linked or the link names no listing. The coverage line states whether the profile was retrieved, so an unmeasured match is never shown as a matching one.
Fixing it: Removes a disagreement between the site and the Google Business Profile, and states which listing this site belongs to.
About an hour · Whole site · SEO or marketing lead
Professional license and credentials
weight 5Whether 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.
About an hour · Whole site · Content or copywriter
AI-search readiness
Build a site machines can understand
Discovery increasingly depends on whether a system can crawl your page, read it without executing JavaScript, and interpret what it is about. SEOAST measures those foundational signals. Each one below is a check that actually runs:
robots.txt
robots_txtLets crawlers read the page, so every other signal on it can be seen.
AI crawler access (robots.txt)
ai_crawler_accessLets answer-engine crawlers read this page so its content can be retrieved for AI-generated answers.
JavaScript-only content (raw HTML)
js_only_contentPuts the page copy in the first HTML response so bots that never run JavaScript can still read it.
X-Robots-Tag header
x_robots_tagRemoves a header-level block that keeps the page out of the index entirely.
Server-rendered content
render_dependencyPuts 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_dataMakes the page eligible for rich results. Eligible, not guaranteed — Google decides whether to show them.
Heading hierarchy
heading_hierarchyGives crawlers and screen readers an unambiguous outline of what the page covers.
HTML lang attribute
html_langTells search engines and screen readers which language the page is written in.
llms.txt (non-Google AI crawlers, not scored)
llms_txtRemoves a malformed file that non-Google readers may choke on. Google Search ignores llms.txt, so there is no Google effect.
What this is not
SEOAST does not query ChatGPT, Perplexity, Gemini or Google AI Overviews, and it does not monitor or measure whether they cite you. Nothing here reports an “AI visibility score”. It measures whether the foundations those systems depend on are in place, which is a different and smaller claim — and one that can be checked.
llms.txt is reported but never scored. Google states that Google Search ignores it, and that AI Overviews and AI Mode have no requirements beyond ordinary Search eligibility — so that eligibility is what SEOAST measures.
What to do first
A report is a plan, not a scoreboard
Every report opens with the three things worth doing first, each with what was measured, what to change, who changes it, roughly how long it takes and what should improve afterwards. The ordering is computed, published and testable:
- priority = impact x confidence x scope x severity / effort.
- Impact (1-3) is how much fixing it moves indexability, search appearance or AI discoverability.
- Confidence (0.5-1.0) is how directly the evidence supports the recommendation. A missing <title> is a measured fact (1.0); an H1/title overlap ratio supports a softer inference (0.75); a readability score is a proxy for a proxy (0.5). Heuristics rank below facts, always.
- Scope is blast radius: one URL (x1), a template (x2), the whole site (x3). Fixing the sitewide thing once is worth more than fixing the page thing once.
- Effort is 1 for minutes in a CMS field, 2 for an hour of developer time, 3 for a project.
- Severity: a fail counts double a warn, matching the scoring model.
- Bands: critical at 4 and above, high from 2, then medium and low.
- What this deliberately does not do is predict traffic. Nothing in one page of HTML supports that claim, so no number here pretends to.
How the score is calculated
Published in full, because a score nobody can reconstruct is a score nobody should trust.
- Each check earns a fraction of its weight: pass = 1.00, warn = 0.50, fail = 0.00.
- not_measurable is excluded from both the earned points and the total, so a page with no images is not punished for having no alt text — the denominator shrinks instead.
- score = round(100 x earned / considered), so it always reads as "percentage of what could be measured".
- Four indexability failures then cap the result outright: http_status holds it at 25, tls_certificate holds it at 25, x_robots_tag holds it at 35, robots_meta holds it at 35, robots_txt holds it at 40, render_dependency holds it at 54. A page search engines cannot reach does not get to score well on the strength of tidy Open Graph tags. The uncapped number is reported alongside it, so a report can show both.
- Bands: green at 80 and above, yellow from 55 to 79, red below 55.
- A score of 0 with nothing considered means "not assessed", not "assessed and terrible".
- Nothing SEOAST did not fetch is ever reported as a pass. Checks with no input report not_measurable and the coverage line at the top of every report says exactly what was retrieved.
Green
80–100
The fundamentals are in place. Remaining findings are refinements.
Yellow
55–79
Working, but leaving measurable value on the table.
Red
0–54
Something structural is wrong. Start at the top of the fail list.
What it does not do
Stated up front, so you find out here rather than mid-audit.
- It reads the HTML your server returned
- No headless browser, no JavaScript execution. If a page assembles its head tags client-side, SEOAST reports what is missing from the first response — which is what a crawler gets before it decides whether the page is worth rendering a second time.
- Page audit or full-site scan
- The page audit checks one URL. The full-site scan crawls your entire site (up to your tier limit), audits every page, and reports whole-site issues. Pick the audit type that matches what you need to check.
- On-page only
- No backlinks, no keyword rankings, no traffic estimates. Nothing here depends on a third-party data vendor, so nothing here goes stale or disagrees with the tool next to it.
- Unmeasurable is a real answer
- A page with no images is not marked down for missing alt text. That check reports “not measurable” and drops out of the denominator instead of scoring zero, so the number always means “percentage of what could actually be checked”.
Built around how the work actually happens
Agencies
Run an audit during a prospect call and have something concrete on the screen before the call ends. Every verdict comes with its evidence, so the deliverable survives a technical reviewer on the client side.
In-house marketers
Check a page before it goes live and again after the CMS has had its way with it. The findings name the element to change, which is the difference between a ticket that gets done and a ticket that gets asked about.
Developers
The REST endpoint and the MCP server share one code path, one auth model and one quota. Wire the audit into CI, a deploy hook, or an agent, and get the same verdicts the web UI shows.
The same audit, from your own tooling
The web form on this site is a client of the public API, not a separate implementation. One code path handles authentication, quota and the outbound fetch, so an audit run from a script returns exactly what the browser shows.
REST
POST /api/v1/audit with a JSON body of { "url": "..." }. Responses carry X-RateLimit-* headers, and a 429 includes Retry-After.
curl -X POST https://seoast.ai/api/v1/audit \
-H 'content-type: application/json' \
-H 'x-api-key: seoast_sk_...' \
-d '{"url": "https://example.com/pricing"}'MCP
An MCP server is mounted at /api/mcp over Streamable HTTP, so an agent can run an audit as a tool call and read the findings directly. It authenticates with the same key, spends the same quota and is bound by the same fetch restrictions as every other caller. Connection details and the tools it exposes.
Refusals are explicit
SEOAST only fetches publicly reachable http and https URLs on ports 80 and 443, and it refuses private and internal addresses. If metering is unavailable it returns 503 rather than running an unmetered audit. Every failure has a machine-readable code.
The free tier, spelled out
No account
10audits per day
Counted per client address, resetting at midnight UTC. Enough to check a landing page, fix it, and check it again. Nothing to sign up for.
Free API key
100audits per day
The same allowance across the web form, the REST endpoint and the MCP server, counted against the key rather than the address. Higher-volume tiers exist on the same key system for teams that outgrow it.
Request a free keyQuestions
The things people ask before they trust a number
What does SEOAST actually fetch?
The URL you give it, then three site-level documents from the same origin: /robots.txt, an XML sitemap, and /llms.txt. Every report states which of those came back, so you can tell the difference between "checked and fine" and "never looked". Nothing that was not fetched is ever reported as passing.
Does it render JavaScript?
No. It reads the HTML your server returned, which is what a crawler sees before it decides whether the page is worth queueing for a rendered pass. One of the checks measures exactly that gap: if your copy only exists after hydration, the report says so rather than quietly grading an empty shell.
Is this a site crawler?
Both. The page audit checks one URL plus three site-level documents (robots.txt, sitemap, llms.txt). The full-site scan crawls up to 100 pages (depending on your tier) from the homepage and sitemap, runs the 32-check audit on each, and reports whole-site issues like broken links, duplicate titles, and orphan pages. There is no rank tracking.
Why did a page with good markup score badly?
Probably a cap. Four indexability failures hold the final score down regardless of everything else: a non-200 status, a noindex in the robots meta tag, a noindex in the X-Robots-Tag header, or a robots.txt rule blocking the URL. The report shows the uncapped number alongside, so you can see the page was fine and the plumbing was not.
What is the difference between the robots meta tag and robots.txt?
They fail in opposite directions and SEOAST checks them separately. A meta noindex lets the crawler read the page but keeps it out of the index. A robots.txt disallow keeps the crawler out entirely — the URL can still be listed, with no title and no description, because nothing was ever read. A third variant, X-Robots-Tag, does the first one from a response header where it is invisible in the markup.
Will an llms.txt file improve my rankings?
Not in Google. Google’s own AI optimization guide says Google Search ignores llms.txt and other AI text files, and that they neither help nor harm visibility. SEOAST still reports the file for other AI crawlers, but gives it a weight of zero: having one, or not, never changes your score.
Can I use it from an agent or a build pipeline?
Yes. The same audit is available over REST and over MCP, from one pipeline — the web page, the API and the MCP tools cannot disagree about a verdict, because there is only one implementation of it.
Does the score mean anything on its own?
It means "percentage of what could be measured, weighted by published weights". It is reproducible — the same page audited twice returns the same number — and every weight is listed on this page. It is not a prediction of traffic, and no honest tool can give you one.
Works well with AI Venture Holdings tools
SEOAST is one of several tools AI Venture Holdings builds and runs. These are live today.
DomainFind.ai
Domain research and availability checking from AI Venture Holdings.
Settle the domain before you build the site, then audit the pages you ship on it. Same team, same idea of a useful answer: a decision you can act on, not a report to file.
Pick a page you already argue about.
Paste the URL and read the findings. If it disagrees with you, the evidence is right there to check.
Audit your pageNo signup required to start.