Complete SEO Audit Tool - Website Crawler with 0-100 Scores
Pricing
$40.00 / 1,000 pages
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
Maintained by CommunityActor stats
25
Bookmarked
556
Total users
102
Monthly active users
18 hours ago
Last modified
Categories
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
pagerecord per audited page — overall score, nine category scores, and the full detail behind each one. - One
site-summaryrecord 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
| Parameter | Default | What it does |
|---|---|---|
startUrls (required) | — | URLs to audit. One crawl and one site summary per URL. |
crawlPages | true | Follow internal links and audit several pages. Set to false to audit only the start URLs. |
maxPages | 5 | Pages crawled per start URL. 5 for a preview, 20 for a standard audit, 50+ for a deep one. Drives both duration and cost. |
maxConcurrency | 5 | Pages audited in parallel. Lower it on slow or rate-limiting sites. |
respectRobotsTxt | true | Skip 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. |
includeSubdomains | false | Also 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
| Category | Checks |
|---|---|
| Meta tags | Title and description with length in characters and rendered pixels, uniqueness across the crawl, Open Graph, Twitter Cards, canonical (including self-reference), robots meta |
| Headings | Full H1-H6 tree with the actual text of each heading, multiple or missing H1, skipped levels |
| Content | Word and character count, paragraphs, sentences, average sentence length, readability score and level, keyword density with top keywords |
| Technical | HTTPS and certificate validity, mobile viewport and responsiveness, robots.txt parsing, sitemap discovery (including sitemaps declared in robots.txt), indexability |
| Schema | JSON-LD, microdata and RDFa detection with the types found |
| Performance | Time to first byte, first contentful paint, speed index, total blocking time, cumulative layout shift, page load time |
| Links | Internal 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 |
| Images | Alt and title coverage, real file size in KB, dimensions, format, oversized image detection |
| Accessibility | ARIA 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:
| Score | Reading |
|---|---|
| 80-100 | Excellent |
| 60-79 | Good |
| 40-59 | Needs improvement |
| 0-39 | Poor |
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,speedIndexandtotalBlockingTimeconsistently; 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
includeSubdomainsis on.