Complete SEO Audit Tool - Website Crawler with 0-100 Scores avatar

Complete SEO Audit Tool - Website Crawler with 0-100 Scores

Pricing

$40.00 / 1,000 pages

Go to Apify Store
Complete SEO Audit Tool - Website Crawler with 0-100 Scores

Complete SEO Audit Tool - Website Crawler with 0-100 Scores

Crawl a website and get a 0-100 SEO score for every page: meta tags, headings, Core Web Vitals, broken links, images and schema, each issue returned with its priority and a fix hint, as JSON.

Pricing

$40.00 / 1,000 pages

Rating

5.0

(3)

Developer

My Smart Digital

My Smart Digital

Maintained by Community

Actor stats

25

Bookmarked

556

Total users

102

Monthly active users

18 hours ago

Last modified

Share

Complete SEO Audit Tool

Crawl any website and get a 0-100 SEO score for every page, the exact issues behind that score, and a fix hint for each one — as structured JSON you can pipe into a report, a dashboard or an AI agent.

No account on the audited site, no browser extension, no manual checking. Give it a URL, get an audit.

Who it's for

  • SEO freelancers and agencies running audits for clients, who need the findings as data instead of a PDF.
  • Developers wiring an SEO check into CI, a monitoring job or an internal dashboard.
  • AI agents that need a factual, scored snapshot of a site before writing recommendations.

What you get

Two kinds of records in the dataset:

  • One page record per audited page — overall score, nine category scores, and the full detail behind each one.
  • One site-summary record per start URL — averages across the crawl, top issues ranked by how many pages they hit, score distribution, and crawl coverage.

Each issue comes twice: as a plain sentence (easy to display) and in a structured form with an ID, a category, a priority, an estimated impact and a fix hint (easy to sort and filter).

Input

{
"startUrls": ["https://example.com"],
"crawlPages": true,
"maxPages": 5,
"maxConcurrency": 5,
"respectRobotsTxt": true,
"excludeUrlPatterns": ["/tag/", "/author/"],
"includeSubdomains": false
}

startUrls also accepts objects: [{ "url": "https://example.com" }].

Parameters

ParameterDefaultWhat it does
startUrls (required)URLs to audit. One crawl and one site summary per URL.
crawlPagestrueFollow internal links and audit several pages. Set to false to audit only the start URLs.
maxPages5Pages crawled per start URL. 5 for a preview, 20 for a standard audit, 50+ for a deep one. Drives both duration and cost.
maxConcurrency5Pages audited in parallel. Lower it on slow or rate-limiting sites.
respectRobotsTxttrueSkip URLs disallowed by robots.txt.
excludeUrlPatterns[]Substrings to skip ("/tag/"), or regex wrapped in slashes ("/\\.(pdf|zip)$/"). Useful to keep CMS archive pages out of the crawl.
includeSubdomainsfalseAlso crawl subdomains of the start URL.

Every audit module can be switched off individually (auditMetaTags, auditHeadings, auditContent, auditTechnical, auditPerformance, auditSchema, auditLinks, auditImages, auditAccessibility). All are on by default.

What gets checked

CategoryChecks
Meta tagsTitle and description with length in characters and rendered pixels, uniqueness across the crawl, Open Graph, Twitter Cards, canonical (including self-reference), robots meta
HeadingsFull H1-H6 tree with the actual text of each heading, multiple or missing H1, skipped levels
ContentWord and character count, paragraphs, sentences, average sentence length, readability score and level, keyword density with top keywords
TechnicalHTTPS and certificate validity, mobile viewport and responsiveness, robots.txt parsing, sitemap discovery (including sitemaps declared in robots.txt), indexability
SchemaJSON-LD, microdata and RDFa detection with the types found
PerformanceTime to first byte, first contentful paint, speed index, total blocking time, cumulative layout shift, page load time
LinksInternal and external counts with unique totals and samples, split by navigation / footer / content, nofollow vs dofollow, redirects with their target, broken links verified by an actual request
ImagesAlt and title coverage, real file size in KB, dimensions, format, oversized image detection
AccessibilityARIA labels, lang attribute, skip links, basic colour contrast

Output

page record

