SEO Audit Tool: Site Crawler, Broken Links & Score avatar

SEO Audit Tool: Site Crawler, Broken Links & Score

Pricing

from $4.20 / 1,000 page auditeds

Go to Apify Store
SEO Audit Tool: Site Crawler, Broken Links & Score

SEO Audit Tool: Site Crawler, Broken Links & Score

SEO audit tool that crawls your site and scores every page 0-100. Finds broken links, redirect chains, missing titles and meta descriptions, canonical, hreflang and JSON-LD errors, with a fix hint for each issue.

Pricing

from $4.20 / 1,000 page auditeds

Rating

0.0

(0)

Developer

Rod Services

Rod Services

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 days ago

Last modified

Share

SEO audit tool and site crawler: find broken links, redirect chains, missing titles, meta descriptions, canonical, hreflang and JSON-LD errors. Every page gets a 0-100 SEO score and every issue comes with a fix hint, plus one site score for the whole crawl. $6 per 1,000 pages, no API key needed.

What you get

  • A 0-100 SEO score per page and a site score in the run summary, so you know where to start.
  • A fix hint for every issue, for example "Shorten the title to 60 characters or less so Google does not cut it off."
  • Broken link checker: internal links that return 404, 410, 5xx or a network error, with the page they are on.
  • Redirect checker: full redirect chains, hop counts and redirect loops.
  • On-page checks: title and meta description length and duplicates, H1 count, canonical tag, noindex signals, hreflang return links, JSON-LD parse errors, images without alt text, mixed content, Open Graph tags, word count and orphan pages.
  • Two modes: crawl a whole site from one start URL, or check a list of URLs for status and redirects only, at $0.50 per 1,000 URLs.
  • Apify platform extras: run it on a schedule, call it from the API, get results as JSON, CSV or Excel, and connect it to Make, Zapier, n8n or Google Sheets.

Quick start

  1. Click Try for free. The input is prefilled with a 20-page crawl of the Apify Academy docs.
  2. Change Start URL to your own site and set Max pages.
  3. Click Start. A 20-page audit takes about 30 seconds.
  4. Open the Output tab. The Overview view shows the score per page. The Issues view lists one row per issue with its fix.
  5. Open the SUMMARY record in the key-value store for the site score, the top issues and the lowest-scoring pages.

Input example

Crawl a site:

{
"mode": "crawl",
"startUrl": "https://docs.apify.com/academy",
"maxPages": 20
}

Check a list of URLs for status codes and redirects, for example after a site migration:

{
"mode": "urlList",
"urlList": ["http://apify.com", "https://apify.com/pricing", "https://apify.com/this-page-does-not-exist"]
}
FieldWhat it doesDefault
modecrawl = full SEO audit of a site. urlList = status and redirect check of a URL listcrawl
startUrlCrawl mode: where the crawl starts. Same-site links and the XML sitemap are followedprefill: Apify Academy
urlListURL list mode: the URLs to check[]
maxPagesMaximum pages to audit or URLs to check20
respectRobotsTxtSkip pages that robots.txt disallowstrue
includeGlobs / excludeGlobsLimit the crawl, for example to https://example.com/blog/**[]
maxConcurrencyPages processed at the same time5
requestTimeoutSecsTimeout per request30
userAgentUser agent for requests and robots.txt rulesSeoSiteAuditBot
proxyConfigurationNo proxy, Apify datacenter proxy or your own proxy URLsno proxy

Output sample

One dataset item per page. Shortened:

{
"url": "https://docs.apify.com/sdk",
"seoScore": 80,
"finalUrl": "https://docs.apify.com/sdk",
"mode": "crawl",
"statusCode": 200,
"redirectCount": 0,
"responseTimeMs": 232,
"title": "Apify Documentation",
"titleLength": 19,
"metaDescriptionLength": null,
"h1Count": 1,
"canonicalStatus": "self",
"indexable": true,
"brokenLinkCount": 0,
"issueCount": 4,
"errorCount": 0,
"warningCount": 2,
"issues": [
{
"severity": "warning",
"code": "meta-description-missing",
"message": "Page has no meta description",
"fix": "Add a meta description of 50-160 characters that sums up the page."
},
{
"severity": "warning",
"code": "duplicate-title",
"message": "Title is the same as on 2 earlier page(s), first seen on https://docs.apify.com/api",
"fix": "Give each page a unique title that describes its own content."
},
{
"severity": "notice",
"code": "title-too-short",
"message": "Title is 19 characters (recommended >= 30)",
"fix": "Expand the title to 30-60 characters and include the main keyword."
},
{
"severity": "notice",
"code": "image-missing-alt",
"message": "4 image(s) are missing an alt attribute",
"fix": "Add descriptive alt text to content images. Use alt=\"\" for decorative images."
}
]
}

The SUMMARY record in the key-value store, shortened:

{
"siteScore": 95,
"averagePageScore": 96,
"siteScoreDeductions": [{ "reason": "1 group(s) of pages share the same title", "points": 1 }],
"pagesByScoreBand": { "good": 17, "needsWork": 3, "poor": 0, "critical": 0 },
"lowestScoringPages": [{ "url": "https://docs.apify.com/sdk", "seoScore": 80, "errorCount": 0, "warningCount": 2 }],
"topIssues": [
{
"code": "meta-description-missing",
"severity": "warning",
"pages": 4,
"fix": "Add a meta description of 50-160 characters that sums up the page."
}
],
"pagesChecked": 20,
"complete": true,
"issuesByCode": { "meta-description-missing": 4, "duplicate-title": 3, "image-missing-alt": 3 },
"duplicateTitles": [{ "value": "...", "count": 3, "urls": ["..."] }],
"orphanPageUrls": [],
"brokenInternalLinks": 0
}

