SEO Site Audit - Crawler, Broken Links, Sitemap & Score avatar

SEO Site Audit - Crawler, Broken Links, Sitemap & Score

Pricing

from $8.50 / 1,000 page auditeds

Go to Apify Store
SEO Site Audit - Crawler, Broken Links, Sitemap & Score

SEO Site Audit - Crawler, Broken Links, Sitemap & Score

Crawl any website and audit on-page SEO: titles, meta descriptions, H1, canonical, noindex, hreflang, Open Graph, alt text, broken links, thin content, JSON-LD, sitemap, robots.txt, HTTPS and orphan pages, with a 0-100 score. US$ 10 per 1,000 pages.

Pricing

from $8.50 / 1,000 page auditeds

Rating

0.0

(0)

Developer

Scrapewise Data

Scrapewise Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

SEO Site Audit

SEO Site Audit crawls a whole website and audits every page for on-page SEO, like a desktop SEO spider, but in the cloud and billed per page. Give it one website or a list of websites and you get:

  • one row per page with status code, redirect chain, title and meta description (length in characters and in Google pixels, duplicates), H1 and all headings, canonical, noindex and nofollow (meta and X-Robots-Tag), hreflang (with return-link check), Open Graph and Twitter card, images without alt, internal and external links, broken links, word count (thin content), JSON-LD and microdata types, HTML size, response time, click depth, a 0-100 score and the list of issues on that page;
  • one summary row per website with a site score and grade, the issues prioritized by severity and number of pages affected, robots.txt and XML sitemap checks (do they exist, do they agree with each other, with noindex and with canonicals), orphan pages (in the sitemap but not linked), HTTPS and TLS certificate expiry, http to https and www redirects, llms.txt and AI crawlers blocked;
  • an HTML report per website in the key-value store, ready to send to a client.

US$ 10 per 1,000 audited pages plus US$ 0.025 per website. No monthly fee, no start fee. Error pages, redirects and non-HTML files are free.

At a glance

  • Price: US$ 10 per 1,000 audited pages + US$ 0.025 per website summary
  • A 200-page website: about US$ 2.03, in about 1 minute
  • What you get for it: page rows with 60+ fields, a website summary with prioritized issues, broken links checked, an HTML report
  • Free: error pages, redirects, non-HTML files, pages skipped by robots.txt

One real row

A page of crawlee.dev, audited on 2026-09-30 in the Apify cloud (lists shortened):

{
"type": "page",
"site": "crawlee.dev",
"url": "https://crawlee.dev/python",
"statusCode": 200,
"score": 92,
"issueCount": 2,
"issues": [
{ "code": "META_DESCRIPTION_DUPLICATE", "severity": "medium", "message": "Same meta description on 4 pages" },
{ "code": "NO_STRUCTURED_DATA", "severity": "low", "message": "No JSON-LD or microdata" }
],
"depth": 1,
"responseTimeMs": 35,
"htmlSizeBytes": 69909,
"inSitemap": true,
"inlinks": 186,
"title": "Crawlee for Python · Fast, reliable Python web crawlers.",
"titleLength": 56,
"titlePixels": 502,
"metaDescriptionLength": 144,
"metaDescriptionDuplicateCount": 4,
"h1": ["Build reliable web scrapers. Fast."],
"h1Count": 1,
"canonical": "https://crawlee.dev/python/",
"canonicalStatus": "self",
"noindex": false,
"hreflang": [{ "lang": "en", "url": "https://crawlee.dev/python/" }, { "lang": "x-default", "url": "https://crawlee.dev/python/" }],
"openGraph": { "title": "Crawlee for Python · Fast, reliable Python web crawlers.", "image": "https://crawlee.dev/python/img/crawlee-python-og.png" },
"wordCount": 668,
"structuredDataTypes": [],
"imagesTotal": 30,
"imagesMissingAltCount": 0,
"internalLinksCount": 16,
"externalLinksCount": 11,
"brokenLinksCount": 0
}

The website summary of the same run: 200 pages audited in 69 seconds, score 91 (A), 1 broken internal link, 92 pages sharing a meta description, certificate valid until 2026-11-17, llms.txt present. In other runs the same day, htmx.org (279 pages, whole site) came back with 13 broken links, 5 orphan pages and 3 pages returning 404, and a coffee shop on Shopify (150 pages) with a sitemap URL blocked by its own robots.txt and noindex pages listed in the sitemap.

What you can do with it

  • Technical SEO audits for your own website or for clients, on a schedule, without installing a desktop crawler.
  • Broken link monitoring: every link found on the audited pages is checked, internal and external.
  • Pre-launch and migration checks: redirects, canonicals, noindex left behind, sitemap and robots.txt coherence.
  • Agency prospecting: audit a list of prospect websites and open the conversation with their score and top 3 issues.
  • Content cleanup: find duplicate titles and descriptions, thin pages, missing H1 and images without alt.

Input