{
"type": "page",
"pageUrl": "https://example.com/",
"title": "Example — Home",
"httpStatus": 200,
"audit": {
"overallScore": 89,
"categoryScores": {
"metaTags": 85, "headings": 100, "content": 70, "technical": 85,
"schema": 80, "performance": 100, "links": 100, "images": 100,
"accessibility": 95
},
"issues": {
"critical": [],
"warnings": ["Title tag length is 65 characters (optimal: 30-60)"],
"info": ["Sitemap not found", "4 redirects found"],
"structured": {
"critical": [],
"warnings": [
{
"id": "TITLE_TOO_LONG",
"message": "Title tag length is 65 characters (optimal: 30-60)",
"category": "meta",
"priority": 3,
"estimatedImpact": "medium",
"fixHint": "Adjust title length to 30-60 characters for better visibility in SERPs.",
"pagesAffected": ["https://example.com/"]
}
],
"info": []
}
},
"metaTags": {
"title": {
"present": true,
"value": "Example — Home",
"length": 65,
"lengthPixels": 423,
"optimal": false,
"unique": true,
"recommendation": "Title too long (65 characters, ~423px). Recommended: 30-60 characters (~195-390px)."
}
},
"headings": {
"h1": { "count": 1, "texts": ["Main heading"], "optimal": true },
"h2": { "count": 9, "texts": ["Section one", "Section two"] }
},
"content": {
"wordCount": 1808,
"paragraphCount": 108,
"sentenceCount": 123,
"averageWordsPerSentence": 14.7,
"readability": { "score": 42, "level": "Difficult", "recommendation": "Simplify sentences and use shorter words." },
"keywordDensity": { "topKeywords": [{ "keyword": "hotel", "density": 1.27, "count": 18 }] }
},
"performance": {
"timeToFirstByte": 468.1,
"firstContentfulPaint": 720,
"speedIndex": 1132.8,
"totalBlockingTime": 0,
"cumulativeLayoutShift": 0,
"coreWebVitals": { "cls": 0 }
},
"links": {
"internal": { "count": 13, "unique": 13, "inNavigation": 7, "inFooter": 10, "inContent": 4, "sample": ["https://example.com/pricing"] },
"external": { "count": 0, "nofollow": 0, "dofollow": 0, "sample": [] },
"broken": { "count": 0, "urls": [], "verified": [] },
"redirects": { "count": 4, "urls": [{ "url": "https://example.com/pricing", "statusCode": 301 }] }
},
"images": {
"total": 13, "withAlt": 13, "withoutAlt": 0, "withTitle": 0, "optimized": 13, "largeImages": 0,
"images": [
{ "url": "https://example.com/hero.webp", "alt": "Hotel reception", "width": 2000, "height": 1334,
"hasAlt": true, "sizeKB": 57.2, "format": "webp", "isLarge": false }
]
},
"accessibility": { "ariaLabels": 7, "langAttribute": true, "skipLinks": true, "colorContrast": { "passed": true, "issues": 0 } },
"crawlDepth": 0
}
}

site-summary record

{
"type": "site-summary",
"pagesCrawled": 3,
"averageScore": 85,
"categoryAverages": {
"metaTags": 92, "headings": 93, "content": 70, "technical": 78,
"schema": 57, "performance": 100, "links": 100, "images": 100, "accessibility": 88
},
"topIssues": [
{ "issue": "Title tag length is 65 characters (optimal: 30-60)", "count": 1, "pages": ["https://example.com/"] },
{ "issue": "Skipped heading level: 1 → 3", "count": 1, "pages": ["https://example.com/pricing"] }
],
"distribution": { "excellent": 2, "good": 1, "needsImprovement": 0, "poor": 0 },
"crawlCoverage": {
"pagesCrawled": 3,
"indexable": 3,
"nonIndexable": { "noindex": 0, "canonicalized": 0, "errors4xx": 0, "errors5xx": 0, "redirects": 0 },
"maxDepth": 1
}
}

Scoring

Each category is scored independently against SEO best practice, then combined into overallScore:

ScoreReading
80-100Excellent
60-79Good
40-59Needs improvement
0-39Poor

A page loses points only for issues actually found on it, so the score moves when you fix things.

Cost

You are billed per page analyzed — see the Pricing section on this page for the current rate. maxPages is therefore your cost control: a 5-page preview costs a fraction of a 50-page deep audit. Pages skipped by robots.txt or excludeUrlPatterns are not analyzed.

Limits

  • Static HTML analysis. Content injected client-side after load may not be seen.
  • Performance metrics are lab measurements taken during the crawl, from one location and one connection. They indicate a trend, they are not field data from real users and will not match a Lighthouse or CrUX report exactly.
  • Some Core Web Vitals are only reported when the page exposes them. Expect cls, firstContentfulPaint, speedIndex and totalBlockingTime consistently; LCP is not always available.
  • Colour contrast is a basic check, not a full WCAG audit.
  • Sites behind an anti-bot or a login are out of scope.
  • One crawl per start URL, limited to that domain unless includeSubdomains is on.