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
26
Bookmarked
582
Total users
92
Monthly active users
9 days 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.