You can download the dataset as JSON, CSV, Excel, HTML or XML.

How the SEO score works

The score is simple and the same input always gives the same score.

  • Page score: start at 100. Subtract 20 for each error, 8 for each warning and 2 for each notice. Each issue code counts once per page, so 30 images without alt text cost 2 points, not 60. A page that cannot be indexed at all scores 0: failed request, no response, HTTP 4xx or 5xx, a redirect loop or too many redirects.
  • Site score: the average page score, minus small site-level deductions in crawl mode. Each one is capped at 5 points: duplicate title groups, duplicate meta description groups, orphan sitemap pages and broken internal links (1 point each), no robots.txt (2) and no XML sitemap (3). Non-HTML files such as PDFs are not scored.
  • Bands: good 90-100, needs work 70-89, poor 50-69, critical 0-49.

The score is a prioritization aid for technical SEO. It does not measure content quality, backlinks or rankings.

Main fields

FieldMeaning
seoScore0-100 page score, see above
statusCode / finalStatusCodeStatus of the first request and after redirects
redirectChainEvery hop: URL, status, Location and time
canonicalStatusself, other, missing, invalid or broken
hreflangEach alternate with returnLink: true/false/null
brokenLinksInternal links on this page with an error or restricted status
inlinksInternal links to this page found by the time the row was saved
isOrphannull when not decided yet, final list in SUMMARY.orphanPageUrls
issues{ severity, code, message, fix } for every finding

The full field list with descriptions is in the dataset schema on the Output tab and in the API.

Pricing

Pay per event. You pay for pages audited, not for compute time. Paid Apify plans get tier discounts.

EventFREE planBRONZESILVERGOLD
Page audited, crawl mode, per 1,000$6.00$5.40$4.80$4.20
URL checked, URL list mode, per 1,000$0.50$0.45$0.40$0.35
Run start, once per run$0.001$0.001$0.001$0.001

Examples on the FREE plan: a 100-page audit costs about $0.60. A 1,000-page audit costs about $6. Checking 1,000 URLs costs about $0.50. Set Maximum cost per run in the run options and the audit stops at that budget, keeping every page it already audited. Input mistakes cost only the $0.001 start fee.

FAQ

Run crawl mode with your homepage as Start URL and a Max pages value that covers the site. Then filter the Issues view by the code broken-internal-link. Each row shows the page with the broken link, and brokenLinks lists the dead URLs and their status codes.

How do I check redirect chains for a list of old URLs?

Use URL list mode and paste the old URLs. Each row shows redirectCount, the full redirectChain, the final URL and status. Chains of 3 or more hops are flagged, and so are loops.

What is a good SEO score?

90 or more means only minor notices are left. 70-89 means there are warnings to fix, often missing meta descriptions or long titles. Below 50 usually means errors such as broken pages, missing titles or broken links. Start with the topIssues list in SUMMARY. It is sorted by impact.

Does it change anything on my website?

No. It only sends read-only GET and HEAD requests. It never submits forms or logs in.

Does it respect robots.txt?

Yes, by default. Pages that robots.txt disallows for the crawler user agent are not fetched. You can switch this off for a staging site you own.

It checks internal links only, on the same site. External links are counted but not fetched, which keeps runs fast and cheap.

Can I audit a site that blocks bots?

Some sites block unknown crawlers. Try Apify datacenter proxy or your own proxy URLs in Proxy configuration. Residential and SERP proxies are not supported. Links that return 401, 403 or 429 are reported as restricted, not broken.

What happens if a run times out or I stop it?

Pages are saved in batches of 25 while the crawl runs. A timeout, abort or platform migration keeps everything audited so far, and the run never charges the same page twice. An aborted run still writes a partial SUMMARY.

Why are only later pages flagged as duplicates?

Pages are saved during the crawl, so the first page with a given title is saved before the second one is found. Later pages get a duplicate-title or duplicate-meta-description warning naming the first page. The complete groups are in SUMMARY.duplicateTitles and SUMMARY.duplicateMetaDescriptions.

I found a bug or need another check. What now?

Open an issue on the Issues tab with the input you used. Requests for extra checks are welcome.

More tools from the same developer, built with the same pricing and output style.

ActorWhat it does
Website Content Crawler to Markdown for RAG & LLMsCrawl whole websites into clean Markdown, RAG chunks and llms.txt
PDF to Markdown & Text Extractor with OCRPDF, Word, Excel and PowerPoint files to Markdown and text, with OCR
PageSpeed Insights & Lighthouse Bulk CheckerLighthouse scores and Core Web Vitals for many URLs at once
Tech Stack Detector: Wappalyzer & BuiltWith AlternativeDetect the CMS, frameworks, analytics and hosting of any website
Bulk Domain Lookup: DNS, WHOIS, SPF, DMARC & SSLDNS, email security and SSL checks for a list of domains
Speech to Text: Audio, Video & Podcast TranscriberWhisper transcripts, SRT and VTT subtitles from audio, video and podcast feeds
Email Validator & Verifier: Bulk MX & Disposable CheckCheck email lists for syntax, MX records and disposable domains
Website Contact Scraper: Emails, Phones & Social LinksFind emails, phone numbers and social profiles on company websites
VIES VAT Checker & EU Company Registry LookupValidate EU VAT numbers and look up company registry data
Companies House Scraper: UK Company Search & OfficersSearch UK companies and get profiles and officers
EU TED Tenders Scraper & Alerts: Public ProcurementSearch EU public tenders and get alerts for new notices
Greenhouse, Lever & Ashby Job Scraper: 7 ATS in One FeedJob postings from 7 applicant tracking systems in one schema
GitHub Scraper: Repo Stats, Stars, Trending & SearchRepository stats, stars, trending repos and search results