SEO Audit — bulk on-page checks with a scored report avatar

SEO Audit — bulk on-page checks with a scored report

Pricing

Pay per usage

Go to Apify Store
SEO Audit — bulk on-page checks with a scored report

SEO Audit — bulk on-page checks with a scored report

Audit any list of URLs for on-page SEO: title and meta description length, H1 structure, canonical, viewport, lang, Open Graph, noindex, image alt text, internal/external links, word count and response time. Returns a 0-100 score with the exact issues behind it. No API keys required.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Rumblingb

Rumblingb

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Audit any list of URLs for on-page SEO and get back a 0–100 score plus the exact issues behind it. Not a black box: every deduction is named, so you can hand the output straight to a client or a developer.

No API keys. No external services. No per-result vendor cost.

What it checks

AreaChecks
TitlePresent, length against the 30–60 character target
Meta descriptionPresent, length against the 70–160 character target
HeadingsH1 present and unique, H2/H3 counts
Indexabilitynoindex in robots meta, canonical link present
MobileViewport meta tag
AccessibilityImages missing alt text
SocialOpen Graph title and description
ContentWord count against a 300-word thin-content threshold
TechnicalHTTP status, HTTPS, redirects, response time, lang attribute
LinksTotal, internal and external counts

Input

{
"urls": ["https://example.com", "example.com/pricing"],
"maxConcurrency": 5,
"timeoutMs": 15000
}

A bare domain is accepted — https:// is assumed. Wire urls to the output of a crawler Actor to audit an entire site.

FieldDefaultNotes
urlsRequired. List of pages to audit.
maxConcurrency5Lower this when auditing many pages on one host.
timeoutMs15000Slow pages are recorded as failed rather than stalling the run.
userAgent(see input)Some sites serve different markup to unknown agents.

Output

One dataset item per URL:

{
"url": "https://example.com/",
"ok": true,
"score": 66,
"issueCount": 5,
"issues": [
"Title is short (14 chars, aim 30-60)",
"Missing meta description",
"No canonical link",
"Thin content (21 words, aim 300+)",
"No Open Graph tags (poor social previews)"
],
"statusCode": 200,
"https": true,
"title": "Example Domain",
"titleLength": 14,
"metaDescriptionLength": 0,
"h1Count": 1,
"h2Count": 0,
"canonical": null,
"noindex": false,
"images": 0,
"imagesMissingAlt": 0,
"internalLinks": 0,
"externalLinks": 1,
"wordCount": 21,
"responseTimeMs": 214
}

A SUMMARY record is written to the key-value store with run-level totals: average score, how many pages are missing a title, meta description or H1, how many are noindex, and how many are thin.

How the score works

Every page starts at 100 and loses points per issue. The heaviest deductions are the ones that actually stop a page ranking:

DeductionIssue
−30HTTP 4xx/5xx
−20Marked noindex
−15Missing title, or not served over HTTPS
−12Missing meta description
−10No H1
−8No viewport, or thin content
−5Multiple H1s, no canonical, title/meta length off target

The score is clamped to 0–100. Because deductions are listed in issues, you can always reconstruct exactly how a page got its number.

Typical uses

  • Agency site audits — run a client's sitemap, sort by score ascending, fix the worst first
  • Pre-launch QA — catch missing meta and noindex before a release goes out
  • Competitor benchmarking — audit competitor pages alongside your own
  • Regression monitoring — schedule weekly and alert when a score drops
  • Lead generation — audit prospect sites and lead with the specific problems you found

Notes and limits

Pages are fetched as static HTML. Content injected by client-side JavaScript after load is not evaluated — for heavily client-rendered sites, put a rendering Actor upstream and feed this one the rendered HTML's URL.

robots.txt is not consulted; this reads the pages you supply.