FieldWhat it does
startUrlsWebsites or domains, one per line. The crawl stays on each website
maxPagesPerSiteStop after this many pages per website (default 100, up to 10,000)
includeSubdomainsAlso crawl blog.example.com when you start at example.com
includePatterns, excludePatternsOnly crawl, or skip, URLs containing a text or wildcard pattern (/blog/, */tag/*)
crawlSitemapUrlsFill the remaining budget with sitemap URLs (default on)
checkExternalLinks, maxLinkChecksPerSiteCheck outgoing links for 4xx, 5xx and dead domains (default on, 500 per website)
minWordCountThin content threshold (default 200 words)
respectRobotsTxt, maxConcurrencyPerSite, delayMsPoliteness: robots.txt and Crawl-delay honored, 4 requests at a time per website by default
proxyConfigurationOptional; most websites need none
{ "startUrls": ["https://crawlee.dev", "example.com"], "maxPagesPerSite": 200, "excludePatterns": ["/tag/"] }

Output

Rows have type: page, site or error. The dataset has two views, Pages and Website summaries.

Page fields: url, finalUrl, statusCode, redirectChain, redirectCount, responseTimeMs, htmlSizeBytes, depth, inlinks, inSitemap, score, issues (code, severity, message), title, titleLength, titlePixels, titleDuplicateCount, metaDescription (+ length, pixels, duplicates), h1, h1Count, headings, headingCounts, headingSkips, canonical, canonicalStatus (self, other, missing), metaRobots, xRobotsTag, noindex, nofollow, hreflang, hreflangMissingReturn, openGraph, twitterCard, lang, viewport, favicon, wordCount, thinContent, structuredDataTypes, microdataTypes, jsonLdInvalid, imagesTotal, imagesMissingAlt, imagesEmptyAlt, internalLinksCount, externalLinksCount, brokenInternalLinks, brokenExternalLinks, linksToRedirects, mixedContent.

Website fields: score, grade, averagePageScore, pagesAudited, crawlComplete, topIssues (prioritized, with pages affected and example URLs), https, httpRedirectsToHttps, wwwConsolidated, certificate (issuer, valid to, days left), robotsTxt (sitemaps declared, crawl delay, AI crawlers blocked), llmsTxt, sitemap (URLs, broken, redirecting, noindex, non-canonical, blocked by robots.txt), orphanPages, duplicateTitles, duplicateMetaDescriptions, brokenLinksFound, averageResponseTimeMs, structuredDataTypes.

Issue codes

High: HTTP_ERROR, TITLE_MISSING, BROKEN_INTERNAL_LINKS, CANONICAL_TO_ERROR, NO_HTTPS, CERTIFICATE_INVALID, ROBOTS_BLOCKS_SITE, SITEMAP_URLS_BROKEN, SITEMAP_URLS_BLOCKED_BY_ROBOTS. Medium: META_DESCRIPTION_MISSING, TITLE_DUPLICATE, META_DESCRIPTION_DUPLICATE, H1_MISSING, NOINDEX, IMAGES_MISSING_ALT, BROKEN_EXTERNAL_LINKS, THIN_CONTENT, REDIRECT_CHAIN, SLOW_RESPONSE, VIEWPORT_MISSING, MIXED_CONTENT, HREFLANG_NO_RETURN, JSON_LD_INVALID, SITEMAP_MISSING, ORPHAN_PAGES, WWW_NOT_CONSOLIDATED, and more. Low: length, heading order, Open Graph, Twitter card, URL hygiene and similar.

Pricing

EventPrice
Page audited (HTML page with a 2xx answer)US$ 10 per 1,000
Website summaryUS$ 0.025 per website

A 50-page blog costs about US$ 0.53, a 1,000-page store about US$ 10.03. The best-known SEO audit Actor in the Store charges US$ 40 per 1,000 pages.

FAQ

Does it render JavaScript? No. It reads the HTML the server sends, which is what search engines index first. Websites that build all content in the browser will show little text; that is itself an SEO finding.

Will it hurt my server? It sends at most 4 requests at a time per website by default, honors robots.txt and Crawl-delay, and you can lower the concurrency or add a delay.

Why is orphanPages.count empty? Orphan pages can only be known when the whole website was crawled. Raise maxPagesPerSite until crawlComplete is true.

Why is a link reported as blocked and not broken? Sites like LinkedIn answer 403 or 999 to every automated check. Those links are counted in externalLinksBlockedCheck and never flagged as broken.

How is the score computed? Each page starts at 100 and loses 15 points per high issue, 6 per medium and 2 per low. The website score is the average page score minus half the weight of the website issues.

Limitations

  • JavaScript is not executed and Core Web Vitals are not measured.
  • Pixel widths use Arial at Google's sizes (20 px titles, 14 px descriptions); Google's own cut can differ by a few characters.
  • Link checks stop at maxLinkChecksPerSite; the summary tells how many were not checked.

Changelog

  • 2026-09-30, 0.1: first release.