Website SEO Audit Tool - On-Page, Broken Links & AI Bots avatar

Website SEO Audit Tool - On-Page, Broken Links & AI Bots

Pricing

from $4.00 / 1,000 page auditeds

Go to Apify Store
Website SEO Audit Tool - On-Page, Broken Links & AI Bots

Website SEO Audit Tool - On-Page, Broken Links & AI Bots

Bulk on-page SEO audit with a 0-100 score and a prioritized fix list per page: titles, meta descriptions, canonicals, noindex, headings, alt text, schema, Open Graph, hreflang, HTTPS, broken links, robots.txt, sitemap, llms.txt and blocked AI crawlers. $4 per 1,000 pages.

Pricing

from $4.00 / 1,000 page auditeds

Rating

0.0

(0)

Developer

Kanto Labs

Kanto Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

Website SEO Audit Tool - 0-100 score and a prioritized fix list for every page

Audit any list of pages, or crawl whole websites, and get a 0-100 SEO score plus the exact issues to fix on each page - titles, meta descriptions, canonicals, noindex, headings, alt text, structured data, Open Graph, hreflang, HTTPS, broken links, robots.txt and sitemaps - in bulk, as JSON, CSV or Excel.

  • $4 per 1,000 audited pages ($0.004 each) - broken-link checking included, no subscription
  • Pages that cannot be fetched are free - you pay only for pages that were actually audited
  • AI search readiness - see which AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot and more) your robots.txt blocks, and whether you publish an llms.txt
  • Fix list, not just a score - every issue is {severity, code, message}, sorted most important first

What does Website SEO Audit do?

For every URL you give it, the actor loads the page the way a search-engine crawler does, checks it against the on-page SEO rules below and returns one row per page with a score, an issue list and all the raw data behind it. With Max pages per site above 1 it also crawls internal links (breadth-first, robots.txt respected) and audits those pages too.

Per page

AreaChecks
StatusHTTP status, redirect chain, response time, page size
Title & descriptionMissing, too short, too long, more than one <title> on the page
Indexabilitynoindex in meta robots or X-Robots-Tag, canonical missing, pointing elsewhere, or declared more than once
ContentH1 missing or multiple, heading counts H1-H6, visible word count (thin content)
ImagesImages without alt text, with sample URLs
LinksInternal / external / nofollow counts, optional broken link check (4xx, 5xx, unreachable)
Rich resultsJSON-LD and microdata types found, invalid JSON-LD blocks
SocialOpen Graph title/description/image, Twitter card
Internationalhreflang alternates
Mobile & basicsViewport meta, lang attribute
SecurityHTTPS, HSTS header, mixed http:// resources

Per site (once per host): robots.txt present, Googlebot allowed, sitemaps declared or found at /sitemap.xml, llms.txt present, and the list of AI bots blocked vs allowed.

Use cases

  • SEO agencies and freelancers - audit a prospect's site in seconds and send the issue list as a spreadsheet.
  • Site owners - schedule a weekly run and get alerted when a page turns noindex or links break.
  • Developers - add an SEO check to CI before a release, or monitor many client sites from one API call.
  • Content teams - find pages with missing or overlong titles and descriptions, thin content or missing alt text.
  • AI search visibility (GEO) - check whether ChatGPT, Claude, Perplexity and Google's AI crawlers are allowed to read your content.
  • Migrations - audit the old and new site and compare scores, canonicals and redirect chains.

How to use it

  1. Click Try for free.
  2. Paste your pages or domains into Pages or websites to audit, one per line.
  3. Leave Max pages per site at 1 to audit only those URLs, or raise it (e.g. 50) to crawl each site.
  4. Optionally switch on Check links for 404s.
  5. Click Start and download the results as JSON, CSV, Excel or HTML, or read them through the API.

Input example

{
"urls": ["https://www.python.org", "https://wordpress.org/news/"],
"maxPagesPerSite": 3,
"checkBrokenLinks": true,
"maxLinksToCheckPerPage": 25
}
FieldWhat it doesDefault
urlsPages or domains to audit, one per line. Strings or {"url": "..."} objects both work.two example sites
maxPagesPerSite1 = only the URLs you list; higher = crawl internal links (breadth-first, robots.txt respected)1
checkBrokenLinksRequest every link on each page and report the broken onesfalse
maxLinksToCheckPerPageCap on link checks per page100
maxConcurrencyPages fetched in parallel5
requestTimeoutSecsPer-page timeout (pages that time out are not charged)30
proxyConfigurationOptional Apify Proxyoff

Output example

One dataset item per audited page. Real output from a cloud run of this actor (a few fields and lists shortened):

{
"url": "https://www.python.org/",
"finalUrl": "https://www.python.org/",
"statusCode": 200,
"redirectChain": [],
"pageSizeKb": 51.3,
"title": "Welcome to Python.org",
"titleLength": 21,
"metaDescription": "The official home of the Python Programming Language",
"metaDescriptionLength": 52,
"canonical": null,
"indexable": true,
"lang": "en",
"hasViewport": true,
"h1": ["Intuitive Interpretation", "Compound Data Types", "All the Flow You’d Expect", "Functions Defined", "Quick & Easy to Learn"],
"headingCounts": { "h1": 5, "h2": 9, "h3": 0, "h4": 0, "h5": 0, "h6": 0 },
"wordCount": 984,
"imageCount": 1,
"imagesMissingAlt": 0,
"internalLinkCount": 126,
"externalLinkCount": 78,
"openGraph": { "title": "Welcome to Python.org", "image": "https://www.python.org/static/opengraph-icon-200x200.png", "type": "website" },
"structuredDataTypes": ["SearchAction", "WebSite"],
"https": true,
"hsts": true,
"mixedContentCount": 1,
"score": 86,
"issueCount": 4,
"issues": [
{ "severity": "medium", "code": "canonical-missing", "message": "No canonical link." },
{ "severity": "medium", "code": "mixed-content", "message": "1 resource/link URL(s) use http:// on an https page." },
{ "severity": "low", "code": "meta-description-short", "message": "Meta description is 52 characters; 120-160 is the usual target." },
{ "severity": "low", "code": "h1-multiple", "message": "5 <h1> headings on one page." }
],
"site": {
"robotsTxtFound": true,
"googlebotAllowed": true,
"sitemapFound": false,
"llmsTxtFound": false,
"aiBotsBlocked": [],
"aiBotsAllowed": ["GPTBot", "ChatGPT-User", "OAI-SearchBot", "ClaudeBot", "Claude-User", "PerplexityBot",
"Google-Extended", "CCBot", "Applebot-Extended", "Bytespider", "meta-externalagent"],
"siteIssues": [
{ "severity": "medium", "code": "sitemap-missing", "message": "No XML sitemap found in robots.txt or at /sitemap.xml." },
{ "severity": "low", "code": "llms-txt-missing", "message": "No /llms.txt for AI assistants (optional, emerging standard)." }
]
},
"error": null
}

With Check links for 404s on, each row also gets linksChecked and brokenLinks ([{"url": ..., "status": 404}]), and a broken-links issue when any are found.

How the score works: it starts at 100 and subtracts 25 per critical, 10 per high, 5 per medium and 2 per low issue on that page (broken links subtract 10). Site-level findings are reported in site.siteIssues and do not change page scores. The formula is fixed, so scores are comparable across runs and sites.

How much does it cost?

$4 per 1,000 audited pages ($0.004 per page), pay-per-event, broken-link checking included. Apify platform compute is included. There is also a one-off start fee of $0.00005 per GB of run memory (the default 1 GB run = $0.00005 per run).

You auditYou pay
1 homepage$0.004
A 50-page crawl of one site$0.20
500 client pages every month$2.00 per month
10,000 pages$40.00

What is free: pages that cannot be fetched at all - DNS failure, timeout, refused connection, TLS error - are returned with an error message and cost nothing. A page that answers (including a 404 or 500, which is itself an SEO finding) is audited and charged once. A URL that redirects to a page already audited in the same run is not charged twice.

Cost cap: set Maximum cost per run in the run options; the actor stops cleanly when it is reached, so a crawl can never cost more than you decided. Apify's free plan includes monthly platform credit you can use to try it.

How it compares

This actorDesktop crawlersLighthouse / page-speed tools
Runs in the cloud, on a schedule, via APIYesNo (runs on your computer)Per page
Bulk lists and whole-site crawlsYesYesOne page at a time
On-page SEO issues with severityYesYesPartly (SEO category)
AI crawler blocking + llms.txtYesVariesNo
Performance lab metrics (Core Web Vitals)NoVariesYes
Renders JavaScriptNoOptionalYes
OutputJSON, CSV, Excel, APIExport filesReport

Pick this actor for fast, cheap, repeatable on-page and crawlability audits at scale. For performance lab metrics use a Lighthouse-style tool alongside it.

Integrations and API

  • API: POST https://api.apify.com/v2/acts/kantolabs~website-seo-audit/run-sync-get-dataset-items?token=YOUR_TOKEN with the input JSON as the body returns the audit in one call.
  • Schedules and alerts: run weekly from Apify Schedules and send the results to Slack, email or a webhook.
  • Google Sheets, Make, Zapier, n8n: standard Apify integrations.
  • AI agents (MCP): callable from Claude, ChatGPT, Cursor or any MCP client through the Apify MCP server.

FAQ

Does it render JavaScript? No - it reads the HTML the server sends, which is what most on-page SEO checks are based on. Sites that build their entire content in the browser will show low word counts; that is itself a real SEO risk worth knowing about.

Does it respect robots.txt? Yes, for every page it discovers while crawling. URLs you list yourself are always audited.

Do I pay for pages that fail? No. Pages that cannot be fetched (DNS error, timeout, refused connection) are listed with an error and not charged.

Is it the same as Lighthouse? No. This is an on-page and crawlability audit, not a performance lab test; it is much faster per page and adds checks Lighthouse does not run, such as broken-link checking, sitemap discovery and AI crawler access.

Which AI crawlers are checked? GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, Claude-User, PerplexityBot, Google-Extended, CCBot, Applebot-Extended, Bytespider and meta-externalagent.

Can I pass {"url": "..."} objects instead of strings? Yes. Both shapes are accepted in urls.

Something looks wrong? Open an issue on the Issues tab with the URL and what you expected.